diff options
6 files changed, 157 insertions, 18 deletions
diff --git a/appc-oam/appc-oam-bundle/pom.xml b/appc-oam/appc-oam-bundle/pom.xml index edd909306..f2c1c6274 100644 --- a/appc-oam/appc-oam-bundle/pom.xml +++ b/appc-oam/appc-oam-bundle/pom.xml @@ -282,7 +282,6 @@ <version>${project.version}</version> <scope>provided</scope> </dependency> - </dependencies> <version>1.5.0-SNAPSHOT</version> diff --git a/appc-oam/appc-oam-bundle/src/main/java/org/onap/appc/oam/util/BundleHelper.java b/appc-oam/appc-oam-bundle/src/main/java/org/onap/appc/oam/util/BundleHelper.java index b862ed3a7..7639c4075 100644 --- a/appc-oam/appc-oam-bundle/src/main/java/org/onap/appc/oam/util/BundleHelper.java +++ b/appc-oam/appc-oam-bundle/src/main/java/org/onap/appc/oam/util/BundleHelper.java @@ -5,6 +5,8 @@ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Copyright (C) 2017 Amdocs + * ================================================================================ + * Modifications (C) 2018 Ericsson * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -166,7 +168,7 @@ public class BundleHelper { String[] bundlesToStop = readPropsFromPropListName(PROP_BUNDLE_TO_STOP); String[] regExBundleNotStop = readPropsFromPropListName(PROP_BUNDLES_TO_NOT_STOP); - BundleFilter bundleList = new BundleFilter(bundlesToStop, regExBundleNotStop, getBundleList()); + BundleFilter bundleList = getBundleFilter(bundlesToStop, regExBundleNotStop, getBundleList()); logger.info(String.format("(%d) APPC bundles to Stop/Start: %s.", bundleList.getBundlesToStop().size(), bundleList.getBundlesToStop().toString())); @@ -220,6 +222,10 @@ public class BundleHelper { } } + protected BundleFilter getBundleFilter(String[] stopRegexes, String[] exceptRegexes, Bundle[] bundles) { + return new BundleFilter(stopRegexes, exceptRegexes, bundles); + } + /** * Runnable to execute bundle operations: start or stop */ diff --git a/appc-oam/appc-oam-bundle/src/main/java/org/onap/appc/oam/util/StateHelper.java b/appc-oam/appc-oam-bundle/src/main/java/org/onap/appc/oam/util/StateHelper.java index 0d24b5e8a..6ed50dbe6 100644 --- a/appc-oam/appc-oam-bundle/src/main/java/org/onap/appc/oam/util/StateHelper.java +++ b/appc-oam/appc-oam-bundle/src/main/java/org/onap/appc/oam/util/StateHelper.java @@ -5,6 +5,8 @@ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Copyright (C) 2017 Amdocs + * ================================================================================ + * Modifications (C) 2018 Ericsson * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -122,7 +124,7 @@ public class StateHelper { * @return AppcOamStates */ public AppcOamStates getBundlesState() { - BundleHelper bundleHelper = new BundleHelper(logger, configurationHelper, this); + BundleHelper bundleHelper = getBundleHelper(logger, configurationHelper); Map<String, Bundle> lcmBundleMap = bundleHelper.getAppcLcmBundles(); if (lcmBundleMap == null || lcmBundleMap.isEmpty()) { return AppcOamStates.Unknown; @@ -140,4 +142,7 @@ public class StateHelper { return AppcOamStates.getOamStateFromBundleState(currentState); } + protected BundleHelper getBundleHelper(EELFLogger logger, ConfigurationHelper configurationHelper) { + return new BundleHelper(logger, configurationHelper, this); + } } diff --git a/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/BundleFilterTest.java b/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/BundleFilterTest.java new file mode 100644 index 000000000..f987ececf --- /dev/null +++ b/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/BundleFilterTest.java @@ -0,0 +1,45 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2018 Ericsson + * ============================================================================= + * 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.oam.util; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; +import org.mockito.Mockito; +import org.osgi.framework.Bundle; + +public class BundleFilterTest { + + @Test + public void testBundleFilter() { + Bundle mockBundle1 = Mockito.mock(Bundle.class); + Bundle mockBundle2 = Mockito.mock(Bundle.class); + Mockito.doReturn("Bundle-regex1").when(mockBundle1).getSymbolicName(); + Mockito.doReturn("Bundle-regex2").when(mockBundle2).getSymbolicName(); + Bundle[] bundles = {mockBundle1, mockBundle2}; + String[] stopRegex = {"Bundle-regex1"}; + String[] exceptRegex = {"NOT_MATCHING_REGEX"}; + BundleFilter mockBundleFilter = Mockito.spy(new BundleFilter(stopRegex, exceptRegex, bundles)); + assertEquals(1, mockBundleFilter.getBundlesToStop().size()); + assertEquals(1, mockBundleFilter.getBundlesToNotStop().size()); + } + +} diff --git a/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/BundleHelperTest.java b/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/BundleHelperTest.java index 4d6b2f8ec..24df0440e 100644 --- a/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/BundleHelperTest.java +++ b/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/BundleHelperTest.java @@ -5,6 +5,8 @@ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Copyright (C) 2017 Amdocs + * ================================================================================ + * Modifications (C) 2018 Ericsson * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,16 +25,23 @@ package org.onap.appc.oam.util; +import static org.hamcrest.CoreMatchers.isA; + import com.att.eelf.configuration.EELFLogger; +import com.google.common.collect.ImmutableMap; import org.apache.commons.lang.ArrayUtils; import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.onap.appc.configuration.Configuration; import org.onap.appc.exceptions.APPCException; import org.onap.appc.oam.AppcOam; +import org.onap.appc.oam.processor.BaseCommon; +import org.onap.appc.oam.util.BundleHelper.BundleTask; import org.onap.appc.statemachine.impl.readers.AppcOamStates; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -47,20 +56,28 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; - +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.spy; -@SuppressWarnings("ResultOfMethodCallIgnored") @RunWith(PowerMockRunner.class) -@PrepareForTest({BundleHelper.class, FrameworkUtil.class}) +@PrepareForTest(FrameworkUtil.class) public class BundleHelperTest { private BundleHelper bundleHelper; private AsyncTaskHelper mockTaskHelper = mock(AsyncTaskHelper.class); + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + @Before public void setUp() throws Exception { bundleHelper = spy(new BundleHelper(null, null, null)); @@ -72,7 +89,7 @@ public class BundleHelperTest { @Test public void testBundleOperations() throws Exception { - // spy mocked bundle for calls to method statr or stop. + // spy mocked bundle for calls to method start or stop. // Note: the time of method calls are accumulated in this test method. Bundle mockBundle = spy(Mockito.mock(Bundle.class)); Map<String, Bundle> mapFromGetAppcLcmBundles = new HashMap<>(); @@ -172,8 +189,75 @@ public class BundleHelperTest { Mockito.doReturn(propValue3).when(fakeConf).getProperty("4321"); propResult = bundleHelper.readPropsFromPropListName(propKey); Assert.assertTrue("PropertyResult should have two elements", propResult.length == 2); - List propResultList = Arrays.asList(propResult); + List<String> propResultList = Arrays.asList(propResult); Assert.assertTrue("PropertyResult should have propertyValue2", propResultList.contains(propValue2)); Assert.assertTrue("PropertyResult should have propertyValue2", propResultList.contains(propValue3)); } + + @Test + public void testIsTaskAllDone() throws InterruptedException, ExecutionException { + assertTrue(bundleHelper.isAllTaskDone(getMapForTests(true))); + } + + @Test + public void testIsTaskAllDoneNotDone() throws InterruptedException, ExecutionException { + assertFalse(bundleHelper.isAllTaskDone(getMapForTests(false))); + } + + @Test + public void testCancelUnfinished() throws InterruptedException, ExecutionException { + Map<String, Future<?>> map = getMapForTests(false); + bundleHelper.cancelUnfinished(map); + Mockito.verify(map.get("TEST_KEY"), Mockito.times(1)).cancel(true); + } + + @Test + public void testGetFailedMetrics() throws InterruptedException, ExecutionException { + Map<String, Future<?>> map = getMapForTests(false); + FutureTask<String> mockFutureTask = (FutureTask<String>) map.get("TEST_KEY"); + Mockito.doReturn(Mockito.mock(BundleHelper.BundleTask.class)).when(mockFutureTask).get(); + assertEquals(0, bundleHelper.getFailedMetrics(map)); + } + + @Test + public void testGetFailedMetricsExceptionFlow() throws InterruptedException, ExecutionException { + Map<String, Future<?>> map = getMapForTests(false); + FutureTask<String> mockFutureTask = (FutureTask<String>) map.get("TEST_KEY"); + Mockito.doThrow(new ExecutionException("TestExecutionException", new Throwable())).when(mockFutureTask).get(); + expectedEx.expect(RuntimeException.class); + expectedEx.expectCause(isA(ExecutionException.class)); + bundleHelper.getFailedMetrics(map); + } + + @Test + public void testGetAppcLcmBundles() { + Mockito.doReturn(null).when(bundleHelper).readPropsFromPropListName(Mockito.anyString()); + mockStatic(FrameworkUtil.class); + Bundle myBundle = mock(Bundle.class); + PowerMockito.when(FrameworkUtil.getBundle(any())).thenReturn(myBundle); + BundleFilter mockBundleFilter = Mockito.mock(BundleFilter.class); + Mockito.doReturn(mockBundleFilter).when(bundleHelper).getBundleFilter(null, null, null); + assertTrue(bundleHelper.getAppcLcmBundles().isEmpty()); + } + + @Test + public void testBundleTask() throws Exception { + AppcOam.RPC mockRpc = AppcOam.RPC.maintenance_mode; + Bundle mockBundle = Mockito.mock(Bundle.class); + BaseCommon mockBaseCommon = Mockito.mock(BaseCommon.class); + assertTrue(bundleHelper. new BundleTask(mockRpc, mockBundle, mockBaseCommon) instanceof BundleHelper.BundleTask); + } + + private Map<String, Future<?>> getMapForTests(boolean isDone) throws InterruptedException, ExecutionException { + Callable<String> callable = new Callable<String>() { + @Override + public String call() throws Exception { + return "CALLED"; + } + }; + FutureTask<String> futureTask = Mockito.spy(new FutureTask<String>(callable)); + Mockito.doReturn(isDone).when(futureTask).isDone(); + Map<String, Future<?>> map = ImmutableMap.of("TEST_KEY", futureTask); + return map; + } } diff --git a/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/StateHelperTest.java b/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/StateHelperTest.java index 8cbb9bb4c..c2cf8e7a0 100644 --- a/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/StateHelperTest.java +++ b/appc-oam/appc-oam-bundle/src/test/java/org/onap/appc/oam/util/StateHelperTest.java @@ -5,6 +5,8 @@ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Copyright (C) 2017 Amdocs + * ================================================================================ + * Modifications (C) 2018 Ericsson * ============================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +35,6 @@ import org.opendaylight.yang.gen.v1.org.onap.appc.oam.rev170303.AppcState; import org.onap.appc.statemachine.impl.readers.AppcOamStates; import org.osgi.framework.Bundle; import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; @@ -44,7 +45,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @RunWith(PowerMockRunner.class) -@PrepareForTest({StateHelper.class}) public class StateHelperTest { private StateHelper stateHelper; @@ -63,7 +63,7 @@ public class StateHelperTest { stateHelper.setState(appcOamStates); Assert.assertEquals("Should have the new value", appcOamStates, Whitebox.getInternalState(stateHelper, "appcOamCurrentState")); - // reest to default value + // reset to default value stateHelper.setState(AppcOamStates.Unknown); } @@ -90,7 +90,7 @@ public class StateHelperTest { @Test public void testGetCurrentOamState() throws Exception { AppcOamStates mockResult = AppcOamStates.Started; - // mock getBundlesState, as we are testin it separately + // mock getBundlesState, as we are testing it separately PowerMockito.doReturn(mockResult).when(stateHelper, "getBundlesState"); Whitebox.setInternalState(stateHelper, "appcOamCurrentState", AppcOamStates.Unknown); @@ -142,23 +142,23 @@ public class StateHelperTest { @Test public void testGetBundlesState() throws Exception { - BundleHelper mockBundlerHelper = mock(BundleHelper.class); - PowerMockito.whenNew(BundleHelper.class).withAnyArguments().thenReturn(mockBundlerHelper); - + BundleHelper mockBundleHelper = mock(BundleHelper.class); + Mockito.doReturn(mockBundleHelper).when(stateHelper).getBundleHelper(Mockito.any(EELFLogger.class), Mockito.any(ConfigurationHelper.class)); + // test null bundle map - Mockito.when(mockBundlerHelper.getAppcLcmBundles()).thenReturn(null); + Mockito.when(mockBundleHelper.getAppcLcmBundles()).thenReturn(null); Assert.assertEquals("Should return unknown state", AppcOamStates.Unknown, stateHelper.getBundlesState()); // tet empty bundle map Map<String, Bundle> bundleMap = new HashMap<>(); - Mockito.when(mockBundlerHelper.getAppcLcmBundles()).thenReturn(bundleMap); + Mockito.when(mockBundleHelper.getAppcLcmBundles()).thenReturn(bundleMap); Assert.assertEquals("Should return unknown state", AppcOamStates.Unknown, stateHelper.getBundlesState()); Bundle mockBundle1 = mock(Bundle.class); Bundle mockBundle2 = mock(Bundle.class); bundleMap.put("1", mockBundle1); bundleMap.put("2", mockBundle2); - Mockito.when(mockBundlerHelper.getAppcLcmBundles()).thenReturn(bundleMap); + Mockito.when(mockBundleHelper.getAppcLcmBundles()).thenReturn(bundleMap); // test bundles have differnt states Mockito.doReturn(Bundle.RESOLVED).when(mockBundle1).getState(); |