Merge "Reorder modifiers"
[so.git] / adapters / mso-adapter-utils / src / test / java / org / openecomp / mso / adapter_utils / tests / MsoHeatUtilsTest.java
index 22a2c63..93afbcc 100644 (file)
 
 package org.openecomp.mso.adapter_utils.tests;
 
-import java.util.HashMap;
+import java.io.IOException;
+import java.util.*;
 
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.TextNode;
+import com.woorea.openstack.base.client.HttpMethod;
+import com.woorea.openstack.base.client.OpenStackRequest;
+import com.woorea.openstack.heat.model.Stack;
+import com.woorea.openstack.keystone.model.Access;
+import com.woorea.openstack.keystone.utils.KeystoneUtils;
+import mockit.Deencapsulation;
+import mockit.Invocation;
+import mockit.Mock;
+import mockit.MockUp;
+import mockit.integration.junit4.JMockit;
+import org.json.JSONException;
+import org.json.JSONObject;
 import org.junit.BeforeClass;
 import org.junit.Test;
-
+import org.junit.runner.RunWith;
 import org.openecomp.mso.cloud.CloudConfigFactory;
-import org.openecomp.mso.openstack.exceptions.MsoAdapterException;
+import org.openecomp.mso.cloud.CloudConfigTest;
+import org.openecomp.mso.openstack.beans.StackInfo;
 import org.openecomp.mso.openstack.exceptions.MsoCloudIdentityNotFound;
 import org.openecomp.mso.openstack.exceptions.MsoCloudSiteNotFound;
 import org.openecomp.mso.openstack.exceptions.MsoException;
@@ -35,9 +53,10 @@ import org.openecomp.mso.openstack.exceptions.MsoStackAlreadyExists;
 import org.openecomp.mso.openstack.exceptions.MsoTenantNotFound;
 import org.openecomp.mso.openstack.utils.MsoCommonUtils;
 import org.openecomp.mso.openstack.utils.MsoHeatUtils;
+import org.openecomp.mso.properties.MsoPropertiesException;
 import org.openecomp.mso.properties.MsoPropertiesFactory;
 
-
+import com.woorea.openstack.heat.model.CreateStackParam;
 
 /**
  * This class implements test methods of the MsoHeatUtils
@@ -50,29 +69,34 @@ public class MsoHeatUtilsTest extends MsoCommonUtils {
        public static MsoHeatUtils msoHeatUtils;
 
        @BeforeClass
-       public static final void loadClasses() throws MsoCloudIdentityNotFound {
-               ClassLoader classLoader = CloudConfigTest.class.getClassLoader();
-               String config = classLoader.getResource("cloud_config.json").toString().substring(5);
-               cloudConfigFactory.initializeCloudConfig(config, 1);
-               msoHeatUtils = new MsoHeatUtils("NO_PROP",msoPropertiesFactory,cloudConfigFactory);
+       public static final void loadClasses() throws MsoCloudIdentityNotFound, MsoPropertiesException {
+               ClassLoader classLoader = MsoHeatUtilsTest.class.getClassLoader();
+               String cloudConfigJson = classLoader.getResource("cloud_config.json").getPath();
+               cloudConfigFactory.initializeCloudConfig(cloudConfigJson, 1);
+               msoPropertiesFactory.initializeMsoProperties("NO_PROP", classLoader.getResource("mso.properties").getPath());
+               msoHeatUtils = new MsoHeatUtils("NO_PROP", msoPropertiesFactory, cloudConfigFactory);
        }
 
        @Test
-       public final void testCreateStackBadCloudConfig () throws MsoStackAlreadyExists, MsoTenantNotFound, MsoException, MsoCloudSiteNotFound {
+       public final void testCreateStackBadCloudConfig()
+                       throws MsoStackAlreadyExists, MsoTenantNotFound, MsoException, MsoCloudSiteNotFound {
                try {
-                       msoHeatUtils.createStack ("DOESNOTEXIST", "test", "stackName", "test",  new HashMap<String,Object> (), Boolean.TRUE, 10);
+                       msoHeatUtils.createStack("DOESNOTEXIST", "test", "stackName", "test", new HashMap<>(),
+                                       Boolean.TRUE, 10);
                } catch (MsoCloudSiteNotFound e) {
 
                } catch (java.lang.NullPointerException npe) {
-                       
+
                }
 
        }
 
        @Test
-    public final void testCreateStackFailedConnectionHeatClient () throws MsoStackAlreadyExists, MsoTenantNotFound, MsoException, MsoCloudSiteNotFound {
+       public final void testCreateStackFailedConnectionHeatClient()
+                       throws MsoStackAlreadyExists, MsoTenantNotFound, MsoException, MsoCloudSiteNotFound {
                try {
-                       msoHeatUtils.createStack ("MT", "test", "stackName", "test",  new HashMap<String,Object> (), Boolean.TRUE, 10);
+                       msoHeatUtils.createStack("MT", "test", "stackName", "test", new HashMap<>(), Boolean.TRUE,
+                                       10);
                } catch (MsoIOException e) {
 
                }
@@ -80,15 +104,262 @@ public class MsoHeatUtilsTest extends MsoCommonUtils {
        }
 
        @Test
-    public final void testCreateStackFailedConnection () throws MsoStackAlreadyExists, MsoTenantNotFound, MsoException, MsoCloudSiteNotFound {
+       public final void testCreateStackFailedConnection()
+                       throws MsoStackAlreadyExists, MsoTenantNotFound, MsoException, MsoCloudSiteNotFound {
                try {
-                       msoHeatUtils.createStack ("MT", "test", "stackName", "test",  new HashMap<String,Object> (), Boolean.TRUE, 10);
+                       msoHeatUtils.createStack("MT", "test", "stackName", "test", new HashMap<>(), Boolean.TRUE,
+                                       10);
                } catch (MsoIOException e) {
 
                }
 
        }
 
+       @Test
+       public final void createStackSuccessWithEnvironment() throws MsoException {
+               final MockUp<OpenStackRequest<Access>> mockRequest = new MockUp<OpenStackRequest<Access>>() {
+                       @Mock
+                       public Object execute(Invocation invocation) {
+                               final OpenStackRequest invokedInstance = invocation.getInvokedInstance();
+                               final Class<?> returnType = Deencapsulation.getField(invokedInstance, "returnType");
+
+                               try {
+                                       if (returnType == Access.class) {
+                                               ObjectMapper mapper = new ObjectMapper();
+                                               String json = "{\"token\":{\"id\":\"tokenId\",\"tenant\":{\"id\":\"tenantId\",\"name\":\"tenantName\"}},\"serviceCatalog\":[{\"type\":\"orchestration\",\"name\":\"orchestration\",\"endpoints\":[{\"region\":\"region1\",\"publicURL\":\"http://localhost:5000\",\"internalURL\":\"http://localhost:5000\",\"adminURL\":\"http://localhost:5000\"}]}]}";
+                                               return mapper.readValue(json, Access.class);
+                                       } else if (returnType == Stack.class) {
+                                               final Stack stack = new Stack();
+                                               stack.setId("stackId");
+                                               stack.setStackName("stackName");
+                                               stack.setStackStatus("CREATE_COMPLETE");
+                                               return stack;
+                                       }
+                                       return null;
+                               } catch (Exception e) {
+                                       throw new RuntimeException(e);
+                               }
+                       }
+               };
+
+               final MockUp<KeystoneUtils> mockKeystone = new MockUp<KeystoneUtils>() {
+                       @Mock
+                       String findEndpointURL(List<Access.Service> serviceCatalog, String type, String region, String facing) {
+                               return "http://localhost:5000";
+                       }
+               };
+
+               msoHeatUtils.createStack("MT", "test", "stackName", "test", new HashMap<>(), Boolean.TRUE, 10,
+                               "environment");
+
+               mockRequest.tearDown();
+               mockKeystone.tearDown();
+       }
+
+       @Test
+       public final void createStackSuccessWithFiles() throws MsoException {
+               final MockUp<OpenStackRequest<Access>> mockRequest = new MockUp<OpenStackRequest<Access>>() {
+                       @Mock
+                       public Object execute(Invocation invocation) {
+                               final OpenStackRequest invokedInstance = invocation.getInvokedInstance();
+                               final Class<?> returnType = Deencapsulation.getField(invokedInstance, "returnType");
+
+                               try {
+                                       if (returnType == Access.class) {
+                                               ObjectMapper mapper = new ObjectMapper();
+                                               String json = "{\"token\":{\"id\":\"tokenId\",\"tenant\":{\"id\":\"tenantId\",\"name\":\"tenantName\"}},\"serviceCatalog\":[{\"type\":\"orchestration\",\"name\":\"orchestration\",\"endpoints\":[{\"region\":\"region1\",\"publicURL\":\"http://localhost:5000\",\"internalURL\":\"http://localhost:5000\",\"adminURL\":\"http://localhost:5000\"}]}]}";
+                                               return mapper.readValue(json, Access.class);
+                                       } else if (returnType == Stack.class) {
+                                               final Stack stack = new Stack();
+                                               stack.setId("stackId");
+                                               stack.setStackName("stackName");
+                                               stack.setStackStatus("CREATE_COMPLETE");
+                                               return stack;
+                                       }
+                                       return null;
+                               } catch (Exception e) {
+                                       throw new RuntimeException(e);
+                               }
+                       }
+               };
+
+               final MockUp<KeystoneUtils> mockKeystone = new MockUp<KeystoneUtils>() {
+                       @Mock
+                       String findEndpointURL(List<Access.Service> serviceCatalog, String type, String region, String facing) {
+                               return "http://localhost:5000";
+                       }
+               };
+
+               msoHeatUtils.createStack("MT", "test", "stackName", "test", new HashMap<>(), Boolean.TRUE, 10,
+                               "environment", new HashMap<>());
+
+               mockRequest.tearDown();
+               mockKeystone.tearDown();
+       }
+
+       @Test
+       public final void createStackSuccessWithHeatFiles() throws MsoException {
+
+               final MockUp<OpenStackRequest<Access>> mockRequest = new MockUp<OpenStackRequest<Access>>() {
+                       @Mock
+                       public Object execute(Invocation invocation) {
+                               final OpenStackRequest invokedInstance = invocation.getInvokedInstance();
+                               final Class<?> returnType = Deencapsulation.getField(invokedInstance, "returnType");
+
+                               try {
+                                       if (returnType == Access.class) {
+                                               ObjectMapper mapper = new ObjectMapper();
+                                               String json = "{\"token\":{\"id\":\"tokenId\",\"tenant\":{\"id\":\"tenantId\",\"name\":\"tenantName\"}},\"serviceCatalog\":[{\"type\":\"orchestration\",\"name\":\"orchestration\",\"endpoints\":[{\"region\":\"region1\",\"publicURL\":\"http://localhost:5000\",\"internalURL\":\"http://localhost:5000\",\"adminURL\":\"http://localhost:5000\"}]}]}";
+                                               return mapper.readValue(json, Access.class);
+                                       } else if (returnType == Stack.class) {
+                                               final Stack stack = new Stack();
+                                               stack.setId("stackId");
+                                               stack.setStackName("stackName");
+                                               stack.setStackStatus("CREATE_COMPLETE");
+                                               return stack;
+                                       }
+                                       return null;
+                               } catch (Exception e) {
+                                       throw new RuntimeException(e);
+                               }
+                       }
+               };
+
+               final MockUp<KeystoneUtils> mockKeystone = new MockUp<KeystoneUtils>() {
+                       @Mock
+                       String findEndpointURL(List<Access.Service> serviceCatalog, String type, String region, String facing) {
+                               return "http://localhost:5000";
+                       }
+               };
+
+               msoHeatUtils.createStack("MT", "test", "stackName", "test", new HashMap<>(), Boolean.TRUE, 10,
+                               "environment", new HashMap<>(), new HashMap<>());
+
+               mockRequest.tearDown();
+               mockKeystone.tearDown();
+       }
+
+       @Test
+       public final void requestToStringBuilderTest() {
+               CreateStackParam param = new CreateStackParam();
+               param.setDisableRollback(false);
+               param.setEnvironment("environment");
+               param.setFiles(new HashMap<>());
+               param.setParameters(new HashMap<>());
+               param.setStackName("stackName");
+               param.setTemplate("template");
+               param.setTemplateUrl("http://templateUrl");
+               param.setTimeoutMinutes(1);
+
+               msoHeatUtils.requestToStringBuilder(param);
+       }
+
+       @Test
+       public final void heatCacheResetTest() {
+               msoHeatUtils.heatCacheReset();
+       }
+
+       @Test
+       public final void expireHeatClientTest() {
+               msoHeatUtils.expireHeatClient("tenantId", "cloudId");
+       }
+
+       @Test
+       public final void heatCacheCleanupTest() {
+               msoHeatUtils.heatCacheCleanup();
+       }
+
+       @Test
+       public void queryStackTest() throws MsoException {
+               final MockUp<OpenStackRequest<Access>> mockRequest = new MockUp<OpenStackRequest<Access>>() {
+                       @Mock
+                       public Object execute(Invocation invocation) {
+                               final OpenStackRequest invokedInstance = invocation.getInvokedInstance();
+                               final Class<?> returnType = Deencapsulation.getField(invokedInstance, "returnType");
+
+                               try {
+                                       if (returnType == Access.class) {
+                                               ObjectMapper mapper = new ObjectMapper();
+                                               String json = "{\"token\":{\"id\":\"tokenId\",\"tenant\":{\"id\":\"tenantId\",\"name\":\"tenantName\"}},\"serviceCatalog\":[{\"type\":\"orchestration\",\"name\":\"orchestration\",\"endpoints\":[{\"region\":\"region1\",\"publicURL\":\"http://localhost:5000\",\"internalURL\":\"http://localhost:5000\",\"adminURL\":\"http://localhost:5000\"}]}]}";
+                                               return mapper.readValue(json, Access.class);
+                                       } else if (returnType == Stack.class) {
+                                               final Stack stack = new Stack();
+                                               stack.setId("stackId");
+                                               stack.setStackName("stackName");
+                                               stack.setStackStatus("CREATE_COMPLETE");
+                                               return stack;
+                                       }
+                                       return null;
+                               } catch (Exception e) {
+                                       throw new RuntimeException(e);
+                               }
+                       }
+               };
+
+               final MockUp<KeystoneUtils> mockKeystone = new MockUp<KeystoneUtils>() {
+                       @Mock
+                       String findEndpointURL(List<Access.Service> serviceCatalog, String type, String region, String facing) {
+                               return "http://localhost:5000";
+                       }
+               };
+
+               final StackInfo stackInfo = msoHeatUtils.queryStack("MT", "test", "stackName");
+
+               mockRequest.tearDown();
+               mockKeystone.tearDown();
+       }
+
+       @Test
+       public void deleteStack() throws MsoException {
+               final MockUp<OpenStackRequest<Access>> mockRequest = new MockUp<OpenStackRequest<Access>>() {
+                       @Mock
+                       public Object execute(Invocation invocation) {
+                               final OpenStackRequest invokedInstance = invocation.getInvokedInstance();
+                               final Class<?> returnType = Deencapsulation.getField(invokedInstance, "returnType");
+                               final String path = Deencapsulation.getField(invokedInstance, "endpoint");
+//                             final String stackName = path.substring(path.lastIndexOf("/"));
 
+                               try {
+                                       if (returnType == Access.class) {
+                                               ObjectMapper mapper = new ObjectMapper();
+                                               String json = "{\"token\":{\"id\":\"tokenId\",\"tenant\":{\"id\":\"tenantId\",\"name\":\"tenantName\"}},\"serviceCatalog\":[{\"type\":\"orchestration\",\"name\":\"orchestration\",\"endpoints\":[{\"region\":\"region1\",\"publicURL\":\"http://localhost:5000\",\"internalURL\":\"http://localhost:5000\",\"adminURL\":\"http://localhost:5000\"}]}]}";
+                                               return mapper.readValue(json, Access.class);
+                                       } else if (returnType == Stack.class) {
+                                               final Stack stack = new Stack();
+                                               stack.setId("stackId");
+                                               stack.setStackName("stackName");
+                                               final String status = "DELETE_COMPLETE";
+                                               stack.setStackStatus(status);
+                                               return stack;
+                                       }
+                                       return null;
+                               } catch (Exception e) {
+                                       throw new RuntimeException(e);
+                               }
+                       }
+               };
 
+               final MockUp<KeystoneUtils> mockKeystone = new MockUp<KeystoneUtils>() {
+                       @Mock
+                       String findEndpointURL(List<Access.Service> serviceCatalog, String type, String region, String facing) {
+                               return "http://localhost:5000";
+                       }
+               };
+
+               final StackInfo stackInfo = msoHeatUtils.deleteStack("test", "MT", "stackName", true);
+
+               mockRequest.tearDown();
+               mockKeystone.tearDown();
+       }
+
+       @Test
+       public void copyStringOutputsToInputsTest() {
+               Map<String, String> inputs = new HashMap<String, String>(){{put("key41", "value41");}};
+               Map<String, Object> outputs = new HashMap<String, Object>(){{
+                       put("key2", "val2");
+                       put("key3", new TextNode("val3"));
+                       put("key4", new LinkedHashMap<String, String>(){{put("key41", "value41");}});
+               }};
+               msoHeatUtils.copyStringOutputsToInputs(inputs, outputs, true);
+       }
 }