From 840883031392a45d57f3c30ac44cbd92a0053164 Mon Sep 17 00:00:00 2001 From: Michal Kabaj Date: Tue, 6 Feb 2018 13:54:02 +0100 Subject: [PATCH] ChefActivator JUnits Add new JUnits for ChefActivator class, minor refactor + cleanup. - Remove redundant getAdapterName() method from ChefAdapter to unify adapter name constant definition Change-Id: I483d34aaa0f4e76a4360b179f1a60cc1263ec9b7 Issue-ID: APPC-437 Signed-off-by: Michal Kabaj --- .../appc-chef-adapter-bundle/pom.xml | 4 + .../org/onap/appc/adapter/chef/ChefActivator.java | 46 ++++----- .../org/onap/appc/adapter/chef/ChefAdapter.java | 7 -- .../appc/adapter/chef/impl/ChefAdapterImpl.java | 11 -- .../onap/appc/adapter/chef/ChefActivatorTest.java | 111 +++++++++++++++++++++ 5 files changed, 137 insertions(+), 42 deletions(-) create mode 100644 appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/ChefActivatorTest.java diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/pom.xml b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/pom.xml index 09c2019d3..b18073810 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/pom.xml +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/pom.xml @@ -152,6 +152,10 @@ junit test + + org.mockito + mockito-core + org.onap.ccsdk.sli.core diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/ChefActivator.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/ChefActivator.java index 963b78aae..a2eadfa63 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/ChefActivator.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/ChefActivator.java @@ -9,28 +9,28 @@ * 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. - * + * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * ============LICENSE_END========================================================= */ package org.onap.appc.adapter.chef; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import org.onap.appc.Constants; import org.onap.appc.adapter.chef.impl.ChefAdapterImpl; import org.onap.appc.configuration.Configuration; import org.onap.appc.configuration.ConfigurationFactory; import org.onap.appc.i18n.Msg; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; @@ -55,8 +55,9 @@ import org.osgi.framework.ServiceRegistration; */ public class ChefActivator implements BundleActivator { + private static final EELFLogger logger = EELFManager.getInstance().getLogger(ChefActivator.class); private static final String NAME = "APPC Chef Adapter"; - private static final String CHEF_ADAPTER_STR = "CHEF adapter"; + private static final String ADAPTER_NAME = "CHEF adapter"; /** * The bundle registration @@ -68,15 +69,10 @@ public class ChefActivator implements BundleActivator { */ private ChefAdapter adapter; - /** - * The logger to be used - */ - private final EELFLogger logger = EELFManager.getInstance().getLogger(ChefActivator.class); - /** * The configuration object used to configure this bundle */ - private Configuration configuration; + private Configuration configuration = ConfigurationFactory.getConfiguration(); /** * Called when this bundle is started so the Framework can perform the bundle-specific activities necessary to start @@ -84,7 +80,7 @@ public class ChefActivator implements BundleActivator { *

* This method must complete and return to its caller in a timely manner. *

- * + * * @param context * The execution context of the bundle being started. * @throws java.lang.Exception @@ -97,17 +93,16 @@ public class ChefActivator implements BundleActivator { public void start(BundleContext context) throws Exception { logger.info("Starting bundle " + NAME); - configuration = ConfigurationFactory.getConfiguration(); - String appName = configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME); - logger.info(Msg.COMPONENT_INITIALIZING, appName, "chef adapter"); - adapter = new ChefAdapterImpl(configuration.getProperties()); + String appName = readApplicationNameFromProperties(); + logger.info(Msg.COMPONENT_INITIALIZING, appName, ADAPTER_NAME); + adapter = new ChefAdapterImpl(); if (registration == null) { - logger.info(Msg.REGISTERING_SERVICE, appName, adapter.getAdapterName(), + logger.info(Msg.REGISTERING_SERVICE, appName, ADAPTER_NAME, ChefAdapter.class.getSimpleName()); registration = context.registerService(ChefAdapter.class, adapter, null); } - logger.info(Msg.COMPONENT_INITIALIZED, appName, CHEF_ADAPTER_STR); + logger.info(Msg.COMPONENT_INITIALIZED, appName, ADAPTER_NAME); } /** @@ -118,7 +113,7 @@ public class ChefActivator implements BundleActivator { *

* This method must complete and return to its caller in a timely manner. *

- * + * * @param context * The execution context of the bundle being stopped. * @throws java.lang.Exception @@ -132,13 +127,16 @@ public class ChefActivator implements BundleActivator { logger.info("Stopping bundle " + NAME); if (registration != null) { - String appName = configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME); - logger.info(Msg.COMPONENT_TERMINATING, appName, CHEF_ADAPTER_STR); - logger.info(Msg.UNREGISTERING_SERVICE, appName, adapter.getAdapterName()); + String appName = readApplicationNameFromProperties(); + logger.info(Msg.COMPONENT_TERMINATING, appName, ADAPTER_NAME); + logger.info(Msg.UNREGISTERING_SERVICE, appName, ADAPTER_NAME); registration.unregister(); registration = null; - logger.info(Msg.COMPONENT_TERMINATED, appName, CHEF_ADAPTER_STR); + logger.info(Msg.COMPONENT_TERMINATED, appName, ADAPTER_NAME); } } + private String readApplicationNameFromProperties() { + return configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME); + } } diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/ChefAdapter.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/ChefAdapter.java index f113557ec..ea60ba81a 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/ChefAdapter.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/ChefAdapter.java @@ -186,13 +186,6 @@ public interface ChefAdapter extends SvcLogicJavaPlugin { */ // Server rebuildServer(Map properties, SvcLogicContext context) throws APPCException; - /** - * Returns the symbolic name of the adapter - * - * @return The adapter name - */ - String getAdapterName(); - // Server evacuateServer(Map params, SvcLogicContext ctx) throws APPCException; //Server migrateServer(Map params, SvcLogicContext ctx) throws APPCException; diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java index dfc762f40..f1f9f258a 100644 --- a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/main/java/org/onap/appc/adapter/chef/impl/ChefAdapterImpl.java @@ -139,17 +139,6 @@ public class ChefAdapterImpl implements ChefAdapter { initialize(); } - /** - * Returns the symbolic name of the adapter - * - * @return The adapter name - * @see org.onap.appc.adapter.chef.ChefAdapter#getAdapterName() - */ - @Override - public String getAdapterName() { - return "chef adapter"; - } - @SuppressWarnings("nls") @Override public void vnfcEnvironment(Map params, SvcLogicContext ctx) throws SvcLogicException { diff --git a/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/ChefActivatorTest.java b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/ChefActivatorTest.java new file mode 100644 index 000000000..b261a77e9 --- /dev/null +++ b/appc-adapters/appc-chef-adapter/appc-chef-adapter-bundle/src/test/java/org/onap/appc/adapter/chef/ChefActivatorTest.java @@ -0,0 +1,111 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2018 Nokia. All rights reserved. + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.appc.adapter.chef; + +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isA; +import static org.mockito.Matchers.isNull; +import static org.mockito.Mockito.only; + +import java.util.Dictionary; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.appc.adapter.chef.impl.ChefAdapterImpl; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +@RunWith(MockitoJUnitRunner.class) +public class ChefActivatorTest { + + @Mock + private ServiceRegistration serviceRegistration; + @Mock + private BundleContext bundleContext; + + private ChefActivator chefActivator = new ChefActivator(); + + @Before + public void setUp() { + given(bundleContext.registerService(eq(ChefAdapter.class), isA(ChefAdapterImpl.class), isNull( + Dictionary.class))).willReturn(serviceRegistration); + } + + @Test + public void start_shouldRegisterService_whenRegistrationOccursForTheFirstTime() throws Exception { + registerService(); + + then(bundleContext).should(only()) + .registerService(eq(ChefAdapter.class), isA(ChefAdapterImpl.class), isNull( + Dictionary.class)); + } + + @Test + public void start_shouldRegisterServiceOnlyOnce_whenServiceRegistrationIsNotNull() throws Exception { + // GIVEN + registerService(); + + // WHEN + registerService(); + + // THEN + then(bundleContext).should(only()).registerService(eq(ChefAdapter.class), isA(ChefAdapterImpl.class), isNull( + Dictionary.class)); + } + + @Test + public void stop_shouldUnregisterService_whenServiceRegistrationObjectIsNotNull() throws Exception { + // GIVEN + registerService(); + + // WHEN + unregisterService(); + + // THEN + then(serviceRegistration).should().unregister(); + } + + @Test + public void stop_shouldNotAttemptToUnregisterService_whenServiceHasAlreadyBeenUnregistered() + throws Exception { + // GIVEN + registerService(); + unregisterService(); + + // WHEN + unregisterService(); + + // THEN + then(serviceRegistration).should(only()).unregister(); + } + + private void registerService() throws Exception { + chefActivator.start(bundleContext); + } + + private void unregisterService() throws Exception { + chefActivator.stop(bundleContext); + } +} \ No newline at end of file -- 2.16.6