diff --git a/bpmn/MSOInfrastructureBPMN/pom.xml b/bpmn/MSOInfrastructureBPMN/pom.xml
index f7170ff..f7cb61a 100644
--- a/bpmn/MSOInfrastructureBPMN/pom.xml
+++ b/bpmn/MSOInfrastructureBPMN/pom.xml
@@ -367,6 +367,13 @@
 			<version>8.9.1</version>
 		</dependency>
 
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+			<scope>test</scope>
+		</dependency>
+
 		<!--for yang tools-->
 <!--		<dependency>
 			<groupId>org.onap.so</groupId>
diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/aai/AAIServiceInstanceTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/aai/AAIServiceInstanceTest.java
new file mode 100644
index 0000000..b9f3399
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/aai/AAIServiceInstanceTest.java
@@ -0,0 +1,114 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+
+package org.openecomp.mso.bpmn.infrastructure.aai;
+
+import org.junit.Test;
+
+
+public class AAIServiceInstanceTest {
+
+    AAIServiceInstance test = new AAIServiceInstance("serviceInstanceName","serviceType","serviceRole","orchestrationStatus","modelInvariantUuid","modelVersionId","environmentContext","workloadContext");
+
+    @Test
+    public void getServiceInstanceNameTest() throws Exception {
+        test.getServiceInstanceName();
+    }
+
+    @Test
+    public void setServiceInstanceNameTest() throws Exception {
+        test.setServiceInstanceName("serviceInstanceName");
+    }
+
+    @Test
+    public void getServiceTypeTest() throws Exception {
+        test.getServiceType();
+    }
+
+    @Test
+    public void setServiceTypeTest() throws Exception {
+        test.setServiceType("serviceType");
+    }
+
+
+    @Test
+    public void getServiceRoleTest() throws Exception {
+        test.getServiceRole();
+    }
+
+    @Test
+    public void setServiceRoleTest() throws Exception {
+        test.setServiceRole("serviceRole");
+    }
+
+    @Test
+    public void getOrchestrationStatusTest() throws Exception {
+        test.getOrchestrationStatus();
+    }
+
+    @Test
+    public void setOrchestrationStatusTest() throws Exception {
+        test.setOrchestrationStatus("status");
+    }
+
+    @Test
+    public void getModelInvariantUuidTest() throws Exception {
+        test.getModelInvariantUuid();
+    }
+
+    @Test
+    public void setModelInvariantUuidTest() throws Exception {
+        test.setModelInvariantUuid("uuid");
+    }
+
+    @Test
+    public void getModelVersionIdTest() throws Exception {
+        test.getModelVersionId();
+    }
+
+    @Test
+    public void setModelVersionIdTest() throws Exception {
+        test.setModelVersionId("versionId");
+    }
+
+    @Test
+    public void getEnvironmentContextTest() throws Exception {
+        test.getEnvironmentContext();
+    }
+
+    @Test
+    public void setEnvironmentContextTest() throws Exception {
+        test.setEnvironmentContext("context");
+    }
+
+    @Test
+    public void getWorkloadContextTest() throws Exception {
+        test.getWorkloadContext();
+    }
+
+    @Test
+    public void setWorkloadContextTest() throws Exception {
+        test.setWorkloadContext("context");
+    }
+
+}
+
+
diff --git a/common/src/test/java/org/openecomp/mso/client/aai/AAIUpdatorImplTest.java b/common/src/test/java/org/openecomp/mso/client/aai/AAIUpdatorImplTest.java
new file mode 100644
index 0000000..86adb5f
--- /dev/null
+++ b/common/src/test/java/org/openecomp/mso/client/aai/AAIUpdatorImplTest.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.mso.client.aai;
+
+import org.junit.Test;
+
+public class AAIUpdatorImplTest {
+
+    AAIUpdatorImpl test = new AAIUpdatorImpl();
+
+    protected AAIRestClientI client;
+
+    @Test
+    public void getClientTest() throws Exception {
+        test.getClient();
+    }
+
+    @Test
+    public void setClientTest() throws Exception {
+        test.setClient(client);
+    }
+
+
+    @Test(expected = NullPointerException.class)
+    public void updateVnfToLockedTest() throws Exception {
+        test.updateVnfToLocked("vnfId","uuId");
+    }
+
+
+    @Test(expected = NullPointerException.class)
+    public void updateVnfToUnLockedTest() throws Exception {
+        test.updateVnfToUnLocked("vnfId","uuId");
+    }
+
+}
diff --git a/common/src/test/java/org/openecomp/mso/client/aai/exceptions/AAIPayloadExceptionTest.java b/common/src/test/java/org/openecomp/mso/client/aai/exceptions/AAIPayloadExceptionTest.java
new file mode 100644
index 0000000..3895230
--- /dev/null
+++ b/common/src/test/java/org/openecomp/mso/client/aai/exceptions/AAIPayloadExceptionTest.java
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.mso.client.aai.exceptions;
+
+import org.junit.Test;
+
+public class AAIPayloadExceptionTest {
+
+    Throwable t = new Throwable();
+
+    @Test
+    public void callConstructorTest() throws Exception {
+
+        AAIPayloadException test1 = new AAIPayloadException("testing");
+
+        AAIPayloadException test2 = new AAIPayloadException("testing", t);
+
+        AAIPayloadException test3 = new AAIPayloadException(t);
+    }
+
+}
