diff options
Diffstat (limited to 'appc-adapters')
17 files changed, 1050 insertions, 818 deletions
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ProviderAdapterImpl.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ProviderAdapterImpl.java index 79d7aa569..36191dd5a 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ProviderAdapterImpl.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ProviderAdapterImpl.java @@ -68,7 +68,7 @@ public class ProviderAdapterImpl implements ProviderAdapter { /** * reference to operation factory */ - ProviderOperationFactory factory = ProviderOperationFactory.getInstance(); + private ProviderOperationFactory factory; /** * A cache of providers that are predefined. */ @@ -257,6 +257,7 @@ public class ProviderAdapterImpl implements ProviderAdapter { * provider2.identity=http://provider2:5000/v2.0 provider2.tenant1.name=someName * provider2.tenant1.userid=someUser provider2.tenant1.password=somePassword </pre> </p> */ + factory = ProviderOperationFactory.getInstance(); providerCache = new HashMap<>(); Properties properties = configuration.getProperties(); List<Node> providers = StructuredPropertyHelper.getStructuredProperties(properties, Property.PROVIDER); diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ServiceCatalogFactory.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ServiceCatalogFactory.java index a4be23349..74d87571b 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ServiceCatalogFactory.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ServiceCatalogFactory.java @@ -51,18 +51,12 @@ public class ServiceCatalogFactory { return null;
}
String version = idUrl.getVersion();
- if(version == null){
- logger.error("Invalid Identity URL check configuration");
- return null;
- }
String prefix = version.split("\\.")[0];
- if (prefix != null) {
- switch (prefix) {
- case "v2":
- return new ServiceCatalogV2(url, projectIdentifier, principal, credential, properties);
- case "v3":
- return new ServiceCatalogV3(url, projectIdentifier, principal, credential, domain, properties);
- }
+ if("v2".equals(prefix)){
+ return new ServiceCatalogV2(url, projectIdentifier, principal, credential, properties);
+ }
+ else if("v3".equals(prefix)){
+ return new ServiceCatalogV3(url, projectIdentifier, principal, credential, domain, properties);
}
return null;
}
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ServiceCatalogV3.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ServiceCatalogV3.java index 1e057d147..4773603c3 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ServiceCatalogV3.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/ServiceCatalogV3.java @@ -23,13 +23,25 @@ package org.onap.appc.adapter.iaas.impl;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import com.att.cdp.exceptions.ContextConnectionException;
import com.att.cdp.exceptions.ZoneException;
import com.att.cdp.openstack.util.ExceptionMapper;
import com.att.cdp.pal.util.Time;
import com.att.cdp.zones.ContextFactory;
import com.att.cdp.zones.spi.RequestState;
-import com.google.common.collect.Lists;
import com.woorea.openstack.base.client.OpenStackBaseException;
import com.woorea.openstack.base.client.OpenStackClientConnector;
import com.woorea.openstack.base.client.OpenStackSimpleTokenProvider;
@@ -42,19 +54,6 @@ import com.woorea.openstack.keystone.v3.model.Token; import com.woorea.openstack.keystone.v3.model.Token.Project;
import com.woorea.openstack.keystone.v3.model.Token.Service;
import com.woorea.openstack.keystone.v3.model.Token.Service.Endpoint;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
/**
* This class is used to capture and cache the service catalog for a specific OpenStack provider.
@@ -225,13 +224,7 @@ public class ServiceCatalogV3 extends ServiceCatalog { */
@Override
public String getProjectName() {
- Lock readLock = rwLock.readLock();
- readLock.lock();
- try {
- return project.getName();
- } finally {
- readLock.unlock();
- }
+ return getProject().getName();
}
/**
@@ -403,4 +396,14 @@ public class ServiceCatalogV3 extends ServiceCatalog { }
return now.getTime();
}
+
+ public Project getProject() {
+ Lock readLock = rwLock.readLock();
+ readLock.lock();
+ try {
+ return project;
+ } finally {
+ readLock.unlock();
+ }
+ }
}
\ No newline at end of file diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/TenantCache.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/TenantCache.java index c99889ce4..29b9cd314 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/TenantCache.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/onap/appc/adapter/iaas/impl/TenantCache.java @@ -23,13 +23,6 @@ package org.onap.appc.adapter.iaas.impl; -import com.att.cdp.exceptions.ContextConnectionException; -import com.att.cdp.exceptions.ZoneException; -import com.att.cdp.zones.Context; -import com.att.cdp.zones.ContextFactory; -import com.att.cdp.zones.Provider; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -42,6 +35,13 @@ import org.onap.appc.pool.Allocator; import org.onap.appc.pool.Destructor; import org.onap.appc.pool.Pool; import org.onap.appc.pool.PoolSpecificationException; +import com.att.cdp.exceptions.ContextConnectionException; +import com.att.cdp.exceptions.ZoneException; +import com.att.cdp.zones.Context; +import com.att.cdp.zones.ContextFactory; +import com.att.cdp.zones.Provider; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; /** * This class maintains a cache of tenants within a specific provider. @@ -121,7 +121,6 @@ public class TenantCache implements Allocator<Context>, Destructor<Context> { configuration = ConfigurationFactory.getConfiguration(); logger = EELFManager.getInstance().getLogger(getClass()); this.provider = provider; - configuration = ConfigurationFactory.getConfiguration(); } /** @@ -157,12 +156,10 @@ public class TenantCache implements Allocator<Context>, Destructor<Context> { int max = configuration.getIntegerProperty(Constants.PROPERTY_MAX_POOL_SIZE); int delay = configuration.getIntegerProperty(Constants.PROPERTY_RETRY_DELAY); int limit = configuration.getIntegerProperty(Constants.PROPERTY_RETRY_LIMIT); - String url = provider.getIdentityURL(); String tenant = tenantName == null ? tenantId : tenantName; Properties properties = configuration.getProperties(); - catalog = ServiceCatalogFactory.getServiceCatalog(url, tenant, userid, password, domain, properties); - + catalog = getServiceCatalogFactory(url, tenant, properties); if (catalog == null) { logger.error(Msg.IAAS_UNSUPPORTED_IDENTITY_SERVICE, url); return; @@ -195,12 +192,16 @@ public class TenantCache implements Allocator<Context>, Destructor<Context> { } } + public ServiceCatalog getServiceCatalogFactory(String url, String tenant, Properties properties) { + return ServiceCatalogFactory.getServiceCatalog(url, tenant, userid, password, domain, properties); + } + private void createPools(int min, int max, String url, Properties properties) { for (String region : catalog.getRegions()) { try { Pool<Context> pool = new Pool<>(min, max); pool.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, url); - pool.setProperty(ContextFactory.PROPERTY_TENANT, tenantName); + pool.setProperty(ContextFactory.PROPERTY_TENANT, getTenantName()); pool.setProperty(ContextFactory.PROPERTY_CLIENT_CONNECTOR_CLASS, CLIENT_CONNECTOR_CLASS); pool.setProperty(ContextFactory.PROPERTY_RETRY_DELAY, configuration.getProperty(Constants.PROPERTY_RETRY_DELAY)); diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/CommonUtility.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/CommonUtility.java new file mode 100644 index 000000000..0d4fe2391 --- /dev/null +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/CommonUtility.java @@ -0,0 +1,72 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.appc.adapter.iaas.impl; + +import java.lang.reflect.Field; +import java.util.Map; + +/** + * This class is used as a utility class to support the test cases. + */ +public class CommonUtility { + + /** + * Use reflection to locate fields and methods so that they can be manipulated during the test + * to change the internal state accordingly. + * + * @param privateFields + * @param object + * + */ + public static void injectMockObjects(Map<String, Object> privateFields, Object object) { + privateFields.forEach((fieldName, fieldInstance) -> { + try { + Field privateField = object.getClass().getDeclaredField(fieldName); + privateField.setAccessible(true); + privateField.set(object, fieldInstance); + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + // Exception occurred while accessing the private fields + } + }); + } + + /** + * Use reflection to locate fields and methods of the base class so that they can be manipulated + * during the test to change the internal state accordingly. + * + * @param privateFields + * @param object + * + */ + public static void injectMockObjectsInBaseClass(Map<String, Object> privateFields, Object catalogObject) { + // For base class + privateFields.forEach((fieldName, fieldInstance) -> { + try { + Field privateField = catalogObject.getClass().getSuperclass().getDeclaredField(fieldName); + privateField.setAccessible(true); + privateField.set(catalogObject, fieldInstance); + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + // Exception occurred while accessing the private fields + } + }); + } + +} diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/RequestFailedExceptionTest.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/RequestFailedExceptionTest.java index d609fd4a8..81fa87714 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/RequestFailedExceptionTest.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/RequestFailedExceptionTest.java @@ -22,10 +22,12 @@ package org.onap.appc.adapter.iaas.impl; import org.glassfish.grizzly.http.util.HttpStatus;
import org.junit.Assert;
import org.junit.Test;
-
import com.att.cdp.zones.model.Server;
import com.att.cdp.zones.model.Stack;
+/**
+ * This class is used to test methods and functions of the Request Failed Exception class
+ */
public class RequestFailedExceptionTest {
@Test
@@ -48,6 +50,7 @@ public class RequestFailedExceptionTest { @Test
public void testRequestFailedExceptionStringStringHttpStatusServer() {
Server server=new Server();
+ server.setId("svrId");
HttpStatus status=HttpStatus.OK_200;
String reason="Success";
String operation="POST";
@@ -56,10 +59,12 @@ public class RequestFailedExceptionTest { requestFailedException.setReason(reason);
requestFailedException.setServerId("svrId");
requestFailedException.setStatus(status);
+ requestFailedException.setServer(server);
Assert.assertEquals("POST",requestFailedException.getOperation());
Assert.assertEquals("Success",requestFailedException.getReason());
Assert.assertEquals("svrId",requestFailedException.getServerId());
Assert.assertEquals( HttpStatus.OK_200,requestFailedException.getStatus());
+ Assert.assertEquals(server, requestFailedException.getServer());
}
@Test
@@ -120,4 +125,21 @@ public class RequestFailedExceptionTest { Assert.assertTrue(requestFailedException.getLocalizedMessage().contains(message));
Assert.assertTrue(requestFailedException.getMessage().contains(message));
}
+
+ /**
+ * This test case is used to test the request failed exception class without server
+ *
+ */
+ @Test
+ public void testRequestFailedExceptionThrowableStringWithoutServer() {
+ String tMessage = "throwable message";
+ Server server = null;
+ HttpStatus status = HttpStatus.ACCEPTED_202;
+ String reason = "Success";
+ String operation = "POST";
+ Throwable throwable = new Throwable(tMessage);
+ RequestFailedException requestFailedException = new RequestFailedException(throwable, operation, reason, status, server);
+ Assert.assertEquals(throwable, requestFailedException.getCause());
+ Assert.assertNull(requestFailedException.getServer());
+ }
}
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestIdentityUrl.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestIdentityUrl.java index 2b13d07ae..09156bf11 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestIdentityUrl.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestIdentityUrl.java @@ -21,7 +21,6 @@ * ============LICENSE_END========================================================= */ - package org.onap.appc.adapter.iaas.impl; import static org.junit.Assert.assertNotNull; @@ -30,7 +29,6 @@ import static org.junit.Assert.assertTrue; import java.util.Properties; import org.junit.BeforeClass; import org.junit.Test; -import org.onap.appc.adapter.iaas.impl.IdentityURL; import org.onap.appc.configuration.ConfigurationFactory; public class TestIdentityUrl { diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderAdapterImpl.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderAdapterImpl.java index 4b159f2d7..30c7aa729 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderAdapterImpl.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderAdapterImpl.java @@ -25,44 +25,43 @@ package org.onap.appc.adapter.iaas.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.when; import java.io.IOException; import java.lang.reflect.Field; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.Set; +import java.util.function.BiFunction; +import java.util.function.Function; import org.junit.Before; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.onap.appc.Constants; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; import org.onap.appc.adapter.iaas.ProviderAdapter; -import org.onap.appc.adapter.iaas.impl.ProviderAdapterImpl; -import org.onap.appc.adapter.iaas.impl.ProviderCache; -import org.onap.appc.adapter.iaas.impl.ServiceCatalog; -import org.onap.appc.adapter.iaas.impl.TenantCache; -import org.onap.appc.adapter.iaas.impl.VMURL; +import org.onap.appc.adapter.iaas.provider.operation.api.IProviderOperation; +import org.onap.appc.adapter.iaas.provider.operation.api.ProviderOperationFactory; +import org.onap.appc.adapter.iaas.provider.operation.common.enums.Operation; +import org.onap.appc.adapter.iaas.provider.operation.impl.EvacuateServer; import org.onap.appc.configuration.ConfigurationFactory; import org.onap.appc.exceptions.APPCException; import org.onap.appc.exceptions.UnknownProviderException; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; import com.att.cdp.exceptions.ZoneException; -import com.att.cdp.zones.ComputeService; -import com.att.cdp.zones.Context; -import com.att.cdp.zones.ContextFactory; import com.att.cdp.zones.model.Image; +import com.att.cdp.zones.model.ModelObject; import com.att.cdp.zones.model.Server; -import com.att.cdp.zones.model.Server.Status; -import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import com.woorea.openstack.keystone.model.Access.Service.Endpoint; +import com.att.cdp.zones.model.Stack; +import com.google.common.collect.ImmutableMap; /** - * Test the ProviderAdapter implementation. + * This class is used to test methods and functions of the adapter implementation that do not + * require and do not set up connections to any providers. */ +@RunWith(MockitoJUnitRunner.class) @Category(org.onap.appc.adapter.iaas.impl.TestProviderAdapterImpl.class) public class TestProviderAdapterImpl { @@ -74,26 +73,37 @@ public class TestProviderAdapterImpl { private static String IDENTITY_URL; - private static String PRINCIPAL; + private static String SERVER_URL; - private static String CREDENTIAL; + private static String SERVER_ID; - private static String TENANT_NAME; + private static Class<?> providerAdapterImplClass; + private static Class<?> configurationFactoryClass; + private static Field providerCacheField; + private static Field configField; - private static String TENANT_ID; + private static ProviderAdapterImpl adapter; - private static String USER_ID; + @Mock + ProviderOperationFactory factory; - private static String REGION_NAME; + @Mock + IProviderOperation providerOperation; - private static String SERVER_URL; + @Mock + EvacuateServer evacuateServer; - private static Class<?> providerAdapterImplClass; - private static Class<?> configurationFactoryClass; - private static Field providerCacheField; - private static Field configField; + private Map<String, ProviderCache> providerCache; + + private SvcLogicContext svcContext; - private ProviderAdapterImpl adapter; + private Map<String, String> params; + + private Image image; + + private Server server; + + private Stack stack; /** * Use reflection to locate fields and methods so that they can be manipulated during the test @@ -111,136 +121,84 @@ public class TestProviderAdapterImpl { providerCacheField = providerAdapterImplClass.getDeclaredField("providerCache"); providerCacheField.setAccessible(true); - - configField = configurationFactoryClass.getDeclaredField("config"); - configField.setAccessible(true); - Properties props = ConfigurationFactory.getConfiguration().getProperties(); IDENTITY_URL = props.getProperty("provider1.identity"); - PRINCIPAL = props.getProperty("provider1.tenant1.userid", "appc"); - CREDENTIAL = props.getProperty("provider1.tenant1.password", "appc"); - TENANT_NAME = props.getProperty("provider1.tenant1.name", "appc"); - TENANT_ID = props.getProperty("provider1.tenant1.id", "abcde12345fghijk6789lmnopq123rst"); - REGION_NAME = props.getProperty("provider1.tenant1.region", "RegionOne"); SERVER_URL = props.getProperty("test.url"); + configField = configurationFactoryClass.getDeclaredField("config"); + configField.setAccessible(true); + SERVER_ID = "server1"; } /** - * Setup the test environment. + * Use reflection to locate fields and methods so that they can be manipulated during the test + * to change the internal state accordingly. * * @throws IllegalAccessException if this Field object is enforcing Java language access control * and the underlying field is either inaccessible or final. * @throws IllegalArgumentException if the specified object is not an instance of the class or * interface declaring the underlying field (or a subclass or implementor thereof), or * if an unwrapping conversion fails. - * @throws NullPointerException if the specified object is null and the field is an instance - * field. - * @throws ExceptionInInitializerError if the initialization provoked by this method fails. */ @Before public void setup() throws IllegalArgumentException, IllegalAccessException { configField.set(null, null); Properties properties = new Properties(); adapter = new ProviderAdapterImpl(properties); + svcContext = new SvcLogicContext(); + params = new HashMap<>(); + params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); + params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); + server = new Server(); + server.setId(SERVER_ID); + image = new Image(); + image.setStatus(Image.Status.ACTIVE); + stack = new Stack(); + stack.setStatus(Stack.Status.ACTIVE); + Map<String, Object> privateFields = ImmutableMap.<String, Object>builder().put("factory", factory) + .put("providerCache", getProviderCache()).build(); + CommonUtility.injectMockObjects(privateFields, adapter); + } + + private Map<String, ProviderCache> getProviderCache() { + providerCache = new HashMap<String, ProviderCache>(); + ProviderCache cache = new ProviderCache(); + cache.setIdentityURL(IDENTITY_URL); + cache.setProviderName(PROVIDER_NAME); + cache.setProviderType(PROVIDER_TYPE); + providerCache.put(cache.getIdentityURL(), cache); + return providerCache; } /** - * This method inspects the provider adapter implementation to make sure that the cache of - * providers and tenants, as well as the service catalog, and all pools of contexts have been - * set up correctly. + * This test case is used to invoke the default constructor * - * @throws IllegalAccessException if this Field object is enforcing Java language access control - * and the underlying field is inaccessible. - * @throws IllegalArgumentException if the specified object is not an instance of the class or - * interface declaring the underlying field (or a subclass or implementor thereof). */ - @SuppressWarnings({"unchecked"}) - @Ignore @Test - public void validateCacheIsCreatedCorrectly() throws IllegalArgumentException, IllegalAccessException { - Map<String, ProviderCache> providerCaches = (Map<String, ProviderCache>) providerCacheField.get(adapter); - - assertNotNull(providerCaches); - assertEquals(1, providerCaches.size()); - assertTrue(providerCaches.containsKey(PROVIDER_NAME)); - - ProviderCache providerCache = providerCaches.get(PROVIDER_NAME); - assertEquals(PROVIDER_NAME, providerCache.getProviderName()); - assertEquals(PROVIDER_TYPE, providerCache.getProviderType()); - - Map<String, TenantCache> tenantCaches = providerCache.getTenants(); - assertNotNull(tenantCaches); - assertEquals(1, tenantCaches.size()); - assertTrue(tenantCaches.containsKey(TENANT_NAME)); - - TenantCache tenantCache = tenantCaches.get(TENANT_NAME); - - assertEquals(TENANT_ID, tenantCache.getTenantId()); - assertEquals(TENANT_NAME, tenantCache.getTenantName()); - assertEquals(USER_ID, tenantCache.getUserid()); - - ServiceCatalog catalog = tenantCache.getServiceCatalog(); - assertNotNull(catalog); - - System.out.println(catalog.toString()); - List<String> serviceTypes = catalog.getServiceTypes(); - assertNotNull(serviceTypes); - assertEquals(12, serviceTypes.size()); - - assertEquals(TENANT_NAME, catalog.getProjectName()); - assertEquals(TENANT_ID, catalog.getProjectId()); - - Set<String> regionNames = catalog.getRegions(); - assertNotNull(regionNames); - assertEquals(1, regionNames.size()); - assertTrue(regionNames.contains(REGION_NAME)); - - List<?> endpoints = catalog.getEndpoints(ServiceCatalog.IDENTITY_SERVICE); - assertNotNull(endpoints); - assertEquals(1, endpoints.size()); - Endpoint endpoint = (Endpoint) endpoints.get(0); - assertNotNull(endpoint); - assertEquals(REGION_NAME, endpoint.getRegion()); - assertEquals(IDENTITY_URL, endpoint.getPublicURL()); - - endpoints = catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE); - assertNotNull(endpoints); - assertEquals(1, endpoints.size()); - endpoint = (Endpoint) endpoints.get(0); - assertNotNull(endpoint); - assertEquals(REGION_NAME, endpoint.getRegion()); - - endpoints = catalog.getEndpoints(ServiceCatalog.VOLUME_SERVICE); - assertNotNull(endpoints); - assertEquals(1, endpoints.size()); - endpoint = (Endpoint) endpoints.get(0); - assertNotNull(endpoint); - assertEquals(REGION_NAME, endpoint.getRegion()); - - endpoints = catalog.getEndpoints(ServiceCatalog.IMAGE_SERVICE); - assertNotNull(endpoints); - assertEquals(1, endpoints.size()); - endpoint = (Endpoint) endpoints.get(0); - assertNotNull(endpoint); - assertEquals(REGION_NAME, endpoint.getRegion()); - - endpoints = catalog.getEndpoints(ServiceCatalog.NETWORK_SERVICE); - assertNotNull(endpoints); - assertEquals(1, endpoints.size()); - endpoint = (Endpoint) endpoints.get(0); - assertNotNull(endpoint); - assertEquals(REGION_NAME, endpoint.getRegion()); - - assertTrue(catalog.isServicePublished(ServiceCatalog.IDENTITY_SERVICE)); - assertTrue(catalog.isServicePublished(ServiceCatalog.COMPUTE_SERVICE)); - assertTrue(catalog.isServicePublished(ServiceCatalog.VOLUME_SERVICE)); - assertTrue(catalog.isServicePublished(ServiceCatalog.IMAGE_SERVICE)); - assertTrue(catalog.isServicePublished(ServiceCatalog.NETWORK_SERVICE)); + public void testDefaultConstructor() { + ProviderAdapter adapter = new ProviderAdapterImpl(); + assertNotNull(adapter); } /** - * This test case is used to actually validate that a server has been restarted from an already - * running state + * This test case is used to invoke the argument constructor + * + */ + @Test + public void testArgumentedConstructor() { + ProviderAdapter adapter = new ProviderAdapterImpl(true); + assertNotNull(adapter); + } + + /** + * Tests that we get the Adapter name + */ + @Test + public void testAdapterName() { + assertNotNull(adapter.getAdapterName()); + } + + /** + * This test case is used to restart the server * * @throws ZoneException If the login cannot be performed because the principal and/or * credentials are invalid. @@ -248,43 +206,54 @@ public class TestProviderAdapterImpl { * the expected argument(s) are not defined or are invalid * @throws IllegalStateException If the identity service is not available or cannot be created * @throws IOException if an I/O error occurs - * @throws APPCException + * @throws APPCException If the server cannot be restarted for some reason */ - // @Ignore @Test - public void testRestartRunningServer() + public void testRestartServer() throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL); - properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME); - properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - properties.setProperty(ContextFactory.PROPERTY_DISABLE_PROXY, "true"); - - try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - context.login(PRINCIPAL, CREDENTIAL); - VMURL vm = VMURL.parseURL(SERVER_URL); - - ComputeService computeService = context.getComputeService(); - Server server = computeService.getServer(vm.getServerId()); - if (!server.getStatus().equals(Status.RUNNING)) { - server.start(); - assertTrue(waitForStateChange(server, Status.RUNNING)); - } - - Map<String, String> params = new HashMap<>(); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); - params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); - SvcLogicContext svcContext = new SvcLogicContext(); - - server = adapter.restartServer(params, svcContext); - - assertEquals(Server.Status.RUNNING, server.getStatus()); - } + prepareMock(Operation.RESTART_SERVICE, Server.Status.RUNNING); + Server actualServer = adapter.restartServer(params, svcContext); + assertEquals(Server.Status.RUNNING, actualServer.getStatus()); } + /** + * This test case is used to start the server + * + * @throws ZoneException If the login cannot be performed because the principal and/or + * credentials are invalid. + * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if + * the expected argument(s) are not defined or are invalid + * @throws IllegalStateException If the identity service is not available or cannot be created + * @throws IOException if an I/O error occurs + * @throws APPCException If the server cannot be started for some reason + */ + @Test + public void testStartServer() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.START_SERVICE, Server.Status.RUNNING); + Server actualServer = adapter.startServer(params, svcContext); + assertEquals(Server.Status.RUNNING, actualServer.getStatus()); + } + + /** + * This test case is used to stop the server + * + * @throws ZoneException If the login cannot be performed because the principal and/or + * credentials are invalid. + * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if + * the expected argument(s) are not defined or are invalid + * @throws IllegalStateException If the identity service is not available or cannot be created + * @throws IOException if an I/O error occurs + * @throws APPCException If the server cannot be stopped for some reason + */ + @Test + public void testStopServer() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.STOP_SERVICE, Server.Status.READY); + Server actualServer = adapter.stopServer(params, svcContext); + assertEquals(Server.Status.READY, actualServer.getStatus()); + } - /****************************************/ /** * Tests that the vmStatuschecker method works and returns the correct status of the VM * requested @@ -295,246 +264,114 @@ public class TestProviderAdapterImpl { * the expected argument(s) are not defined or are invalid * @throws IllegalStateException If the identity service is not available or cannot be created * @throws IOException if an I/O error occurs - * @throws UnknownProviderException If the provider cannot be found + * @throws APPCException If the vm status can not be verified */ - // @Ignore @Test - public void testVmStatuschecker() throws IllegalStateException, IllegalArgumentException, ZoneException, - UnknownProviderException, IOException { - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL); - properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME); - properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - properties.setProperty(ContextFactory.PROPERTY_DISABLE_PROXY, "true"); - - try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - context.login(PRINCIPAL, CREDENTIAL); - VMURL vm = VMURL.parseURL(SERVER_URL); - - ComputeService computeService = context.getComputeService(); - Server server = computeService.getServer(vm.getServerId()); - if (!server.getStatus().equals(Status.RUNNING)) { - server.start(); - assertTrue(waitForStateChange(server, Status.RUNNING)); - } - // or instead of the if-block, can ensureRunning(server) be used? - ensureRunning(server); - assertEquals(Server.Status.RUNNING, server.getStatus()); - } + public void testVmStatuschecker() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.VMSTATUSCHECK_SERVICE, Server.Status.READY); + Server actualServer = adapter.vmStatuschecker(params, svcContext); + assertEquals(Server.Status.READY, actualServer.getStatus()); } - /****************************************/ - - /** - * Tests that we can restart a server that is already stopped + * Tests that the terminate stack method works * * @throws ZoneException If the login cannot be performed because the principal and/or * credentials are invalid. * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if - * the expected argument(s) are not defined or are invalid. + * the expected argument(s) are not defined or are invalid * @throws IllegalStateException If the identity service is not available or cannot be created * @throws IOException if an I/O error occurs - * @throws APPCException + * @throws APPCException If the stack cannot be terminated for some reason */ - // @Ignore @Test - public void testRestartStoppedServer() + public void testTerminateStack() throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL); - properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME); - properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - - try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - context.login(PRINCIPAL, CREDENTIAL); - VMURL vm = VMURL.parseURL(SERVER_URL); - - ComputeService computeService = context.getComputeService(); - Server server = computeService.getServer(vm.getServerId()); - if (!server.getStatus().equals(Status.READY)) { - server.stop(); - assertTrue(waitForStateChange(server, Status.READY)); - } - - Map<String, String> params = new HashMap<>(); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); - params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); - SvcLogicContext svcContext = new SvcLogicContext(); - - server = adapter.restartServer(params, svcContext); - - assertEquals(Server.Status.RUNNING, server.getStatus()); - - } + prepareMock(Operation.TERMINATE_STACK, null); + stack.setStatus(Stack.Status.DELETED); + Stack actualStack = adapter.terminateStack(params, svcContext); + assertEquals(Stack.Status.DELETED, actualStack.getStatus()); } /** - * Tests that we can rebuild a running server (not created from a bootable volume) + * Tests that the snapshot method works and returns snapshot of the stack * * @throws ZoneException If the login cannot be performed because the principal and/or * credentials are invalid. * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if - * the expected argument(s) are not defined or are invalid. + * the expected argument(s) are not defined or are invalid * @throws IllegalStateException If the identity service is not available or cannot be created - * @throws UnknownProviderException If the provider cannot be found * @throws IOException if an I/O error occurs - * @throws APPCException If the server cannot be rebuilt for some reason + * @throws APPCException If the stack snapshot can not be taken for some reason */ - // @Ignore @Test - public void testRebuildRunningServer() - throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException { - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL); - properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME); - properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - - try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - context.login(PRINCIPAL, CREDENTIAL); - VMURL vm = VMURL.parseURL(SERVER_URL); - - ComputeService computeService = context.getComputeService(); - Server server = computeService.getServer(vm.getServerId()); - ensureRunning(server); - - Map<String, String> params = new HashMap<>(); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); - params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); - SvcLogicContext svcContext = new SvcLogicContext(); - - server = adapter.rebuildServer(params, svcContext); - assertTrue(waitForStateChange(server, Status.RUNNING)); - - } + public void testSnapshotStack() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.SNAPSHOT_STACK, null); + Stack actualStack = adapter.snapshotStack(params, svcContext); + assertEquals(Stack.Status.ACTIVE, actualStack.getStatus()); } /** - * Tests that we can rebuild a paused server (not created from a bootable volume) + * Tests that the restore method works and returns restored stack * * @throws ZoneException If the login cannot be performed because the principal and/or * credentials are invalid. * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if - * the expected argument(s) are not defined or are invalid. + * the expected argument(s) are not defined or are invalid * @throws IllegalStateException If the identity service is not available or cannot be created - * @throws UnknownProviderException If the provider cannot be found * @throws IOException if an I/O error occurs - * @throws APPCException If the server cannot be rebuilt for some reason + * @throws APPCException If the stack cannot be restored for some reason */ - // @Ignore @Test - public void testRebuildPausedServer() - throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException { - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL); - properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME); - properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - - try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - context.login(PRINCIPAL, CREDENTIAL); - VMURL vm = VMURL.parseURL(SERVER_URL); - - ComputeService computeService = context.getComputeService(); - Server server = computeService.getServer(vm.getServerId()); - ensurePaused(server); - - Map<String, String> params = new HashMap<>(); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); - params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); - SvcLogicContext svcContext = new SvcLogicContext(); - - server = adapter.rebuildServer(params, svcContext); - assertTrue(waitForStateChange(server, Status.RUNNING)); - } + public void testRestoreStack() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.RESTORE_STACK, null); + Stack actualStack = adapter.restoreStack(params, svcContext); + assertEquals(Stack.Status.ACTIVE, actualStack.getStatus()); } /** - * Tests that we can rebuild a paused server (not created from a bootable volume) + * Tests that the lookup server will lookup for the server with server id * * @throws ZoneException If the login cannot be performed because the principal and/or * credentials are invalid. * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if - * the expected argument(s) are not defined or are invalid. + * the expected argument(s) are not defined or are invalid * @throws IllegalStateException If the identity service is not available or cannot be created - * @throws UnknownProviderException If the provider cannot be found * @throws IOException if an I/O error occurs - * @throws APPCException If the server cannot be rebuilt for some reason + * @throws APPCException If the server cannot be found for some reason */ - // @Ignore @Test - public void testRebuildSuspendedServer() - throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException { - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL); - properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME); - properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - - try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - context.login(PRINCIPAL, CREDENTIAL); - VMURL vm = VMURL.parseURL(SERVER_URL); - - ComputeService computeService = context.getComputeService(); - Server server = computeService.getServer(vm.getServerId()); - ensureSuspended(server); - - Map<String, String> params = new HashMap<>(); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); - params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); - SvcLogicContext svcContext = new SvcLogicContext(); - - server = adapter.rebuildServer(params, svcContext); - assertTrue(waitForStateChange(server, Status.RUNNING)); - } + public void testLookupServer() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.LOOKUP_SERVICE, Server.Status.READY); + Server actualServer = adapter.lookupServer(params, svcContext); + assertEquals(SERVER_ID, actualServer.getId()); } /** - * Tests that we can rebuild a paused server (not created from a bootable volume) + * Tests that the to create a snapshot and return a image * * @throws ZoneException If the login cannot be performed because the principal and/or * credentials are invalid. * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if - * the expected argument(s) are not defined or are invalid. + * the expected argument(s) are not defined or are invalid * @throws IllegalStateException If the identity service is not available or cannot be created - * @throws UnknownProviderException If the provider cannot be found * @throws IOException if an I/O error occurs - * @throws APPCException If the server cannot be rebuilt for some reason + * @throws APPCException If the image snapshot can not be taken for some reason */ - // @Ignore @Test - public void testRebuildStoppedServer() - throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException { - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL); - properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME); - properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - - try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - context.login(PRINCIPAL, CREDENTIAL); - VMURL vm = VMURL.parseURL(SERVER_URL); - - ComputeService computeService = context.getComputeService(); - Server server = computeService.getServer(vm.getServerId()); - ensureStopped(server); - - Map<String, String> params = new HashMap<>(); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); - params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); - SvcLogicContext svcContext = new SvcLogicContext(); - - server = adapter.rebuildServer(params, svcContext); - assertTrue(waitForStateChange(server, Status.RUNNING)); - } + public void testCreateSnapshot() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.SNAPSHOT_SERVICE, Server.Status.READY); + Image actualImage = adapter.createSnapshot(params, svcContext); + assertEquals(image.getStatus(), actualImage.getStatus()); } /** - * Test subsequent action on second vm in different Tenant resulting in {"itemNotFound": - * {"message": "Instance could not be found", "code": 404}} + * Tests that the to calculate the server volume and attach it to the server * * @throws ZoneException If the login cannot be performed because the principal and/or * credentials are invalid. @@ -542,359 +379,166 @@ public class TestProviderAdapterImpl { * the expected argument(s) are not defined or are invalid * @throws IllegalStateException If the identity service is not available or cannot be created * @throws IOException if an I/O error occurs - * @throws APPCException + * @throws APPCException If the Server volume can not be calculated for some reason */ - @Test - public void testTenantVerification() + public void testAttachVolume() throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { - - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, "http://example.com:5000"); - properties.setProperty(ContextFactory.PROPERTY_TENANT, "APP-C"); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - - String vmUrl = - "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345"; - - // try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - // context.login("AppC", "AppC"); - - // call lookupServer on vm in defined tenant "APP-C_TLV" - VMURL vm = VMURL.parseURL(vmUrl); - - Map<String, String> params = new HashMap<>(); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl); - params.put(ProviderAdapter.PROPERTY_IDENTITY_URL, "http://example.com:5000/v2.0"); - params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, "http://example.com:5000/v2.0"); - SvcLogicContext svcContext = new SvcLogicContext(); - - long start, end = 0; - - System.out.println("\n--------------------Begin lookupServer on tenant 1--------------------"); - start = System.currentTimeMillis(); - Server server = adapter.lookupServer(params, svcContext); - end = System.currentTimeMillis(); - - System.out.println(String.format("lookupServer on tenant 1 took %ds", (end - start) / 1000)); - System.out.println("----------------------------------------------------------------------\n"); - assertNotNull(server); - - // repeat to show that context is reused for second request - System.out.println("\n-----------------Begin repeat lookupServer on tenant 1----------------"); - start = System.currentTimeMillis(); - server = adapter.lookupServer(params, svcContext); - end = System.currentTimeMillis(); - - System.out.println(String.format("Repeat lookupServer on tenant 1 took %ds", (end - start) / 1000)); - System.out.println("----------------------------------------------------------------------\n"); - assertNotNull(server); - - // call lookupServer on vm in second tenant "Play" - // This is where we would fail due to using the previous - // tenants context - vmUrl = "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345"; - vm = VMURL.parseURL(vmUrl); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl); - - System.out.println("\n--------------------Begin lookupServer on tenant 2--------------------"); - start = System.currentTimeMillis(); - server = adapter.lookupServer(params, svcContext); - end = System.currentTimeMillis(); - System.out.println(String.format("\nlookupServer on tenant 2 took %ds", (end - start) / 1000)); - System.out.println("----------------------------------------------------------------------\n"); - assertNotNull(server); - - // call lookupServer on vm in non-existing tenant - vmUrl = "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345"; - vm = VMURL.parseURL(vmUrl); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl); - - System.out.println("\n--------------Begin lookupServer on non-existant tenant--------------"); - start = System.currentTimeMillis(); - server = adapter.lookupServer(params, svcContext); - end = System.currentTimeMillis(); - System.out.println(String.format("\nlookupServer on tenant 3 took %ds", (end - start) / 1000)); - System.out.println("----------------------------------------------------------------------\n"); - assertNull(server); - - // } + prepareMock(Operation.ATTACHVOLUME_SERVICE, Server.Status.READY); + Server actualServer = adapter.attachVolume(params, svcContext); + assertEquals(SERVER_ID, actualServer.getId()); } - /****************************************/ - - + /** + * Tests that the to detach the calculated volume from the server + * + * @throws ZoneException If the login cannot be performed because the principal and/or + * credentials are invalid. + * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if + * the expected argument(s) are not defined or are invalid + * @throws IllegalStateException If the identity service is not available or cannot be created + * @throws IOException if an I/O error occurs + * @throws APPCException If the Server volume can not be detached for some reason + */ @Test - public void testSnapshotServer() throws Exception { - Properties properties = new Properties(); - properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, "http://example.com:5000"); - // properties.setProperty(ContextFactory.PROPERTY_REGION, ""); - properties.setProperty(ContextFactory.PROPERTY_TENANT, "Play"); - properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - - String vmUrl = - "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345"; - - try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) { - context.login("AppC", "AppC"); - VMURL vm = VMURL.parseURL(vmUrl); - - Map<String, String> params = new HashMap<>(); - params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl); - params.put(ProviderAdapter.PROPERTY_IDENTITY_URL, "http://example.com:5000/v2.0"); - params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, "http://example.com:5000/v2.0"); - SvcLogicContext svcContext = new SvcLogicContext(); - - long start, end = 0; - - start = System.currentTimeMillis(); - Image image = adapter.createSnapshot(params, svcContext); - end = System.currentTimeMillis(); - - System.out.println(String.format("Image ID: %s", image.getId())); - System.out.println(String.format("Snapshot took %ds", (end - start) / 1000)); + public void testDettachVolume() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.DETACHVOLUME_SERVICE, Server.Status.READY); + Server actualServer = adapter.dettachVolume(params, svcContext); + assertEquals(SERVER_ID, actualServer.getId()); + } - start = System.currentTimeMillis(); - adapter.rebuildServer(params, svcContext); - end = System.currentTimeMillis(); - System.out.println(String.format("Rebuild took %ds", (end - start) / 1000)); - } + /****************************************/ - } /** - * Ensures that the server is in stopped (shutdown) state prior to test + * Tests that we can restart a server that is already stopped * - * @param server The server to ensure is stopped - * @throws ZoneException If the server can't be operated upon for some reason + * @throws ZoneException If the login cannot be performed because the principal and/or + * credentials are invalid. + * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if + * the expected argument(s) are not defined or are invalid. + * @throws IllegalStateException If the identity service is not available or cannot be created + * @throws IOException if an I/O error occurs + * @throws APPCException If the server cannot be restarted for some reason */ - @SuppressWarnings("nls") - private static void ensureStopped(Server server) throws ZoneException { - switch (server.getStatus()) { - case READY: - break; - - case PENDING: - waitForStateChange(server, Server.Status.READY, Server.Status.RUNNING, Server.Status.PAUSED, - Server.Status.SUSPENDED, Server.Status.ERROR); - ensureSuspended(server); - break; - - case PAUSED: - server.unpause(); - waitForStateChange(server, Server.Status.RUNNING); - server.stop(); - waitForStateChange(server, Server.Status.READY); - break; - - case SUSPENDED: - server.resume(); - waitForStateChange(server, Server.Status.RUNNING); - server.stop(); - waitForStateChange(server, Server.Status.READY); - break; - - case RUNNING: - server.stop(); - waitForStateChange(server, Server.Status.READY); - break; - - case DELETED: - case ERROR: - default: - fail("Server state is not valid for test - " + server.getStatus().name()); - } + @Test + public void testRestartStoppedServer() + throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException { + prepareMock(Operation.RESTART_SERVICE, Server.Status.RUNNING); + Server actualServer = adapter.restartServer(params, svcContext); + assertEquals(Server.Status.RUNNING, actualServer.getStatus()); + } /** - * Ensures that the server is in suspended state prior to test + * Tests that we can rebuild a server (not created from a bootable volume) * - * @param server The server to ensure is suspended - * @throws ZoneException If the server can't be operated upon for some reason + * @throws ZoneException If the login cannot be performed because the principal and/or + * credentials are invalid. + * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if + * the expected argument(s) are not defined or are invalid. + * @throws IllegalStateException If the identity service is not available or cannot be created + * @throws UnknownProviderException If the provider cannot be found + * @throws IOException if an I/O error occurs + * @throws APPCException If the server cannot be rebuilt for some reason */ - @SuppressWarnings("nls") - private static void ensureSuspended(Server server) throws ZoneException { - switch (server.getStatus()) { - case SUSPENDED: - break; - - case PENDING: - waitForStateChange(server, Server.Status.READY, Server.Status.RUNNING, Server.Status.PAUSED, - Server.Status.SUSPENDED, Server.Status.ERROR); - ensureSuspended(server); - break; - - case PAUSED: - server.unpause(); - waitForStateChange(server, Server.Status.RUNNING); - server.suspend(); - waitForStateChange(server, Server.Status.SUSPENDED); - break; - - case READY: - server.start(); - waitForStateChange(server, Server.Status.RUNNING); - server.suspend(); - waitForStateChange(server, Server.Status.SUSPENDED); - break; - - case RUNNING: - server.suspend(); - waitForStateChange(server, Server.Status.SUSPENDED); - break; - - case DELETED: - case ERROR: - default: - fail("Server state is not valid for test - " + server.getStatus().name()); - } + @Test + public void testRebuildServer() + throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException { + prepareMock(Operation.REBUILD_SERVICE, Server.Status.READY); + Server actualServer = adapter.rebuildServer(params, svcContext); + assertEquals(Server.Status.READY, actualServer.getStatus()); } /** - * This method makes sure that the indicated server is running before performing a test + * Tests that we can terminate a running server * - * @param server The server to ensure is running - * @throws ZoneException If the server can't be operated upon + * @throws ZoneException If the login cannot be performed because the principal and/or + * credentials are invalid. + * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if + * the expected argument(s) are not defined or are invalid. + * @throws IllegalStateException If the identity service is not available or cannot be created + * @throws UnknownProviderException If the provider cannot be found + * @throws IOException if an I/O error occurs + * @throws APPCException If the server cannot be terminated for some reason */ - @SuppressWarnings("nls") - private static void ensureRunning(Server server) throws ZoneException { - switch (server.getStatus()) { - case RUNNING: - break; - - case PENDING: - waitForStateChange(server, Server.Status.READY, Server.Status.RUNNING, Server.Status.PAUSED, - Server.Status.SUSPENDED, Server.Status.ERROR); - ensureRunning(server); - break; - - case PAUSED: - server.unpause(); - waitForStateChange(server, Server.Status.RUNNING); - break; - - case SUSPENDED: - server.resume(); - waitForStateChange(server, Server.Status.RUNNING); - break; - - case READY: - server.start(); - waitForStateChange(server, Server.Status.RUNNING); - break; - - case DELETED: - case ERROR: - default: - fail("Server state is not valid for test - " + server.getStatus().name()); - } + @Test + public void testTerminateServer() + throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException { + prepareMock(Operation.TERMINATE_SERVICE, Server.Status.DELETED); + Server actualServer = adapter.terminateServer(params, svcContext); + assertEquals(Server.Status.DELETED, actualServer.getStatus()); } /** - * This method will make sure that the server we are testing is paused + * Tests that we can evacuate a server to move it to non-pending state * - * @param server The server to make sure is paused for the test - * @throws ZoneException If anything fails + * @throws ZoneException If the login cannot be performed because the principal and/or + * credentials are invalid. + * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if + * the expected argument(s) are not defined or are invalid. + * @throws IllegalStateException If the identity service is not available or cannot be created + * @throws UnknownProviderException If the provider cannot be found + * @throws IOException if an I/O error occurs + * @throws APPCException If the server cannot be evacuated for some reason */ - @SuppressWarnings("nls") - private static void ensurePaused(Server server) throws ZoneException { - switch (server.getStatus()) { - case PAUSED: - break; - - case PENDING: - waitForStateChange(server, Server.Status.READY, Server.Status.RUNNING, Server.Status.PAUSED, - Server.Status.SUSPENDED, Server.Status.ERROR); - ensurePaused(server); - break; - - case READY: - server.start(); - waitForStateChange(server, Server.Status.RUNNING); - server.pause(); - waitForStateChange(server, Server.Status.PAUSED); - break; - - case RUNNING: - server.pause(); - waitForStateChange(server, Server.Status.PAUSED); - break; - - case SUSPENDED: - server.resume(); - waitForStateChange(server, Server.Status.RUNNING); - server.pause(); - waitForStateChange(server, Server.Status.PAUSED); - break; - - case ERROR: - case DELETED: - default: - fail("Server state is not valid for test - " + server.getStatus().name()); - } + @Test + public void testEvacuateServer() + throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException { + prepareMock(Operation.EVACUATE_SERVICE, Server.Status.READY); + Server actualServer = adapter.evacuateServer(params, svcContext); + assertEquals(Server.Status.READY, actualServer.getStatus()); } /** - * Enter a pool-wait loop checking the server state to see if it has entered one of the desired - * states or not. - * <p> - * This method checks the state of the server periodically for one of the desired states. When - * the server enters one of the desired states, the method returns a successful indication - * (true). If the server never enters one of the desired states within the alloted timeout - * period, then the method returns a failed response (false). No exceptions are thrown from this - * method. - * </p> + * Tests that we can migrate a server. Migration can be done only on certain statuses like + * READY, RUNNING & SUSPENDED * - * @param server The server to wait on - * @param desiredStates A variable list of desired states, any one of which is allowed. - * @return True if the server entered one of the desired states, and false if not and the wait - * loop timed out. + * @throws ZoneException If the login cannot be performed because the principal and/or + * credentials are invalid. + * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if + * the expected argument(s) are not defined or are invalid. + * @throws IllegalStateException If the identity service is not available or cannot be created + * @throws UnknownProviderException If the provider cannot be found + * @throws IOException if an I/O error occurs + * @throws APPCException If the server cannot be migrated for some reason */ - private static boolean waitForStateChange(Server server, Server.Status... desiredStates) { - int timeout = ConfigurationFactory.getConfiguration() - .getIntegerProperty(Constants.PROPERTY_SERVER_STATE_CHANGE_TIMEOUT); - long limit = System.currentTimeMillis() + (timeout * 1000); - Server vm = server; - - try { - while (limit > System.currentTimeMillis()) { - vm.refresh(); - for (Server.Status desiredState : desiredStates) { - if (server.getStatus().equals(desiredState)) { - return true; - } - } - - try { - Thread.sleep(10000L); - } catch (InterruptedException e) { - // ignore - } - } - } catch (ZoneException e) { - e.printStackTrace(); - } - - return false; + @Test + public void testMigrateServer() + throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException { + prepareMock(Operation.MIGRATE_SERVICE, Server.Status.READY); + Server actualServer = adapter.migrateServer(params, svcContext); + assertEquals(Server.Status.READY, actualServer.getStatus()); } - /* - * @Test public void testTerminateStack() throws IllegalStateException, - * IllegalArgumentException, ZoneException, UnknownProviderException, IOException { Properties - * properties = new Properties(); properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, - * IDENTITY_URL); properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME); - * properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME); - * properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*"); - * properties.setProperty(ContextFactory.PROPERTY_DISABLE_PROXY, "true"); try (Context context = - * ContextFactory.getContext(PROVIDER_TYPE, properties)) { context.login(PRINCIPAL, CREDENTIAL); - * VMURL vm = VMURL.parseURL(SERVER_URL); ComputeService computeService = - * context.getComputeService(); Server server = computeService.getServer(vm.getServerId()); if - * (!server.getStatus().equals(Status.RUNNING)) { server.start(); - * assertTrue(waitForStateChange(server, Status.RUNNING)); } Map<String, String> params = new - * HashMap<>(); params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); - * params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); SvcLogicContext svcContext - * = new SvcLogicContext(); Stack stack = adapter.terminateStack(params, svcContext); - * assertNotNull(stack); } } - */ + private void prepareMock(Operation operation, Server.Status serverStatus) throws APPCException { + IProviderOperation providerOperation = fetchOperation.apply(operation); + ModelObject modelObject = fetchModelObject.apply(operation, serverStatus); + when(factory.getOperationObject(operation)).thenReturn(providerOperation); + when(providerOperation.doOperation(anyObject(), anyObject())).thenReturn(modelObject); + + } + Function<Operation, IProviderOperation> fetchOperation = operation -> { + if (operation.equals(Operation.EVACUATE_SERVICE)) + return evacuateServer; + else + return providerOperation; + }; + + Function<Server.Status, Server> fetchServer = status -> { + server.setStatus(status); + return server; + }; + + BiFunction<Operation, Server.Status, ModelObject> fetchModelObject = (operation, status) -> { + if (operation.equals(Operation.SNAPSHOT_SERVICE)) + return image; + else if (operation == Operation.RESTORE_STACK || operation == Operation.SNAPSHOT_STACK + || operation == Operation.TERMINATE_STACK) + return stack; + else + return fetchServer.apply(status); + }; } diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderCache.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderCache.java new file mode 100644 index 000000000..b41273855 --- /dev/null +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderCache.java @@ -0,0 +1,117 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.appc.adapter.iaas.impl; + +import static org.junit.Assert.assertNotNull; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.appc.Constants; +import org.onap.appc.configuration.Configuration; +import org.onap.appc.configuration.ConfigurationFactory; +import org.onap.appc.pool.Pool; +import com.att.cdp.zones.Context; +import com.google.common.collect.ImmutableMap; + +/** + * This class is used to test methods and functions of the provider cache + */ +@RunWith(MockitoJUnitRunner.class) +public class TestProviderCache { + + private ProviderCache providerCache; + + @Mock + private TenantCache tenantCache; + + @Mock + private ServiceCatalog catalog; + + @Mock + private Context context; + + @Mock + Pool<Context> pool; + + @SuppressWarnings("nls") + private static final String PROVIDER_NAME = "ILAB"; + + @SuppressWarnings("nls") + private static final String PROVIDER_TYPE = "OpenStackProvider"; + + private static String TENANT_ID; + + protected Set<String> regions = new HashSet<>(Arrays.asList("RegionOne")); + + private Map<String, TenantCache> tenants = new HashMap<String, TenantCache>(); + + @BeforeClass + public static void before() { + Properties props = ConfigurationFactory.getConfiguration().getProperties(); + TENANT_ID = props.getProperty("provider1.tenant1.id", + props.getProperty("test.tenantid", "abcde12345fghijk6789lmnopq123rst")); + } + + /** + * Use reflection to locate fields and methods so that they can be manipulated during the test + * to change the internal state accordingly. + * + */ + @Before + public void setup() { + Configuration props = ConfigurationFactory.getConfiguration(); + props.setProperty(Constants.PROPERTY_RETRY_LIMIT, "10"); + providerCache = new ProviderCache(); + providerCache.setIdentityURL("http://192.168.1.1:5000/v2.0/"); + providerCache.setProviderName(PROVIDER_NAME); + providerCache.setProviderType(PROVIDER_TYPE); + tenantCache = new TenantCache(providerCache); + tenants.put(TENANT_ID, tenantCache); + Map<String, Object> privateFields = ImmutableMap.<String, Object>builder().put("tenants", tenants).build(); + CommonUtility.injectMockObjects(privateFields, providerCache); + } + + /** + * Ensure that we set up the Tenants property correctly + */ + @Test + public void testTenantsProperty() { + assertNotNull(providerCache.getTenants()); + } + + /** + * Ensure that we set up the Tenant Id property correctly + */ + @Test + public void testTenantIdProperty() { + assertNotNull(providerCache.getTenant(TENANT_ID)); + } + +} diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderOperation.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderOperation.java index 98ab7ba7a..0cb25e95c 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderOperation.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestProviderOperation.java @@ -23,18 +23,17 @@ package org.onap.appc.adapter.iaas.impl; +import static org.onap.appc.adapter.iaas.provider.operation.common.constants.Constants.MDC_SERVICE; import java.lang.reflect.Field; import java.util.Map; -import org.onap.appc.adapter.iaas.provider.operation.impl.base.ProviderOperation; -import org.onap.appc.exceptions.APPCException; -import com.att.cdp.zones.model.ModelObject; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.slf4j.MDC; +import org.onap.appc.adapter.iaas.provider.operation.impl.base.ProviderOperation; import org.onap.appc.configuration.ConfigurationFactory; +import org.onap.appc.exceptions.APPCException; import org.onap.ccsdk.sli.core.sli.SvcLogicContext; -import static org.onap.appc.adapter.iaas.provider.operation.common.constants.Constants.MDC_SERVICE; +import org.slf4j.MDC; +import com.att.cdp.zones.model.ModelObject; /** * This class is used to test methods and functions of the adapter implementation that do not @@ -81,10 +80,7 @@ public class TestProviderOperation extends ProviderOperation { @Test(expected = RequestFailedException.class) public void testValidateParameterPatternExpectFailNullValue() throws RequestFailedException { MDC.put(MDC_SERVICE, "junit"); - SvcLogicContext svcContext = new SvcLogicContext(); - RequestContext rc = new RequestContext(svcContext); String link = null; - validateVMURL(VMURL.parseURL(link)); } @@ -97,10 +93,7 @@ public class TestProviderOperation extends ProviderOperation { @Test(expected = RequestFailedException.class) public void testValidateParameterPatternExpectFailEmptyValue() throws RequestFailedException { MDC.put(MDC_SERVICE, "junit"); - SvcLogicContext svcContext = new SvcLogicContext(); - RequestContext rc = new RequestContext(svcContext); String link = ""; - validateVMURL(VMURL.parseURL(link)); } @@ -113,10 +106,7 @@ public class TestProviderOperation extends ProviderOperation { @Test(expected = RequestFailedException.class) public void testValidateParameterPatternExpectFailBlankValue() throws RequestFailedException { MDC.put(MDC_SERVICE, "junit"); - SvcLogicContext svcContext = new SvcLogicContext(); - RequestContext rc = new RequestContext(svcContext); String link = " "; - validateVMURL(VMURL.parseURL(link)); } @@ -129,10 +119,7 @@ public class TestProviderOperation extends ProviderOperation { @Test(expected = RequestFailedException.class) public void testValidateParameterPatternExpectFailBadURL() throws RequestFailedException { MDC.put(MDC_SERVICE, "junit"); - SvcLogicContext svcContext = new SvcLogicContext(); - RequestContext rc = new RequestContext(svcContext); String link = "http://some.host:1234/01d82c08594a4b23a0f9260c94be0c4d/"; - validateVMURL(VMURL.parseURL(link)); } @@ -145,11 +132,8 @@ public class TestProviderOperation extends ProviderOperation { @Test public void testValidateParameterPatternValidURL() throws RequestFailedException { MDC.put(MDC_SERVICE, "junit"); - SvcLogicContext svcContext = new SvcLogicContext(); - RequestContext rc = new RequestContext(svcContext); String link = "http://some.host:1234/v2/01d82c08594a4b23a0f9260c94be0c4d/servers/f888f89f-096b-421e-ba36-34f714071551"; - validateVMURL(VMURL.parseURL(link)); } diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalog.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalog.java index a3479ea38..9746c51a3 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalog.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalog.java @@ -21,58 +21,42 @@ * ============LICENSE_END========================================================= */ - - package org.onap.appc.adapter.iaas.impl; -import com.att.cdp.exceptions.ZoneException; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.appc.configuration.ConfigurationFactory; - +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.CALLS_REAL_METHODS; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import java.util.HashSet; import java.util.Properties; import java.util.Set; import java.util.concurrent.locks.ReentrantReadWriteLock; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.CALLS_REAL_METHODS; -import static org.mockito.Mockito.mock; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.appc.configuration.ConfigurationFactory; +import com.att.cdp.exceptions.ZoneException; /** * This class tests the service catalog against a known provider. */ +@RunWith(MockitoJUnitRunner.class) public class TestServiceCatalog { // Number private static int EXPECTED_REGIONS = 2; - private static int EXPECTED_ENDPOINTS = 1; - - private static String PRINCIPAL; - private static String CREDENTIAL; - private static String TENANT_NAME; - private static String TENANT_ID; - private static String IDENTITY_URL; - private static String REGION_NAME; private ServiceCatalog catalog; - private Properties properties; @BeforeClass public static void before() { Properties props = ConfigurationFactory.getConfiguration().getProperties(); - IDENTITY_URL = props.getProperty("provider1.identity"); - PRINCIPAL = props.getProperty("provider1.tenant1.userid", "appc"); - CREDENTIAL = props.getProperty("provider1.tenant1.password", "appc"); - TENANT_NAME = props.getProperty("provider1.tenant1.name", "appc"); - TENANT_ID = props.getProperty("provider1.tenant1.id", - props.getProperty("test.tenantid", "abcde12345fghijk6789lmnopq123rst")); - REGION_NAME = props.getProperty("provider1.tenant1.region", "RegionOne"); EXPECTED_REGIONS = Integer.valueOf(props.getProperty("test.expected-regions", "2")); - EXPECTED_ENDPOINTS = Integer.valueOf(props.getProperty("test.expected-endpoints", "0")); } /** @@ -82,20 +66,28 @@ public class TestServiceCatalog { */ @Before public void setup() throws ZoneException { - properties = new Properties(); - catalog = mock(ServiceCatalog.class, CALLS_REAL_METHODS); + catalog = Mockito.mock(ServiceCatalog.class, CALLS_REAL_METHODS); + Mockito.doCallRealMethod().when(catalog).trackRequest(); catalog.rwLock = new ReentrantReadWriteLock(); - Set<String> testdata = new HashSet<>(); testdata.add("RegionOne"); catalog.regions = testdata; } /** - * Test that we find all of the expected region(s) + * Ensure that we set up the Region property correctly */ @Test public void testKnownRegions() { assertEquals(EXPECTED_REGIONS, catalog.getRegions().size()); } + + /** + * Ensure that we invoke the track request method + */ + @Test + public void testTrackRequest() { + catalog.trackRequest(); + verify(catalog,times(1)).trackRequest(); + } } diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogFactory.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogFactory.java index 5042b5b43..5cfda5f6e 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogFactory.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogFactory.java @@ -27,6 +27,9 @@ import java.util.Properties; import org.junit.Assert;
import org.junit.Test;
+/**
+ * This class tests the service catalog factory against a known provider.
+ */
public class TestServiceCatalogFactory {
@Test
@@ -85,4 +88,33 @@ public class TestServiceCatalogFactory { Assert.assertNull(catalog);
}
+
+ @Test
+ public void testGetServiceCatalogEmptyURL() {
+ String url = null;
+ String tenantIdentifier = null;
+ String principal = null;
+ String credential = null;
+ String domain = null;
+ Properties properties = null;
+ ServiceCatalog catalog = ServiceCatalogFactory.getServiceCatalog(url, tenantIdentifier, principal, credential,
+ domain, properties);
+
+ Assert.assertNull(catalog);
+ }
+
+ @Test
+ public void testGetServiceCatalogWithoutVersion() {
+ String url = "http://192.168.1.1:5000/";
+ String tenantIdentifier = null;
+ String principal = null;
+ String credential = null;
+ String domain = null;
+ Properties properties = null;
+ ServiceCatalog catalog = ServiceCatalogFactory.getServiceCatalog(url, tenantIdentifier, principal, credential,
+ domain, properties);
+
+ Assert.assertNull(catalog);
+ }
+
}
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogV2.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogV2.java index 802102978..e0684f135 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogV2.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogV2.java @@ -26,21 +26,33 @@ package org.onap.appc.adapter.iaas.impl; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import com.att.cdp.exceptions.ZoneException;
-import com.woorea.openstack.keystone.model.Access.Service;
+import static org.mockito.Mockito.when;
+import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
import org.onap.appc.configuration.ConfigurationFactory;
+import com.att.cdp.exceptions.ZoneException;
+import com.google.common.collect.ImmutableMap;
+import com.woorea.openstack.keystone.model.Access.Service;
+import com.woorea.openstack.keystone.model.Access.Service.Endpoint;
+import com.woorea.openstack.keystone.model.Tenant;
/**
* This class tests the service catalog against a known provider.
*/
-@Ignore
+@RunWith(MockitoJUnitRunner.class)
public class TestServiceCatalogV2 {
// Number
@@ -53,14 +65,30 @@ public class TestServiceCatalogV2 { private static String TENANT_ID;
private static String IDENTITY_URL;
private static String REGION_NAME;
+ private static String PUBLIC_URL;
+
+ private static String IP;
+ private static String PORT;
+ private static String TENANTID;
+ private static String VMID;
+ private static String URL;
private ServiceCatalogV2 catalog;
private Properties properties;
+ @Mock
+ private Tenant tenant;
+
+ private final Set<String> regions = new HashSet<>(Arrays.asList("RegionOne"));
+
+ private Map<String, Service> serviceTypes;
+
+ private Map<String, List<Service.Endpoint>> serviceEndpoints;
+
@BeforeClass
public static void before() {
- Properties props = ConfigurationFactory.getConfiguration().getProperties();
+ final Properties props = ConfigurationFactory.getConfiguration().getProperties();
IDENTITY_URL = props.getProperty("provider1.identity", "appc");
PRINCIPAL = props.getProperty("provider1.tenant1.userid", "appc");
CREDENTIAL = props.getProperty("provider1.tenant1.password", "appc");
@@ -69,42 +97,70 @@ public class TestServiceCatalogV2 { props.getProperty("test.tenantid", "abcde12345fghijk6789lmnopq123rst"));
REGION_NAME = props.getProperty("provider1.tenant1.region", "RegionOne");
+ IP = props.getProperty("test.ip");
+ PORT = props.getProperty("test.port");
+ TENANTID = props.getProperty("test.tenantid");
+ VMID = props.getProperty("test.vmid");
+
EXPECTED_REGIONS = Integer.valueOf(props.getProperty("test.expected-regions", "0"));
EXPECTED_ENDPOINTS = Integer.valueOf(props.getProperty("test.expected-endpoints", "0"));
+
+ PUBLIC_URL =
+ "http://192.168.1.2:5000/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
}
/**
- * Setup the test environment by loading a new service catalog for each test
+ * Setup the test environment by loading a new service catalog for each test Use reflection to
+ * locate fields and methods so that they can be manipulated during the test to change the
+ * internal state accordingly.
*
- * @throws ZoneException
*/
@Before
- public void setup() throws ZoneException {
+ public void setup() {
+ URL = String.format("http://%s:%s/v2/%s/servers/%s", IP, PORT, TENANTID, VMID);
properties = new Properties();
catalog = new ServiceCatalogV2(IDENTITY_URL, TENANT_NAME, PRINCIPAL, CREDENTIAL, properties);
- catalog.init();
+ final Service service = new Service();
+ serviceTypes = ImmutableMap.<String, Service>builder().put(ServiceCatalog.COMPUTE_SERVICE, service)
+ .put(ServiceCatalog.IDENTITY_SERVICE, service).put(ServiceCatalog.IMAGE_SERVICE, service)
+ .put(ServiceCatalog.NETWORK_SERVICE, service).put(ServiceCatalog.VOLUME_SERVICE, service).build();
+ Map<String, Object> endpointPrivateFields =
+ ImmutableMap.<String, Object>builder().put("publicURL", PUBLIC_URL).put("region", REGION_NAME).build();
+ Service.Endpoint endpoint = new Service.Endpoint();
+ CommonUtility.injectMockObjects(endpointPrivateFields, endpoint);
+ final List<Service.Endpoint> endpoints = Arrays.asList(endpoint);
+ serviceEndpoints = ImmutableMap.<String, List<Service.Endpoint>>builder()
+ .put(ServiceCatalog.COMPUTE_SERVICE, endpoints).build();
+ Map<String, Object> privateFields =
+ ImmutableMap.<String, Object>builder().put("regions", regions).put("tenant", tenant)
+ .put("serviceTypes", serviceTypes).put("serviceEndpoints", serviceEndpoints).build();
+ CommonUtility.injectMockObjects(privateFields, catalog);
+ CommonUtility.injectMockObjectsInBaseClass(privateFields, catalog);
+
}
/**
- * Test that the tenant name and ID are returned correctly
+ * Ensure that we get the Tenant Name & Tenant Id property are returned correctly
*/
@Test
public void testKnownTenant() {
+ when(tenant.getName()).thenReturn(TENANT_NAME);
+ when(tenant.getId()).thenReturn(TENANT_ID);
assertEquals(TENANT_NAME, catalog.getProjectName());
assertEquals(TENANT_ID, catalog.getProjectId());
}
/**
- * Test that we find all of the expected region(s)
+ * Ensure that we set up the Region property correctly
*/
@Test
public void testKnownRegions() {
assertEquals(EXPECTED_REGIONS, catalog.getRegions().size());
- // assertEquals(REGION_NAME, catalog.getRegions().toArray()[0]);
+ assertEquals(REGION_NAME, catalog.getRegions().toArray()[0]);
}
/**
- * Test that we can check for published services correctly
+ * Ensure that that we can check for published services correctly
*/
@Test
public void testServiceTypesPublished() {
@@ -113,40 +169,59 @@ public class TestServiceCatalogV2 { }
/**
- * Check that we can get the list of published services
+ * Ensure that we can get the list of published services
*/
@Test
public void testPublishedServicesList() {
- // List<String> services = catalog.getServiceTypes();
-
- // assertTrue(services.contains(ServiceCatalog.COMPUTE_SERVICE));
- // assertTrue(services.contains(ServiceCatalog.IDENTITY_SERVICE));
- // assertTrue(services.contains(ServiceCatalog.IMAGE_SERVICE));
- // assertTrue(services.contains(ServiceCatalog.NETWORK_SERVICE));
- // assertTrue(services.contains(ServiceCatalog.VOLUME_SERVICE));
+ final List<String> services = catalog.getServiceTypes();
+ assertTrue(services.contains(ServiceCatalog.COMPUTE_SERVICE));
+ assertTrue(services.contains(ServiceCatalog.IDENTITY_SERVICE));
+ assertTrue(services.contains(ServiceCatalog.IMAGE_SERVICE));
+ assertTrue(services.contains(ServiceCatalog.NETWORK_SERVICE));
+ assertTrue(services.contains(ServiceCatalog.VOLUME_SERVICE));
}
/**
- * Test that we can get the endpoint(s) for a service
+ * Ensure that we can get the endpoint(s) for a service
*/
@Test
public void testEndpointList() {
- List<Service.Endpoint> endpoints = catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE);
-
+ List<Endpoint> endpoints = catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE);
assertNotNull(endpoints);
assertFalse(endpoints.isEmpty());
assertEquals(EXPECTED_ENDPOINTS, endpoints.size());
-
- Service.Endpoint endpoint = endpoints.get(0);
- // assertEquals(REGION_NAME, endpoint.getRegion());
}
+ /**
+ * Ensure that we override the toString method
+ */
@Test
public void testToString() {
- String testString = catalog.toString();
+ when(tenant.getId()).thenReturn(TENANT_ID);
+ when(tenant.getDescription()).thenReturn("Tenant one");
+ final String testString = catalog.toString();
assertNotNull(testString);
}
+ /**
+ * Ensure that we can get the VM Region
+ */
+ @Test
+ public void testGetVMRegion() {
+ VMURL url = VMURL.parseURL(URL);
+ String region = catalog.getVMRegion(url);
+ assertEquals(REGION_NAME, region);
+ }
+
+ /**
+ * Ensure that we can get the null region when no URL is passed
+ */
+ @Test
+ public void testGetVMRegionWithoutURL() {
+ String region = catalog.getVMRegion(null);
+ assertNull(region);
+ }
+
@Ignore
@Test
public void liveConnectionTest() {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogV3.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogV3.java index 0b62b4e64..a5deb732a 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogV3.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestServiceCatalogV3.java @@ -21,28 +21,37 @@ * ============LICENSE_END=========================================================
*/
-
-
package org.onap.appc.adapter.iaas.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import com.att.cdp.exceptions.ZoneException;
-import com.woorea.openstack.keystone.v3.model.Token.Service.Endpoint;
+import static org.mockito.Mockito.when;
+import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
import org.onap.appc.configuration.ConfigurationFactory;
+import com.google.common.collect.ImmutableMap;
+import com.woorea.openstack.keystone.v3.model.Token;
+import com.woorea.openstack.keystone.v3.model.Token.Service;
+import com.woorea.openstack.keystone.v3.model.Token.Service.Endpoint;
/**
* This class tests the service catalog against a known provider.
*/
-@Ignore
+@RunWith(MockitoJUnitRunner.class)
public class TestServiceCatalogV3 {
// Number
@@ -56,11 +65,28 @@ public class TestServiceCatalogV3 { private static String TENANT_ID;
private static String IDENTITY_URL;
private static String REGION_NAME;
+ private static String PUBLIC_URL;
+
+ private static String IP;
+ private static String PORT;
+ private static String TENANTID;
+ private static String VMID;
+ private static String URL;
private ServiceCatalogV3 catalog;
+ private ServiceCatalogV3 spyCatalog;
+
private Properties properties;
+ private Token.Project project = new Token.Project();
+
+ private final Set<String> regions = new HashSet<>(Arrays.asList("RegionOne"));
+
+ private Map<String, Service> serviceTypes;
+
+ private Map<String, List<Service.Endpoint>> serviceEndpoints;
+
@BeforeClass
public static void before() {
Properties props = ConfigurationFactory.getConfiguration().getProperties();
@@ -73,41 +99,68 @@ public class TestServiceCatalogV3 { props.getProperty("test.tenantid", "abcde12345fghijk6789lmnopq123rst"));
REGION_NAME = props.getProperty("provider1.tenant1.region", "RegionOne");
+ IP = props.getProperty("test.ip");
+ PORT = props.getProperty("test.port");
+ TENANTID = props.getProperty("test.tenantid");
+ VMID = props.getProperty("test.vmid");
+
EXPECTED_REGIONS = Integer.valueOf(props.getProperty("test.expected-regions", "0"));
EXPECTED_ENDPOINTS = Integer.valueOf(props.getProperty("test.expected-endpoints", "0"));
+ PUBLIC_URL =
+ "http://192.168.1.2:5000/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
+
}
/**
- * Setup the test environment by loading a new service catalog for each test
- *
- * @throws ZoneException
+ * Use reflection to locate fields and methods so that they can be manipulated during the test
+ * to change the internal state accordingly.
*/
@Before
- public void setup() throws ZoneException {
+ public void setup() {
+ URL = String.format("http://%s:%s/v2/%s/servers/%s", IP, PORT, TENANTID, VMID);
properties = new Properties();
catalog = new ServiceCatalogV3(IDENTITY_URL, TENANT_NAME, PRINCIPAL, CREDENTIAL, DOMAIN, properties);
+ spyCatalog = Mockito.spy(catalog);
+ project.setId(TENANT_ID);
+ project.setName(TENANT_NAME);
+ final Service service = new Service();
+ serviceTypes = ImmutableMap.<String, Service>builder().put(ServiceCatalog.COMPUTE_SERVICE, service)
+ .put(ServiceCatalog.IDENTITY_SERVICE, service).put(ServiceCatalog.IMAGE_SERVICE, service)
+ .put(ServiceCatalog.NETWORK_SERVICE, service).put(ServiceCatalog.VOLUME_SERVICE, service).build();
+ final Service.Endpoint endpoint = new Service.Endpoint();
+ endpoint.setUrl(PUBLIC_URL);
+ endpoint.setRegion(REGION_NAME);
+ final List<Service.Endpoint> endpoints = Arrays.asList(endpoint);
+ serviceEndpoints = ImmutableMap.<String, List<Service.Endpoint>>builder()
+ .put(ServiceCatalog.COMPUTE_SERVICE, endpoints).build();
+ Map<String, Object> privateFields =
+ ImmutableMap.<String, Object>builder().put("project", project).put("regions", regions)
+ .put("serviceTypes", serviceTypes).put("serviceEndpoints", serviceEndpoints).build();
+ CommonUtility.injectMockObjects(privateFields, catalog);
+ CommonUtility.injectMockObjectsInBaseClass(privateFields, catalog);
}
/**
- * Test that the tenant name and ID are returned correctly
+ * Ensure that we get the Tenant Name & Tenant Id property are returned correctly
*/
@Test
public void testKnownTenant() {
+ when(spyCatalog.getProject()).thenReturn(project);
assertEquals(TENANT_NAME, catalog.getProjectName());
assertEquals(TENANT_ID, catalog.getProjectId());
}
/**
- * Test that we find all of the expected region(s)
+ * Ensure that we set up the Region property correctly
*/
@Test
public void testKnownRegions() {
assertEquals(EXPECTED_REGIONS, catalog.getRegions().size());
- // assertEquals(REGION_NAME, catalog.getRegions().toArray()[0]);
+ assertEquals(REGION_NAME, catalog.getRegions().toArray()[0]);
}
/**
- * Test that we can check for published services correctly
+ * Ensure that that we can check for published services correctly
*/
@Test
public void testServiceTypesPublished() {
@@ -116,12 +169,11 @@ public class TestServiceCatalogV3 { }
/**
- * Check that we can get the list of published services
+ * Ensure that we can get the list of published services
*/
@Test
public void testPublishedServicesList() {
List<String> services = catalog.getServiceTypes();
-
assertTrue(services.contains(ServiceCatalog.COMPUTE_SERVICE));
assertTrue(services.contains(ServiceCatalog.IDENTITY_SERVICE));
assertTrue(services.contains(ServiceCatalog.IMAGE_SERVICE));
@@ -130,26 +182,44 @@ public class TestServiceCatalogV3 { }
/**
- * Test that we can get the endpoint(s) for a service
+ * Ensure that we can get the endpoint(s) for a service
*/
@Test
public void testEndpointList() {
List<Endpoint> endpoints = catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE);
-
assertNotNull(endpoints);
assertFalse(endpoints.isEmpty());
assertEquals(EXPECTED_ENDPOINTS, endpoints.size());
-
- Endpoint endpoint = endpoints.get(0);
- // assertEquals(REGION_NAME, endpoint.getRegion());
}
+ /**
+ * Ensure that we override the toString method
+ */
@Test
public void testToString() {
String testString = catalog.toString();
assertNotNull(testString);
}
+ /**
+ * Ensure that we can get the VM Region
+ */
+ @Test
+ public void testGetVMRegion() {
+ VMURL url = VMURL.parseURL(URL);
+ String region = catalog.getVMRegion(url);
+ assertEquals(REGION_NAME, region);
+ }
+
+ /**
+ * Ensure that we can get the null region when no URL is passed
+ */
+ @Test
+ public void testGetVMRegionWithoutURL() {
+ String region = catalog.getVMRegion(null);
+ assertNull(region);
+ }
+
@Ignore
@Test
public void liveConnectionTest() {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestTenantCache.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestTenantCache.java new file mode 100644 index 000000000..449db89c0 --- /dev/null +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestTenantCache.java @@ -0,0 +1,223 @@ +/* + * ============LICENSE_START======================================================= Copyright (C) + * 2016-2018 Ericsson. 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.appc.adapter.iaas.impl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.when; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.appc.Constants; +import org.onap.appc.configuration.Configuration; +import org.onap.appc.configuration.ConfigurationFactory; +import org.onap.appc.pool.Pool; +import com.att.cdp.exceptions.ContextConnectionException; +import com.att.cdp.exceptions.ZoneException; +import com.att.cdp.zones.Context; +import com.google.common.collect.ImmutableMap; + +/** + * This class is used to test methods and functions of the Tenant cache + */ +@RunWith(MockitoJUnitRunner.class) +public class TestTenantCache { + + private TenantCache tenantCache; + + private VMURL url; + + @Mock + private ServiceCatalog catalog; + + @Mock + private Context context; + + @Mock + Pool<Context> pool; + + private ProviderCache provider; + + private static String TENANT_NAME; + private static String TENANT_ID; + private static String IDENTITY_URL; + private static String REGION_NAME; + private static String CREDENTIAL; + private static String DOMAIN; + + protected Set<String> regions = new HashSet<>(Arrays.asList("RegionOne")); + + @BeforeClass + public static void before() { + Properties props = ConfigurationFactory.getConfiguration().getProperties(); + IDENTITY_URL = props.getProperty("provider1.identity"); + TENANT_NAME = props.getProperty("provider1.tenant1.name", "appc"); + TENANT_ID = props.getProperty("provider1.tenant1.id", + props.getProperty("test.tenantid", "abcde12345fghijk6789lmnopq123rst")); + DOMAIN = props.getProperty("provider1.tenant1.domain", "Default"); + CREDENTIAL = props.getProperty("provider1.tenant1.password", "appc"); + REGION_NAME = props.getProperty("provider1.tenant1.region", "RegionOne"); + } + + @Before + public void setup() { + Configuration props = ConfigurationFactory.getConfiguration(); + props.setProperty(Constants.PROPERTY_RETRY_LIMIT, "3"); + provider = new ProviderCache(); + provider.setIdentityURL(IDENTITY_URL); + tenantCache = new TenantCache(provider); + tenantCache.setDomain(DOMAIN); + tenantCache.setPassword(CREDENTIAL); + tenantCache.setTenantId(TENANT_ID); + tenantCache.setTenantName(TENANT_NAME); + tenantCache.setUserid(CREDENTIAL); + props.setProperty(Constants.PROPERTY_RETRY_DELAY, "1"); + Map<String, Object> privateFields = ImmutableMap.<String, Object>builder().put("catalog", catalog).build(); + CommonUtility.injectMockObjects(privateFields, tenantCache); + } + + @Test + public void testDetermineRegion() { + when(catalog.getVMRegion(url)).thenReturn(REGION_NAME); + assertEquals(REGION_NAME, tenantCache.determineRegion(url)); + } + + @Test + public void testDestroy() { + TenantCache spy = Mockito.spy(tenantCache); + spy.destroy(context, pool); + } + + @Test + public void testDestroyWithException() throws IOException { + doThrow(new IOException("I/O Exception occured while closing context")).when(context).close(); + TenantCache spy = Mockito.spy(tenantCache); + spy.destroy(context, pool); + } + + @Test + public void testInitialize() { + TenantCache spyTenant = Mockito.spy(tenantCache); + when(catalog.getRegions()).thenReturn(regions); + when(catalog.getProjectId()).thenReturn(TENANT_ID); + when(catalog.getProjectName()).thenReturn(TENANT_NAME); + spyTenant.initialize(); + } + + @Test + public void testInitializeWithOverLimit() { + Configuration props = ConfigurationFactory.getConfiguration(); + props.setProperty(Constants.PROPERTY_RETRY_LIMIT, "1"); + TenantCache spyTenant = Mockito.spy(tenantCache); + when(spyTenant.getServiceCatalogFactory(anyString(), anyString(), anyObject())).thenReturn(catalog); + when(spyTenant.getTenantName()).thenReturn(TENANT_NAME); + when(catalog.getRegions()).thenReturn(regions); + spyTenant.initialize(); + } + + @Test + public void testInitializeWithContextConnectionException() throws ZoneException { + Configuration props = ConfigurationFactory.getConfiguration(); + props.setProperty(Constants.PROPERTY_RETRY_LIMIT, "2"); + props.setProperty(Constants.PROPERTY_RETRY_DELAY, "1"); + doThrow(new ContextConnectionException("Contex Connection Exception")).when(catalog).init(); + TenantCache spyTenant = Mockito.spy(tenantCache); + spyTenant.initialize(); + } + + @Test + public void testInitializeWithZoneException() throws ZoneException { + Configuration props = ConfigurationFactory.getConfiguration(); + props.setProperty(Constants.PROPERTY_RETRY_LIMIT, "2"); + props.setProperty(Constants.PROPERTY_RETRY_DELAY, "1"); + doThrow(new ZoneException("Zone Exception")).when(catalog).init(); + TenantCache spyTenant = Mockito.spy(tenantCache); + when(spyTenant.getServiceCatalogFactory(anyString(), anyString(), anyObject())).thenReturn(catalog); + spyTenant.initialize(); + } + + /** + * Ensure that we set up the Domain property correctly + */ + @Test + public void testDomainProperty() { + assertEquals(DOMAIN, tenantCache.getDomain()); + } + + /** + * Ensure that we set up the Provider property correctly + */ + @Test + public void testProviderProperty() { + assertEquals(provider, tenantCache.getProvider()); + } + + /** + * Ensure that we set up the Password property correctly + */ + @Test + public void testPasswordProperty() { + assertEquals(CREDENTIAL, tenantCache.getPassword()); + } + + /** + * Ensure that we set up the Tenant Id property correctly + */ + @Test + public void testTenantIdProperty() { + assertEquals(TENANT_ID, tenantCache.getTenantId()); + } + + /** + * Ensure that we set up the Tenant Name property correctly + */ + @Test + public void testTenantNameProperty() { + assertEquals(TENANT_NAME, tenantCache.getTenantName()); + } + + /** + * Ensure that we set up the User Id property correctly + */ + @Test + public void testUserIdProperty() { + assertEquals(CREDENTIAL, tenantCache.getUserid()); + } + + /** + * Ensure that we set up the Pools property correctly + */ + @Test + public void testPoolsProperty() { + assertNotNull(tenantCache.getPools()); + } +} diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestVMURL.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestVMURL.java index d0c157497..77c0e42a5 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestVMURL.java +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/onap/appc/adapter/iaas/impl/TestVMURL.java @@ -21,8 +21,6 @@ * ============LICENSE_END========================================================= */ - - package org.onap.appc.adapter.iaas.impl; import static org.junit.Assert.assertEquals; @@ -31,9 +29,10 @@ import static org.junit.Assert.assertNull; import java.util.Properties; import org.junit.BeforeClass; import org.junit.Test; -import org.onap.appc.adapter.iaas.impl.VMURL; import org.onap.appc.configuration.ConfigurationFactory; - +/** + * This class is used to test methods and functions of the VMURL + */ public class TestVMURL { private static String IP; @@ -41,6 +40,7 @@ public class TestVMURL { private static String TENANTID; private static String VMID; private static String URL; + private static String VERSION; @BeforeClass public static void before() { @@ -49,6 +49,7 @@ public class TestVMURL { PORT = props.getProperty("test.port"); TENANTID = props.getProperty("test.tenantid"); VMID = props.getProperty("test.vmid"); + VERSION = props.getProperty("test.version"); } /** @@ -64,6 +65,7 @@ public class TestVMURL { assertEquals(PORT, url.getPort()); assertEquals(TENANTID, url.getTenantId()); assertEquals(VMID, url.getServerId()); + assertEquals(VERSION, url.getVersion()); assertEquals(url.toString(), URL); } @@ -77,6 +79,7 @@ public class TestVMURL { assertNull(url.getPath()); assertEquals(TENANTID, url.getTenantId()); assertEquals(VMID, url.getServerId()); + assertEquals(VERSION, url.getVersion()); assertEquals(url.toString(), URL); } diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/resources/org/onap/appc/default.properties b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/resources/org/onap/appc/default.properties index ab1be372a..6ecf278ca 100644 --- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/resources/org/onap/appc/default.properties +++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/resources/org/onap/appc/default.properties @@ -91,7 +91,7 @@ provider1.type=appc provider1.name=appc #These you can change -provider1.identity=appc +provider1.identity=http://localhost:9081/v2.0 provider1.tenant1.name=appc provider1.tenant1.userid=appc provider1.tenant1.password=appc @@ -108,4 +108,5 @@ test.tenantid=abcde12345fghijk6789lmnopq123rst test.vmid=abc12345-1234-5678-890a-abcdefg12345 # Port 8774 below is default port for OpenStack's Nova API Service test.url=http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345 +test.version=v2 |