Cloud config database table support

added cloud config database entities
added cloud config repository
converted existing cloud config class
converted all code interacting with previous cloud config object
created migration to automatically load cloud config properties from
application.yaml

Issue-ID: SO-854
Change-Id: Icf408e5d0fcabd1b7e97298963c555fae6964930
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
diff --git a/adapters/mso-openstack-adapters/src/test/java/db/migration/CloudConfigMigrationTest.java b/adapters/mso-openstack-adapters/src/test/java/db/migration/CloudConfigMigrationTest.java
new file mode 100644
index 0000000..b29e1f5
--- /dev/null
+++ b/adapters/mso-openstack-adapters/src/test/java/db/migration/CloudConfigMigrationTest.java
@@ -0,0 +1,107 @@
+package db.migration;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.so.adapters.vnf.BaseRestTestUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+public class CloudConfigMigrationTest extends BaseRestTestUtils {
+
+    @Qualifier("dataSource")
+    @Autowired
+    DataSource dataSource;
+
+    R__CloudConfigMigration cloudConfigMigration;
+
+    @Before
+    public void setup() {
+        cloudConfigMigration = new R__CloudConfigMigration();
+    }
+
+    @Test
+    public void testMigrate() throws Exception {
+        System.setProperty("spring.profiles.active", "test");
+        cloudConfigMigration.migrate(dataSource.getConnection());
+        assertMigratedIdentityServiceData();
+        assertMigratedCloudSiteData();
+        assertMigratedCloudManagerData();
+    }
+
+    @Test
+    public void testMigrateNoData() throws Exception {
+        System.setProperty("spring.profiles.active", "nomigrate");
+        int identityCount = getDataCount("identity_services");
+        int cloudSiteCount = getDataCount("cloud_sites");
+        int cloudManagerCount = getDataCount("cloudify_managers");
+
+        cloudConfigMigration.migrate(dataSource.getConnection());
+
+        Assert.assertEquals(identityCount, getDataCount("identity_services"));
+        Assert.assertEquals(cloudSiteCount, getDataCount("cloud_sites"));
+        Assert.assertEquals(cloudManagerCount, getDataCount("cloudify_managers"));
+    }
+
+
+    private int getDataCount(String tableName) throws Exception {
+        try (Connection con = dataSource.getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select count(1) from " + tableName)) {
+            while (rs.next()) {
+                return rs.getInt(1);
+            }
+        }
+        return 0;
+    }
+
+    private void assertMigratedIdentityServiceData() throws Exception {
+        try (Connection con = dataSource.getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select * from identity_services where id='MTKEYSTONE'")) {
+            boolean dataAvailable = false;
+            while (rs.next()) {
+                dataAvailable = true;
+                Assert.assertEquals("MTKEYSTONE", rs.getString("id"));
+                Assert.assertEquals("http://localhost:5000/v2.0", rs.getString("identity_url"));
+                Assert.assertEquals("john", rs.getString("mso_id"));
+                Assert.assertEquals("313DECE408AF7759D442D7B06DD9A6AA", rs.getString("mso_pass"));
+                Assert.assertEquals("admin", rs.getString("admin_tenant"));
+                Assert.assertEquals("_member_", rs.getString("member_role"));
+                Assert.assertEquals("KEYSTONE", rs.getString("identity_server_type"));
+                Assert.assertEquals("USERNAME_PASSWORD", rs.getString("identity_authentication_type"));
+            }
+            Assert.assertTrue("Expected data in identity_services table post migration but didnt find any!!!", dataAvailable);
+        }
+    }
+
+    private void assertMigratedCloudSiteData() throws Exception {
+        try (Connection con = dataSource.getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select * from cloud_sites where id='regionOne'")) {
+            boolean dataAvailable = false;
+            while (rs.next()) {
+                dataAvailable = true;
+                Assert.assertEquals("regionOne", rs.getString("id"));
+                Assert.assertEquals("regionOne", rs.getString("region_id"));
+                Assert.assertEquals("MT2", rs.getString("clli"));
+                Assert.assertEquals("2.5", rs.getString("cloud_version"));
+                Assert.assertEquals("MTKEYSTONE", rs.getString("identity_service_id"));
+            }
+            Assert.assertTrue("Expected data in identity_services table post migration but didnt find any!!!", dataAvailable);
+        }
+    }
+
+    private void assertMigratedCloudManagerData() throws Exception {
+        try (Connection con = dataSource.getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select * from cloudify_managers where id='manager'")) {
+            boolean dataAvailable = false;
+            while (rs.next()) {
+                dataAvailable = true;
+                Assert.assertEquals("http://localhost:8080", rs.getString("cloudify_url"));
+                Assert.assertEquals("user", rs.getString("username"));
+                Assert.assertEquals("password", rs.getString("password"));
+                Assert.assertEquals("2.0", rs.getString("version"));
+            }
+            Assert.assertTrue("Expected data in identity_services table post migration but didnt find any!!!", dataAvailable);
+        }
+    }
+}
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/TenantAdapterRestTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/TenantAdapterRestTest.java
index acfe656..ea21687 100644
--- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/TenantAdapterRestTest.java
+++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/tenant/TenantAdapterRestTest.java
@@ -75,7 +75,7 @@
 		
 		cloudConfig.getIdentityService("MTN13").setIdentityUrl("http://localhost:" + wireMockPort + "/v2.0");
 		CreateTenantRequest request = new CreateTenantRequest();
-		String cloudSiteId = "mtn13";
+		String cloudSiteId = "MTN13";
 		String requestId = "62265093-277d-4388-9ba6-449838ade586";
 		String serviceInstanceId = "4147e06f-1b89-49c5-b21f-4faf8dc9805a";
 		String tenantName = "testingTenantName";
@@ -127,7 +127,7 @@
 		
 		cloudConfig.getIdentityService("MTN13").setIdentityUrl("http://localhost:" + wireMockPort + "/v2.0");
 		CreateTenantRequest request = new CreateTenantRequest();
-		String cloudSiteId = "mtn13";
+		String cloudSiteId = "MTN13";
 		String requestId = "62265093-277d-4388-9ba6-449838ade586";
 		String serviceInstanceId = "4147e06f-1b89-49c5-b21f-4faf8dc9805a";
 		String tenantName = "testingTenantName";
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BaseRestTestUtils.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BaseRestTestUtils.java
index a2faaaf..cf68f09 100644
--- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BaseRestTestUtils.java
+++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/BaseRestTestUtils.java
@@ -24,10 +24,16 @@
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.http.HttpStatus;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.onap.so.adapters.openstack.MsoOpenstackAdaptersApplication;
+import org.onap.so.db.catalog.beans.AuthenticationType;
+import org.onap.so.db.catalog.beans.CloudIdentity;
+import org.onap.so.db.catalog.beans.CloudSite;
+import org.onap.so.db.catalog.beans.ServerType;
+import org.onap.so.db.catalog.data.repository.CloudIdentityRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
@@ -36,16 +42,20 @@
 import org.springframework.boot.test.web.client.TestRestTemplate;
 import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock;
 import org.springframework.http.HttpHeaders;
-import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import javax.ws.rs.core.MediaType;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
 import static com.github.tomakehurst.wiremock.client.WireMock.reset;
+import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = MsoOpenstackAdaptersApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@@ -63,6 +73,11 @@
 	
 	@LocalServerPort
 	private int port;
+
+	public ObjectMapper mapper;
+	
+	@Autowired
+	private CloudIdentityRepository cloudIdentityRepository;
 	
 	protected String readJsonFileAsString(String fileLocation) throws JsonParseException, JsonMappingException, IOException{
 		ObjectMapper mapper = new ObjectMapper();
@@ -87,10 +102,53 @@
 			return sb.toString();
 		}
 	}
-	
+
+	/***
+	 * Before each test execution, updating IdentityUrl port value to the ramdom wireMockPort
+	 * Since URL will be used as a rest call and required to be mocked in unit tests
+	 */
 	@Before
-	public void setUp(){
+	public void setUp() throws Exception {
 		reset();
+		mapper = new ObjectMapper();
+
+		CloudIdentity identity = new CloudIdentity();
+		identity.setId("MTN13");
+		identity.setMsoId("m93945");
+		identity.setMsoPass("93937EA01B94A10A49279D4572B48369");
+		identity.setAdminTenant("admin");
+		identity.setMemberRole("admin");
+		identity.setTenantMetadata(new Boolean(true));
+		identity.setIdentityUrl("http://localhost:"+wireMockPort+"/v2.0");
+		identity.setIdentityAuthenticationType(AuthenticationType.USERNAME_PASSWORD);
+
+		CloudSite cloudSite = new CloudSite();
+		cloudSite.setId("MTN13");
+		cloudSite.setCloudVersion("3.0");
+		cloudSite.setClli("MDT13");
+		cloudSite.setRegionId("mtn13");
+		cloudSite.setOrchestrator("orchestrator" +
+				"");
+		identity.setIdentityServerType(ServerType.KEYSTONE);
+		cloudSite.setIdentityService(identity);
+
+
+		stubFor(get(urlPathEqualTo("/cloudSite/MTN13")).willReturn(aResponse()
+				.withBody(getBody(mapper.writeValueAsString(cloudSite),wireMockPort, ""))
+				.withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+				.withStatus(HttpStatus.SC_OK)));
+		stubFor(get(urlPathEqualTo("/cloudSite/default")).willReturn(aResponse()
+				.withBody(getBody(mapper.writeValueAsString(cloudSite),wireMockPort, ""))
+				.withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON)
+				.withStatus(HttpStatus.SC_OK)));
+		stubFor(get(urlPathEqualTo("/cloudIdentity/MTN13")).willReturn(aResponse()
+				.withBody(getBody(mapper.writeValueAsString(identity),wireMockPort, ""))
+				.withHeader(org.apache.http.HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON)
+				.withStatus(HttpStatus.SC_OK)));
+	}
+
+	protected static String getBody(String body, int port, String urlPath) throws IOException {
+		return body.replaceAll("port", "http://localhost:" + port + urlPath);
 	}
 	
 	@Test
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterImplTest.java
index 0ce3683..005586e 100644
--- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterImplTest.java
+++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfAdapterImplTest.java
@@ -81,9 +81,10 @@
 	String vnfName = "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001/stackId";
 
 	@Before
-	public void before() {
+	public void before() throws Exception {
 		MockitoAnnotations.initMocks(this);
 		WireMock.reset();
+		setUp();
 	}
 
 	@Test
@@ -105,7 +106,7 @@
 
 		Map<String, String> map = new HashMap<>();
 		map.put("key1", "value1");
-		instance.createVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD",
+		instance.createVfModule("MTN13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD",
 				"volumeGroupHeatStackId|1", "baseVfHeatStackId", "88a6ca3ee0394ade9403f075db23167e", map,
 				Boolean.FALSE, Boolean.TRUE, Boolean.FALSE, msoRequest, new Holder<>(), new Holder<Map<String, String>>(),
 				new Holder<VnfRollback>());
@@ -510,7 +511,7 @@
 		vfModuleCustomization.getVfModule().getModuleHeatTemplate().setParameters(new HashSet<>());
 		Map<String, String> map = new HashMap<>();
 		map.put("key1", "value1");
-		instance.updateVfModule("mtn13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD",
+		instance.updateVfModule("MTN13", "88a6ca3ee0394ade9403f075db23167e", "vnf", "1", vnfName, "VFMOD",
 				"volumeGroupHeatStackId", "baseVfHeatStackId", "vfModuleStackId",
 				"b4ea86b4-253f-11e7-93ae-92361f002671", map, msoRequest, new Holder<Map<String, String>>(),
 				new Holder<VnfRollback>());
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java
index 6f2c6cf..6674c71 100644
--- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java
+++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java
@@ -22,14 +22,13 @@
 package org.onap.so.adapters.vnf;
 
 import org.apache.http.HttpStatus;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.onap.so.adapters.vnf.exceptions.VnfException;
 import org.onap.so.cloud.CloudConfig;
-import org.onap.so.cloud.CloudifyManager;
+import org.onap.so.db.catalog.beans.CloudifyManager;
 import org.onap.so.entity.MsoRequest;
 import org.onap.so.openstack.beans.VnfRollback;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,11 +37,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static com.github.tomakehurst.wiremock.client.WireMock.get;
-import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
-import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
-import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.*;
 
 public class MsoVnfCloudifyAdapterImplTest extends BaseRestTestUtils {
 
@@ -56,23 +51,18 @@
 	private CloudConfig cloudConfig;
 
 	@Before
-	public void before(){
+	public void before() throws Exception {
 		super.setUp();
 		CloudifyManager cloudifyManager = new CloudifyManager();
 		cloudifyManager.setId("mtn13");
 		cloudifyManager.setCloudifyUrl("http://localhost:"+wireMockPort+"/v2.0");
 		cloudifyManager.setUsername("m93945");
 		cloudifyManager.setPassword("93937EA01B94A10A49279D4572B48369");
-		cloudConfig.getCloudifyManagers().put("mtn13",cloudifyManager);
 	}
 	
-	@After
-	public void after(){
-		cloudConfig.getCloudifyManagers().clear();
-	}
-	
-	@Test
-    public void queryVnfNullPointerExceptionTest() throws Exception {
+	@Test 
+    public void queryVnfExceptionTest() throws Exception {
+		reset();
 		expectedException.expect(VnfException.class);
         MsoRequest msoRequest = new MsoRequest();
         msoRequest.setRequestId("12345");
diff --git a/adapters/mso-openstack-adapters/src/test/resources/__files/CreateTenantResponse_Created.json b/adapters/mso-openstack-adapters/src/test/resources/__files/CreateTenantResponse_Created.json
index 934e075..b78f700 100644
--- a/adapters/mso-openstack-adapters/src/test/resources/__files/CreateTenantResponse_Created.json
+++ b/adapters/mso-openstack-adapters/src/test/resources/__files/CreateTenantResponse_Created.json
@@ -1,11 +1,11 @@
 {
 	"createTenantResponse": {
-		"cloudSiteId": "mtn13",
+		"cloudSiteId": "MTN13",
 		"tenantId": "tenantId",
 		"tenantCreated": true,
 		"tenantRollback": {
 			"tenantId": "tenantId",
-			"cloudId": "mtn13",
+			"cloudId": "MTN13",
 			"tenantCreated": true,
 			"msoRequest": {
 				"requestId": "62265093-277d-4388-9ba6-449838ade586",
diff --git a/adapters/mso-openstack-adapters/src/test/resources/__files/CreateTenantResponse_Exists.json b/adapters/mso-openstack-adapters/src/test/resources/__files/CreateTenantResponse_Exists.json
index 6f81ebc..977aa54 100644
--- a/adapters/mso-openstack-adapters/src/test/resources/__files/CreateTenantResponse_Exists.json
+++ b/adapters/mso-openstack-adapters/src/test/resources/__files/CreateTenantResponse_Exists.json
@@ -1,10 +1,10 @@
 {
 	"createTenantResponse": {
-		"cloudSiteId": "mtn13",
+		"cloudSiteId": "MTN13",
 		"tenantId": "tenantId",
 		"tenantCreated": false,
 		"tenantRollback": {
-			"cloudId": "mtn13",
+			"cloudId": "MTN13",
 			"tenantCreated": false,
 			"msoRequest": {
 				"requestId": "62265093-277d-4388-9ba6-449838ade586",
diff --git a/adapters/mso-openstack-adapters/src/test/resources/application-nomigrate.yaml b/adapters/mso-openstack-adapters/src/test/resources/application-nomigrate.yaml
new file mode 100644
index 0000000..c508b6e
--- /dev/null
+++ b/adapters/mso-openstack-adapters/src/test/resources/application-nomigrate.yaml
@@ -0,0 +1,122 @@
+# will be used as entry in DB to say SITE OFF/ON for healthcheck
+# MSO Properties go here
+org:
+  onap:
+    so:
+      adapters:
+        default_keystone_url_version: /v2.0
+        default_keystone_reg_ex: "/[vV][0-9]"
+        vnf:
+          bpelauth: 481E6A95CE97E393A53363750D5E1E75
+          checkRequiredParameters: true
+          addGetFilesOnVolumeReq: false
+          sockettimeout: 30
+          connecttimeout: 30
+          retrycount: 5
+          retryinterval: -15
+          retrylist: 408,429,500,502,503,504,900
+        network:
+          bpelauth: 481E6A95CE97E393A53363750D5E1E75
+          sockettimeout: 5
+          connecttimeout: 5
+          retrycount: 5
+          retryinterval: -15
+          retrylist: 408,429,500,502,503,504,900
+        tenant: 
+          default_x_aic_orm_client_string: ONAP-SO
+          default_keystone_url_version: /v2.0
+          default_keystone_reg_ex: "/[vV][0-9]"
+          default_tenant_description: ECOMP Tenant
+          default_region_type: single
+          default_user_role: admin
+          default_success_status_string: Success
+          default_no_regions_status_string: no regions
+          default_orm_request_path: /v1/orm/customers/
+          default_orm_url_replace_this: 8080
+          default_orm_url_replace_with_this: 7080
+          default_quota_value: 10
+          set_default_quota: false
+        valet:
+          base_url: http://localhost:${wiremock.server.port}
+          base_path: /api/valet/placement/v1/
+          valet_auth: 
+ecomp:
+  mso:
+    adapters:
+      po:
+        retryCodes: 504
+        retryDelay: 5
+        retryCount: 3
+      vnf:
+        heat:
+          create:
+            pollInterval: 15
+          delete:
+            pollTimeout: 7500
+            pollInterval: 15
+      network:
+        heat:
+          create:
+            pollInterval: 15
+          delete:
+            pollTimeout: 300
+            pollInterval: 15
+      
+server-port: 8080
+ssl-enable: false
+tomcat:
+  max-threads: 50
+mso:
+  logPath: logs
+  catalog:
+    db:
+      spring:
+        endpoint: http://localhost:${wiremock.server.port}
+  db:
+    auth: Basic YnBlbDptc28tZGItMTUwNyE=
+  site-name: localDevEnv
+  async:
+    core-pool-size: 50
+    max-pool-size: 50
+    queue-capacity: 500
+spring:
+  datasource:
+    url: jdbc:mariadb://localhost:3307/catalogdb
+    username: root
+    password: password
+    driver-class-name: org.mariadb.jdbc.Driver    
+    initialize: true
+    initialization-mode: never
+  jpa:   
+    generate-ddl: false
+    show-sql: false
+    hibernate:      
+      ddl-auto: none
+      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
+      enable-lazy-load-no-trans: true
+    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
+  security:
+    usercredentials:
+    -  
+      username: test
+      password: '$2a$12$Zi3AuYcZoZO/gBQyUtST2.F5N6HqcTtaNci2Et.ufsQhski56srIu'
+      role: MSO-Client        
+
+mariaDB4j:
+  dataDir: 
+  port: 3307
+  databaseName: catalogdb
+
+
+#Actuator
+management: 
+  endpoints:
+    enabled-by-default: false
+  endpoint:
+    info:
+      enabled: true
+
+flyway:
+  baseline-on-migrate: true
+  outOfOrder: true
+  ignoreMissingMigrations: true
\ No newline at end of file
diff --git a/adapters/mso-openstack-adapters/src/test/resources/application-test.yaml b/adapters/mso-openstack-adapters/src/test/resources/application-test.yaml
index 97eecc2..d159783 100644
--- a/adapters/mso-openstack-adapters/src/test/resources/application-test.yaml
+++ b/adapters/mso-openstack-adapters/src/test/resources/application-test.yaml
@@ -71,7 +71,7 @@
   catalog:
     db:
       spring:
-        endpoint: "http://localhost:"
+        endpoint: http://localhost:${wiremock.server.port}
   db:
     auth: Basic YnBlbDptc28tZGItMTUwNyE=
   site-name: localDevEnv
@@ -118,13 +118,13 @@
 
 cloud_config:
   identity_services:
-    MTN13:
-      identity_url: "http://localhost:${wiremock.server.port}/v2.0"
-      mso_id: "m93945"
-      mso_pass: "93937EA01B94A10A49279D4572B48369"
+    MTKEYSTONE:
+      identity_url: "http://localhost:5000/v2.0"
+      mso_id: "john"
+      mso_pass: "313DECE408AF7759D442D7B06DD9A6AA"
       admin_tenant: "admin"
-      member_role: "admin"
-      tenant_metadata: true
+      member_role: "_member_"
+      tenant_metadata: false
       identity_server_type: "KEYSTONE"
       identity_authentication_type: "USERNAME_PASSWORD"
   cloud_sites:
@@ -135,3 +135,20 @@
       identity_service_id: "MTN13"
       orchestrator: "orchestrator"
       cloudify_id: "mtn13"
+    regionOne:
+      region_id: "regionOne"
+      clli: "MT2"
+      aic_version: "2.5"
+      identity_service_id: "MTKEYSTONE"
+  cloudify_managers:
+    manager:
+      cloudify_url: "http://localhost:8080"
+      username: "user"
+      password: "password"
+      version: "2.0"
+
+
+flyway:
+  baseline-on-migrate: true
+  outOfOrder: true
+  ignoreMissingMigrations: true
\ No newline at end of file
diff --git a/adapters/mso-openstack-adapters/src/test/resources/data.sql b/adapters/mso-openstack-adapters/src/test/resources/data.sql
index 5fabec6..d16ca45 100644
--- a/adapters/mso-openstack-adapters/src/test/resources/data.sql
+++ b/adapters/mso-openstack-adapters/src/test/resources/data.sql
@@ -136,7 +136,11 @@
 
  INSERT INTO `vf_module_customization` (`MODEL_CUSTOMIZATION_UUID`, `LABEL`, `INITIAL_COUNT`, `MIN_INSTANCES`, `MAX_INSTANCES`, `AVAILABILITY_ZONE_COUNT`, `HEAT_ENVIRONMENT_ARTIFACT_UUID`, `VOL_ENVIRONMENT_ARTIFACT_UUID`, `CREATION_TIMESTAMP`, `VF_MODULE_MODEL_UUID`) VALUES ('9b339a61-69ca-465f-86b8-1c72c582b8e8', 'base_vmme', 1, 1, 1, NULL, 'f4a21b58-5654-4cf6-9c50-de42004fe2b4', '3375f64b-4709-4802-8713-7a164763f9cd', '2018-05-13 12:12:09', '207fe0dc-4c89-4e5d-9a78-345e99ef7fbe');
 
+INSERT INTO `cloudify_managers` (`ID`, `CLOUDIFY_URL`, `USERNAME`, `PASSWORD`, `VERSION`, `LAST_UPDATED_BY`, `CREATION_TIMESTAMP`, `UPDATE_TIMESTAMP`) VALUES ('mtn13', 'http://localhost:28090/v2.0', 'm93945', '93937EA01B94A10A49279D4572B48369', NULL, 'MSO_USER', '2018-07-17 14:05:08', '2018-07-17 14:05:08');
 
+INSERT INTO `identity_services` (`ID`, `IDENTITY_URL`, `MSO_ID`, `MSO_PASS`, `ADMIN_TENANT`, `MEMBER_ROLE`, `TENANT_METADATA`, `IDENTITY_SERVER_TYPE`, `IDENTITY_AUTHENTICATION_TYPE`, `LAST_UPDATED_BY`, `CREATION_TIMESTAMP`, `UPDATE_TIMESTAMP`) VALUES ('MTN13', 'http://localhost:28090/v2.0', 'm939454', '93937EA01B94A10A49279D4572B48369', 'admin', 'admin', 1, 'KEYSTONE', 'USERNAME_PASSWORD', 'MSO_USER', '2018-07-17 14:02:33', '2018-07-17 14:02:33');
+
+INSERT INTO `cloud_sites` (`ID`, `region_id`, `identity_service_id`, `cloud_version`, `clli`, `cloudify_id`, `platform`, `orchestrator`, `CREATION_TIMESTAMP`, `UPDATE_TIMESTAMP`) VALUES ('MTN13', 'mtn13', 'MTN13', '3.0', 'MDT13', 'mtn13', null, 'orchestrator', '2018-07-17 14:06:28', '2018-07-17 14:06:28');
 
 
 
diff --git a/adapters/mso-openstack-adapters/src/test/resources/schema.sql b/adapters/mso-openstack-adapters/src/test/resources/schema.sql
index d24d16d..a051417 100644
--- a/adapters/mso-openstack-adapters/src/test/resources/schema.sql
+++ b/adapters/mso-openstack-adapters/src/test/resources/schema.sql
@@ -781,4 +781,53 @@
 	PRIMARY KEY (`ID`),
 	CONSTRAINT uk1_model UNIQUE (`MODEL_TYPE`, `MODEL_VERSION_ID`),
 	FOREIGN KEY (`RECIPE`) REFERENCES `model_recipe` (`MODEL_ID`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
\ No newline at end of file
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+CREATE TABLE IF NOT EXISTS `identity_services` (
+  `ID` varchar(50) NOT NULL,
+  `IDENTITY_URL` varchar(200) DEFAULT NULL,
+  `MSO_ID` varchar(255) DEFAULT NULL,
+  `MSO_PASS` varchar(255) DEFAULT NULL,
+  `ADMIN_TENANT` varchar(50) DEFAULT NULL,
+  `MEMBER_ROLE` varchar(50) DEFAULT NULL,
+  `TENANT_METADATA` tinyint(1) DEFAULT 0,
+  `IDENTITY_SERVER_TYPE` varchar(50) DEFAULT NULL,
+  `IDENTITY_AUTHENTICATION_TYPE` varchar(50) DEFAULT NULL,
+  `LAST_UPDATED_BY` varchar(120) DEFAULT NULL,
+  `CREATION_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(),
+  `UPDATE_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(),
+  PRIMARY KEY (`ID`)
+) ;
+
+
+
+CREATE TABLE IF NOT EXISTS `cloudify_managers` (
+  `ID` varchar(50) NOT NULL,
+  `CLOUDIFY_URL` varchar(200) DEFAULT NULL,
+  `USERNAME` varchar(255) DEFAULT NULL,
+  `PASSWORD` varchar(255) DEFAULT NULL,
+  `VERSION` varchar(20) DEFAULT NULL,
+  `LAST_UPDATED_BY` varchar(120) DEFAULT NULL,
+  `CREATION_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(),
+  `UPDATE_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(),
+  PRIMARY KEY (`ID`)
+) ;
+
+
+
+CREATE TABLE IF NOT EXISTS `cloud_sites` (
+  `ID` varchar(50) NOT NULL,
+  `REGION_ID` varchar(11)  DEFAULT NULL,
+  `IDENTITY_SERVICE_ID` varchar(50)  DEFAULT NULL,
+  `CLOUD_VERSION` varchar(20)  DEFAULT NULL,
+  `CLLI` varchar(11)  DEFAULT NULL,
+  `CLOUDIFY_ID` varchar(50)  DEFAULT NULL,
+  `PLATFORM` varchar(50)  DEFAULT NULL,
+  `ORCHESTRATOR` varchar(50)  DEFAULT NULL,
+  `LAST_UPDATED_BY` varchar(120) DEFAULT NULL,
+  `CREATION_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(),
+  `UPDATE_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(),
+  PRIMARY KEY (`ID`),
+  KEY `FK_cloud_sites_identity_services` (`IDENTITY_SERVICE_ID`),
+  CONSTRAINT `FK_cloud_sites_identity_services` FOREIGN KEY (`IDENTITY_SERVICE_ID`) REFERENCES `identity_services` (`ID`)
+) ;
\ No newline at end of file