diff options
Diffstat (limited to 'asdc-controller/src/test/java/org/openecomp/mso/asdc/client/tests/ASDCControllerTest.java')
-rw-r--r-- | asdc-controller/src/test/java/org/openecomp/mso/asdc/client/tests/ASDCControllerTest.java | 628 |
1 files changed, 315 insertions, 313 deletions
diff --git a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/tests/ASDCControllerTest.java b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/tests/ASDCControllerTest.java index bb869bb324..5026b51bd1 100644 --- a/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/tests/ASDCControllerTest.java +++ b/asdc-controller/src/test/java/org/openecomp/mso/asdc/client/tests/ASDCControllerTest.java @@ -25,7 +25,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; - import java.io.IOException; import java.lang.reflect.Field; import java.net.URISyntaxException; @@ -64,347 +63,350 @@ import org.openecomp.mso.properties.MsoPropertiesException; import org.openecomp.mso.properties.MsoPropertiesFactory; + /** * THis class tests the ASDC Controller by using the ASDC Mock CLient + * + * */ public class ASDCControllerTest { - private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory(); - - private static String heatExample; - private static String heatExampleMD5HashBase64; - - private static INotificationData iNotif; - - private static IDistributionClientDownloadResult downloadResult; - private static IDistributionClientDownloadResult downloadCorruptedResult; - - private static IDistributionClientResult successfulClientInitResult; - private static IDistributionClientResult unsuccessfulClientInitResult; - - private static IArtifactInfo artifactInfo1; - - private static IResourceInstance resource1; - - private static VfResourceInstaller vnfInstaller; - - public static final String ASDC_PROP = MsoJavaProperties.class.getClassLoader().getResource("mso.json").toString().substring(5); - public static final String ASDC_PROP2 = MsoJavaProperties.class.getClassLoader().getResource("mso2.json").toString().substring(5); - public static final String ASDC_PROP3 = MsoJavaProperties.class.getClassLoader().getResource("mso3.json").toString().substring(5); - public static final String ASDC_PROP_BAD = MsoJavaProperties.class.getClassLoader().getResource("mso-bad.json").toString().substring(5); - public static final String ASDC_PROP_WITH_NULL = MsoJavaProperties.class.getClassLoader().getResource("mso-with-NULL.json").toString().substring(5); - - @BeforeClass - public static final void prepareMockNotification() throws MsoPropertiesException, IOException, URISyntaxException, NoSuchAlgorithmException, ArtifactInstallerException { - - heatExample = new String(Files.readAllBytes(Paths.get(ASDCControllerTest.class.getClassLoader().getResource("resource-examples/autoscaling.yaml").toURI()))); - MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] md5Hash = md.digest(heatExample.getBytes()); - heatExampleMD5HashBase64 = Base64.encodeBase64String(md5Hash); - - iNotif = Mockito.mock(INotificationData.class); - - // Create fake ArtifactInfo - artifactInfo1 = Mockito.mock(IArtifactInfo.class); - Mockito.when(artifactInfo1.getArtifactChecksum()).thenReturn(ASDCControllerTest.heatExampleMD5HashBase64); - - Mockito.when(artifactInfo1.getArtifactName()).thenReturn("artifact1"); - Mockito.when(artifactInfo1.getArtifactType()).thenReturn(ASDCConfiguration.HEAT); - Mockito.when(artifactInfo1.getArtifactURL()).thenReturn("https://localhost:8080/v1/catalog/services/srv1/2.0/resources/aaa/1.0/artifacts/aaa.yml"); - Mockito.when(artifactInfo1.getArtifactUUID()).thenReturn("UUID1"); - Mockito.when(artifactInfo1.getArtifactDescription()).thenReturn("testos artifact1"); - - // Now provision the NotificationData mock - List<IArtifactInfo> listArtifact = new ArrayList<>(); - listArtifact.add(artifactInfo1); - - // Create fake resource Instance - resource1 = Mockito.mock(IResourceInstance.class); - Mockito.when(resource1.getResourceType()).thenReturn("VF"); - Mockito.when(resource1.getResourceName()).thenReturn("resourceName"); - Mockito.when(resource1.getArtifacts()).thenReturn(listArtifact); - - List<IResourceInstance> resources = new ArrayList<>(); - resources.add(resource1); - - Mockito.when(iNotif.getResources()).thenReturn(resources); - Mockito.when(iNotif.getDistributionID()).thenReturn("distributionID1"); - Mockito.when(iNotif.getServiceName()).thenReturn("serviceName1"); - Mockito.when(iNotif.getServiceUUID()).thenReturn("serviceNameUUID1"); - Mockito.when(iNotif.getServiceVersion()).thenReturn("1.0"); - - downloadResult = Mockito.mock(IDistributionClientDownloadResult.class); - Mockito.when(downloadResult.getArtifactPayload()).thenReturn(heatExample.getBytes()); - Mockito.when(downloadResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS); - Mockito.when(downloadResult.getDistributionMessageResult()).thenReturn("Success"); - - downloadCorruptedResult = Mockito.mock(IDistributionClientDownloadResult.class); - Mockito.when(downloadCorruptedResult.getArtifactPayload()).thenReturn((heatExample + "badone").getBytes()); - Mockito.when(downloadCorruptedResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS); - Mockito.when(downloadCorruptedResult.getDistributionMessageResult()).thenReturn("Success"); - - vnfInstaller = Mockito.mock(VfResourceInstaller.class); - - // Mock now the ASDC distribution client behavior - successfulClientInitResult = Mockito.mock(IDistributionClientResult.class); - Mockito.when(successfulClientInitResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS); - - unsuccessfulClientInitResult = Mockito.mock(IDistributionClientResult.class); - Mockito.when(unsuccessfulClientInitResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.GENERAL_ERROR); - - } - - @Before - public final void initBeforeEachTest() throws MsoPropertiesException { - // load the config - msoPropertiesFactory.removeAllMsoProperties(); - msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP); - } - - @AfterClass - public static final void kill() throws MsoPropertiesException { - - msoPropertiesFactory.removeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC); - - } - - @Test - public final void testTheInitWithASDCStub() throws ASDCControllerException, ASDCParametersException, IOException { - - ASDCController asdcController = new ASDCController("asdc-controller1", new DistributionClientStubImpl()); - asdcController.initASDC(); - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); - assertTrue(asdcController.getNbOfNotificationsOngoing() == 0); - } - - @Test - public final void testTheNotificationWithASDCStub() throws ASDCControllerException, ASDCParametersException, IOException { - - ASDCController asdcController = new ASDCController("asdc-controller1", new DistributionClientStubImpl(), vnfInstaller); - asdcController.initASDC(); - // try to send a notif, this should fail internally, we just want to ensure that in case of crash, controller status goes to IDLE - asdcController.treatNotification(iNotif); - - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); - assertTrue(asdcController.getNbOfNotificationsOngoing() == 0); - - } - - @Test - public final void testASecondInit() throws ASDCControllerException, ASDCParametersException, IOException { - ASDCController asdcController = new ASDCController("asdc-controller1", new DistributionClientStubImpl(), vnfInstaller); - asdcController.initASDC(); - // try to send a notif, this should fail internally, we just want to ensure that in case of crash, controller status goes to IDLE - - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); - assertTrue(asdcController.getNbOfNotificationsOngoing() == 0); - - try { - asdcController.initASDC(); - fail("ASDCControllerException should have been raised for the init"); - } catch (ASDCControllerException e) { - assertTrue("The controller is already initialized, call the closeASDC method first".equals(e.getMessage())); - } - - // No changes expected on the controller state - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); - assertTrue(asdcController.getNbOfNotificationsOngoing() == 0); - } - - @Test - public final void testInitCrashWithMockitoClient() throws ASDCParametersException, IOException { - - IDistributionClient distributionClient; - // First case for init method - distributionClient = Mockito.mock(IDistributionClient.class); - Mockito.when(distributionClient.download(artifactInfo1)).thenThrow(new RuntimeException("ASDC Client not initialized")); - Mockito.when(distributionClient.init(any(ASDCConfiguration.class), any(INotificationCallback.class))).thenReturn(unsuccessfulClientInitResult); - Mockito.when(distributionClient.start()).thenReturn(unsuccessfulClientInitResult); - - ASDCController asdcController = new ASDCController("asdc-controller1", distributionClient, vnfInstaller); - - // This should return an exception - try { - asdcController.initASDC(); - fail("ASDCControllerException should have been raised for the init"); - } catch (ASDCControllerException e) { - assertTrue("Initialization of the ASDC Controller failed with reason: null".equals(e.getMessage())); - } - - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED); - assertTrue(asdcController.getNbOfNotificationsOngoing() == 0); - - // Second case for start method - - Mockito.when(distributionClient.init(any(ASDCConfiguration.class), any(INotificationCallback.class))).thenReturn(successfulClientInitResult); - Mockito.when(distributionClient.start()).thenReturn(unsuccessfulClientInitResult); - - // This should return an exception - try { - asdcController.initASDC(); - fail("ASDCControllerException should have been raised for the init"); - } catch (ASDCControllerException e) { - assertTrue("Startup of the ASDC Controller failed with reason: null".equals(e.getMessage())); - } - - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED); - assertTrue(asdcController.getNbOfNotificationsOngoing() == 0); - } - - @Test - public final void testTheStop() throws ASDCControllerException, ASDCParametersException, IOException { - - ASDCController asdcController = new ASDCController("asdc-controller1", new DistributionClientStubImpl(), vnfInstaller); - - asdcController.closeASDC(); - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED); - - - asdcController = new ASDCController("asdc-controller1", new DistributionClientStubImpl(), vnfInstaller); - asdcController.initASDC(); - asdcController.closeASDC(); - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED); - } - - @Test - public final void testConfigRefresh() throws ASDCParametersException, ASDCControllerException, IOException, MsoPropertiesException { - IDistributionClient distributionClient; - distributionClient = Mockito.mock(IDistributionClient.class); - Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult); - Mockito.when(distributionClient.init(any(ASDCConfiguration.class), any(INotificationCallback.class))).thenReturn(successfulClientInitResult); - Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult); - - - ASDCController asdcController = new ASDCController("asdc-controller1", distributionClient, vnfInstaller); - - // it should not raise any exception even if controller is not yet initialized - asdcController.updateConfigIfNeeded(); - - asdcController.initASDC(); - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); - assertFalse(asdcController.updateConfigIfNeeded()); - - msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP3); - msoPropertiesFactory.reloadMsoProperties(); - // It should fail if it tries to refresh the config as the init will now fail - assertTrue(asdcController.updateConfigIfNeeded()); - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); - - - msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP); - msoPropertiesFactory.reloadMsoProperties(); - } - - @Test - public final void testConfigRefreshWhenBusy() throws IOException, MsoPropertiesException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, ASDCParametersException, ASDCControllerException { - IDistributionClient distributionClient; - distributionClient = Mockito.mock(IDistributionClient.class); - Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult); - Mockito.when(distributionClient.init(any(ASDCConfiguration.class), any(INotificationCallback.class))).thenReturn(successfulClientInitResult); - Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult); - - ASDCController asdcController = new ASDCController("asdc-controller1", distributionClient, vnfInstaller); - - // it should not raise any exception even if controller is not yet initialized - asdcController.updateConfigIfNeeded(); + private static MsoPropertiesFactory msoPropertiesFactory = new MsoPropertiesFactory(); - asdcController.initASDC(); - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); - assertFalse(asdcController.updateConfigIfNeeded()); + private static String heatExample; + private static String heatExampleMD5HashBase64; - // Simulate a BUSY case by reflection - Field controllerStatus; - controllerStatus = ASDCController.class.getDeclaredField("controllerStatus"); - controllerStatus.setAccessible(true); - controllerStatus.set(asdcController, ASDCControllerStatus.BUSY); + private static INotificationData iNotif; + private static IDistributionClientDownloadResult downloadResult; + private static IDistributionClientDownloadResult downloadCorruptedResult; - msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP3); - msoPropertiesFactory.reloadMsoProperties(); - // It should fail if it tries to refresh the config as the init will now fail - try { - asdcController.updateConfigIfNeeded(); - fail("ASDCControllerException should have been raised"); - } catch (ASDCControllerException e) { - assertTrue("Cannot close the ASDC controller as it's currently in BUSY state".equals(e.getMessage())); - } + private static IDistributionClientResult successfulClientInitResult; + private static IDistributionClientResult unsuccessfulClientInitResult; - // Try it a second time to see if we still see the changes - try { - asdcController.updateConfigIfNeeded(); - fail("ASDCControllerException should have been raised"); - } catch (ASDCControllerException e) { - assertTrue("Cannot close the ASDC controller as it's currently in BUSY state".equals(e.getMessage())); - } + private static IArtifactInfo artifactInfo1; - // Revert to Idle by reflection - controllerStatus.set(asdcController, ASDCControllerStatus.IDLE); - controllerStatus.setAccessible(false); + private static IResourceInstance resource1; - // This should work now, controller should be restarted - assertTrue(asdcController.updateConfigIfNeeded()); - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); + private static VfResourceInstaller vnfInstaller; + + public static final String ASDC_PROP = MsoJavaProperties.class.getClassLoader().getResource("mso.json").toString().substring(5); + public static final String ASDC_PROP2 = MsoJavaProperties.class.getClassLoader().getResource("mso2.json").toString().substring(5); + public static final String ASDC_PROP3 = MsoJavaProperties.class.getClassLoader().getResource("mso3.json").toString().substring(5); + public static final String ASDC_PROP_BAD = MsoJavaProperties.class.getClassLoader().getResource("mso-bad.json").toString().substring(5); + public static final String ASDC_PROP_WITH_NULL = MsoJavaProperties.class.getClassLoader().getResource("mso-with-NULL.json").toString().substring(5); - msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP); - msoPropertiesFactory.reloadMsoProperties(); - } + @BeforeClass + public static final void prepareMockNotification() throws MsoPropertiesException, IOException, URISyntaxException, NoSuchAlgorithmException, ArtifactInstallerException { + heatExample = new String(Files.readAllBytes(Paths.get(ASDCControllerTest.class.getClassLoader().getResource("resource-examples/autoscaling.yaml").toURI()))); + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] md5Hash = md.digest(heatExample.getBytes()); + heatExampleMD5HashBase64 = Base64.encodeBase64String(md5Hash); - @Test - public final void testBadConfigRefresh() throws ASDCParametersException, ASDCControllerException, IOException, MsoPropertiesException { - IDistributionClient distributionClient; - distributionClient = Mockito.mock(IDistributionClient.class); - Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult); - Mockito.when(distributionClient.init(any(ASDCConfiguration.class), any(INotificationCallback.class))).thenReturn(successfulClientInitResult); - Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult); + iNotif= Mockito.mock(INotificationData.class); + // Create fake ArtifactInfo + artifactInfo1 = Mockito.mock(IArtifactInfo.class); + Mockito.when(artifactInfo1.getArtifactChecksum()).thenReturn(ASDCControllerTest.heatExampleMD5HashBase64); - ASDCController asdcController = new ASDCController("asdc-controller1", distributionClient, vnfInstaller); + Mockito.when(artifactInfo1.getArtifactName()).thenReturn("artifact1"); + Mockito.when(artifactInfo1.getArtifactType()).thenReturn(ASDCConfiguration.HEAT); + Mockito.when(artifactInfo1.getArtifactURL()).thenReturn("https://localhost:8080/v1/catalog/services/srv1/2.0/resources/aaa/1.0/artifacts/aaa.yml"); + Mockito.when(artifactInfo1.getArtifactUUID()).thenReturn("UUID1"); + Mockito.when(artifactInfo1.getArtifactDescription()).thenReturn("testos artifact1"); - // it should not raise any exception even if controller is not yet initialized - asdcController.updateConfigIfNeeded(); + // Now provision the NotificationData mock + List<IArtifactInfo> listArtifact = new ArrayList<>(); + listArtifact.add(artifactInfo1); - asdcController.initASDC(); - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.IDLE); - assertFalse(asdcController.updateConfigIfNeeded()); + // Create fake resource Instance + resource1 = Mockito.mock (IResourceInstance.class); + Mockito.when (resource1.getResourceType ()).thenReturn ("VF"); + Mockito.when (resource1.getResourceName ()).thenReturn ("resourceName"); + Mockito.when (resource1.getArtifacts ()).thenReturn (listArtifact); - msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP_BAD); - msoPropertiesFactory.reloadMsoProperties(); - // It should fail if it tries to refresh the config as the init will now fail - try { - asdcController.updateConfigIfNeeded(); - fail("ASDCParametersException should have been raised"); - } catch (ASDCParametersException ep) { - assertTrue("consumerGroup parameter cannot be found in config mso.properties".equals(ep.getMessage())); - } + List<IResourceInstance> resources = new ArrayList<> (); + resources.add (resource1); - // This should stop the controller, as it can't work with a bad config file - assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED); + Mockito.when(iNotif.getResources()).thenReturn(resources); + Mockito.when(iNotif.getDistributionID()).thenReturn("distributionID1"); + Mockito.when(iNotif.getServiceName()).thenReturn("serviceName1"); + Mockito.when(iNotif.getServiceUUID()).thenReturn("serviceNameUUID1"); + Mockito.when(iNotif.getServiceVersion()).thenReturn("1.0"); + + downloadResult = Mockito.mock(IDistributionClientDownloadResult.class); + Mockito.when(downloadResult.getArtifactPayload()).thenReturn(heatExample.getBytes()); + Mockito.when(downloadResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS); + Mockito.when(downloadResult.getDistributionMessageResult()).thenReturn("Success"); + downloadCorruptedResult = Mockito.mock(IDistributionClientDownloadResult.class); + Mockito.when(downloadCorruptedResult.getArtifactPayload()).thenReturn((heatExample+"badone").getBytes()); + Mockito.when(downloadCorruptedResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS); + Mockito.when(downloadCorruptedResult.getDistributionMessageResult()).thenReturn("Success"); - msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP); - msoPropertiesFactory.reloadMsoProperties(); - } + vnfInstaller = Mockito.mock(VfResourceInstaller.class); + + // Mock now the ASDC distribution client behavior + successfulClientInitResult = Mockito.mock(IDistributionClientResult.class); + Mockito.when(successfulClientInitResult.getDistributionActionResult ()).thenReturn(DistributionActionResultEnum.SUCCESS); + + unsuccessfulClientInitResult = Mockito.mock(IDistributionClientResult.class); + Mockito.when(unsuccessfulClientInitResult.getDistributionActionResult ()).thenReturn(DistributionActionResultEnum.GENERAL_ERROR); + + } + + @Before + public final void initBeforeEachTest() throws MsoPropertiesException { + // load the config + msoPropertiesFactory.removeAllMsoProperties(); + msoPropertiesFactory.initializeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP); + } - @Test - public final void testConfigAccess() throws ASDCControllerException, ASDCParametersException, IOException { - IDistributionClient distributionClient; - distributionClient = Mockito.mock(IDistributionClient.class); - Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult); - Mockito.when(distributionClient.init(any(ASDCConfiguration.class), any(INotificationCallback.class))).thenReturn(successfulClientInitResult); - Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult); + @AfterClass + public static final void kill () throws MsoPropertiesException { + msoPropertiesFactory.removeMsoProperties(ASDCConfiguration.MSO_PROP_ASDC); - ASDCController asdcController = new ASDCController("asdc-controller1", distributionClient, vnfInstaller); + } - assertTrue("Unknown".equals(asdcController.getAddress())); - assertTrue("Unknown".equals(asdcController.getEnvironment())); + @Test + public final void testTheInitWithASDCStub() throws ASDCControllerException, ASDCParametersException, IOException { + + ASDCController asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl()); + asdcController.initASDC(); + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + assertTrue(asdcController.getNbOfNotificationsOngoing()== 0); + } + + @Test + public final void testTheNotificationWithASDCStub() throws ASDCControllerException, ASDCParametersException, IOException { + + ASDCController asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl(),vnfInstaller); + asdcController.initASDC(); + // try to send a notif, this should fail internally, we just want to ensure that in case of crash, controller status goes to IDLE + asdcController.treatNotification(iNotif); + + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + assertTrue(asdcController.getNbOfNotificationsOngoing()== 0); + + } + + @Test + public final void testASecondInit() throws ASDCControllerException, ASDCParametersException, IOException { + ASDCController asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl(),vnfInstaller); + asdcController.initASDC(); + // try to send a notif, this should fail internally, we just want to ensure that in case of crash, controller status goes to IDLE + + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + assertTrue(asdcController.getNbOfNotificationsOngoing()== 0); + + try { + asdcController.initASDC(); + fail("ASDCControllerException should have been raised for the init"); + } catch (ASDCControllerException e) { + assertTrue("The controller is already initialized, call the closeASDC method first".equals(e.getMessage())); + } + + // No changes expected on the controller state + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + assertTrue(asdcController.getNbOfNotificationsOngoing()== 0); + } + + @Test + public final void testInitCrashWithMockitoClient() throws ASDCParametersException, IOException { + + IDistributionClient distributionClient; + // First case for init method + distributionClient = Mockito.mock(IDistributionClient.class); + Mockito.when(distributionClient.download(artifactInfo1)).thenThrow(new RuntimeException("ASDC Client not initialized")); + Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(unsuccessfulClientInitResult); + Mockito.when(distributionClient.start()).thenReturn(unsuccessfulClientInitResult); + + ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller); + + // This should return an exception + try { + asdcController.initASDC(); + fail("ASDCControllerException should have been raised for the init"); + } catch (ASDCControllerException e) { + assertTrue("Initialization of the ASDC Controller failed with reason: null".equals(e.getMessage())); + } + + assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED); + assertTrue(asdcController.getNbOfNotificationsOngoing()== 0); + + // Second case for start method + + Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult); + Mockito.when(distributionClient.start()).thenReturn(unsuccessfulClientInitResult); + + // This should return an exception + try { + asdcController.initASDC(); + fail("ASDCControllerException should have been raised for the init"); + } catch (ASDCControllerException e) { + assertTrue("Startup of the ASDC Controller failed with reason: null".equals(e.getMessage())); + } + + assertTrue(asdcController.getControllerStatus() == ASDCControllerStatus.STOPPED); + assertTrue(asdcController.getNbOfNotificationsOngoing()== 0); + } + + @Test + public final void testTheStop() throws ASDCControllerException, ASDCParametersException, IOException { + + ASDCController asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl(),vnfInstaller); + + asdcController.closeASDC(); + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.STOPPED); - asdcController.initASDC(); - assertTrue("hostname".equals(asdcController.getAddress())); - assertTrue("environmentName".equals(asdcController.getEnvironment())); + asdcController = new ASDCController("asdc-controller1",new DistributionClientStubImpl(),vnfInstaller); + asdcController.initASDC(); + asdcController.closeASDC(); + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.STOPPED); + } - } + @Test + public final void testConfigRefresh () throws ASDCParametersException, ASDCControllerException, IOException, MsoPropertiesException { + IDistributionClient distributionClient; + distributionClient = Mockito.mock(IDistributionClient.class); + Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult); + Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult); + Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult); + + + ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller); + + // it should not raise any exception even if controller is not yet initialized + asdcController.updateConfigIfNeeded(); + + asdcController.initASDC(); + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + assertFalse(asdcController.updateConfigIfNeeded()); + + msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP3); + msoPropertiesFactory.reloadMsoProperties(); + // It should fail if it tries to refresh the config as the init will now fail + assertTrue(asdcController.updateConfigIfNeeded()); + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + + + msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP); + msoPropertiesFactory.reloadMsoProperties(); + } + + @Test + public final void testConfigRefreshWhenBusy () throws IOException, MsoPropertiesException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, ASDCParametersException, ASDCControllerException { + IDistributionClient distributionClient; + distributionClient = Mockito.mock(IDistributionClient.class); + Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult); + Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult); + Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult); + + ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller); + + // it should not raise any exception even if controller is not yet initialized + asdcController.updateConfigIfNeeded(); + + asdcController.initASDC(); + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + assertFalse(asdcController.updateConfigIfNeeded()); + + // Simulate a BUSY case by reflection + Field controllerStatus; + controllerStatus = ASDCController.class.getDeclaredField("controllerStatus"); + controllerStatus.setAccessible(true); + controllerStatus.set(asdcController,ASDCControllerStatus.BUSY); + + + msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP3); + msoPropertiesFactory.reloadMsoProperties(); + // It should fail if it tries to refresh the config as the init will now fail + try { + asdcController.updateConfigIfNeeded(); + fail ("ASDCControllerException should have been raised"); + } catch (ASDCControllerException e) { + assertTrue("Cannot close the ASDC controller as it's currently in BUSY state".equals(e.getMessage())); + } + + // Try it a second time to see if we still see the changes + try { + asdcController.updateConfigIfNeeded(); + fail ("ASDCControllerException should have been raised"); + } catch (ASDCControllerException e) { + assertTrue("Cannot close the ASDC controller as it's currently in BUSY state".equals(e.getMessage())); + } + + // Revert to Idle by reflection + controllerStatus.set(asdcController,ASDCControllerStatus.IDLE); + controllerStatus.setAccessible(false); + + // This should work now, controller should be restarted + assertTrue(asdcController.updateConfigIfNeeded()); + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + + msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP); + msoPropertiesFactory.reloadMsoProperties(); + } + + + @Test + public final void testBadConfigRefresh () throws ASDCParametersException, ASDCControllerException, IOException, MsoPropertiesException { + IDistributionClient distributionClient; + distributionClient = Mockito.mock(IDistributionClient.class); + Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult); + Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult); + Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult); + + + ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller); + + // it should not raise any exception even if controller is not yet initialized + asdcController.updateConfigIfNeeded(); + + asdcController.initASDC(); + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.IDLE); + assertFalse(asdcController.updateConfigIfNeeded()); + + msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP_BAD); + msoPropertiesFactory.reloadMsoProperties(); + // It should fail if it tries to refresh the config as the init will now fail + try { + asdcController.updateConfigIfNeeded(); + fail ("ASDCParametersException should have been raised"); + } catch (ASDCParametersException ep) { + assertTrue("consumerGroup parameter cannot be found in config mso.properties".equals(ep.getMessage())); + } + + // This should stop the controller, as it can't work with a bad config file + assertTrue(asdcController.getControllerStatus()== ASDCControllerStatus.STOPPED); + + + msoPropertiesFactory.changeMsoPropertiesFilePath(ASDCConfiguration.MSO_PROP_ASDC, ASDC_PROP); + msoPropertiesFactory.reloadMsoProperties(); + } + + @Test + public final void testConfigAccess () throws ASDCControllerException, ASDCParametersException, IOException { + IDistributionClient distributionClient; + distributionClient = Mockito.mock(IDistributionClient.class); + Mockito.when(distributionClient.download(artifactInfo1)).thenReturn(downloadResult); + Mockito.when(distributionClient.init(any(ASDCConfiguration.class),any(INotificationCallback.class))).thenReturn(successfulClientInitResult); + Mockito.when(distributionClient.start()).thenReturn(successfulClientInitResult); + + + ASDCController asdcController = new ASDCController("asdc-controller1",distributionClient,vnfInstaller); + + assertTrue("Unknown".equals(asdcController.getAddress())); + assertTrue("Unknown".equals(asdcController.getEnvironment())); + + asdcController.initASDC(); + + assertTrue("hostname".equals(asdcController.getAddress())); + assertTrue("environmentName".equals(asdcController.getEnvironment())); + + } } |