X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Forg%2Fonap%2Faai%2Fmodelloader%2Fnotification%2FArtifactDownloadManagerTest.java;fp=src%2Ftest%2Fjava%2Forg%2Fonap%2Faai%2Fmodelloader%2Fnotification%2FArtifactDownloadManagerTest.java;h=c4ba991a32b9102de5dd9646e2e8b38215aa4502;hb=7b1f813441f94261f43ec4f5bb0944ad2570fbdf;hp=0000000000000000000000000000000000000000;hpb=4dd316529148d07059d844197cdb676806bdc0c6;p=aai%2Fmodel-loader.git diff --git a/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java b/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java new file mode 100644 index 0000000..c4ba991 --- /dev/null +++ b/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java @@ -0,0 +1,287 @@ +/** + * ============LICENSE_START========================================== + * org.onap.aai + * =================================================================== + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 Amdocs + * =================================================================== + * 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.aai.modelloader.notification; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithInvalidType; +import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithModelQuerySpec; +import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithOneService; +import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithToscaCsarFile; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.onap.aai.babel.service.data.BabelArtifact; +import org.onap.aai.modelloader.config.ModelLoaderConfig; +import org.onap.aai.modelloader.entity.model.BabelArtifactParsingException; +import org.onap.aai.modelloader.restclient.BabelServiceClient; +import org.onap.aai.modelloader.restclient.BabelServiceClient.BabelServiceException; +import org.onap.aai.modelloader.util.ArtifactTestUtils; +import org.openecomp.sdc.api.IDistributionClient; +import org.openecomp.sdc.api.notification.IArtifactInfo; +import org.openecomp.sdc.api.notification.INotificationData; +import org.openecomp.sdc.api.results.IDistributionClientDownloadResult; +import org.openecomp.sdc.impl.DistributionClientDownloadResultImpl; +import org.openecomp.sdc.utils.DistributionActionResultEnum; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.reflect.Whitebox; + +/** + * Tests {@link ArtifactDownloadManager} + */ +@RunWith(PowerMockRunner.class) +@PowerMockIgnore({"sun.security.ssl.*", "javax.net.ssl.*"}) +@PrepareForTest({ArtifactDownloadManager.class}) +public class ArtifactDownloadManagerTest { + + private static final String FALSE_SHOULD_HAVE_BEEN_RETURNED = "A value of 'false' should have been returned"; + private static final String OOPS = "oops"; + private static final String TRUE_SHOULD_HAVE_BEEN_RETURNED = "A value of 'true' should have been returned"; + + private ArtifactDownloadManager downloadManager; + private BabelServiceClient mockBabelClient; + private IDistributionClient mockDistributionClient; + private NotificationPublisher mockNotificationPublisher; + private BabelArtifactConverter mockBabelArtifactConverter; + + @Before + public void setup() throws Exception { + mockBabelClient = PowerMockito.mock(BabelServiceClient.class); + mockDistributionClient = PowerMockito.mock(IDistributionClient.class); + mockNotificationPublisher = PowerMockito.mock(NotificationPublisher.class); + mockBabelArtifactConverter = PowerMockito.mock(BabelArtifactConverter.class); + + Properties configProperties = new Properties(); + configProperties.load(this.getClass().getClassLoader().getResourceAsStream("model-loader.properties")); + downloadManager = + new ArtifactDownloadManager(mockDistributionClient, new ModelLoaderConfig(configProperties, ".")); + + PowerMockito.whenNew(BabelServiceClient.class).withAnyArguments().thenReturn(mockBabelClient); + + Whitebox.setInternalState(downloadManager, mockNotificationPublisher); + Whitebox.setInternalState(downloadManager, mockBabelArtifactConverter); + } + + @After + public void tearDown() { + downloadManager = null; + mockDistributionClient = null; + mockNotificationPublisher = null; + } + + @Test + public void downloadArtifacts_emptyListSupplied() { + List modelFiles = new ArrayList<>(); + List catalogFiles = new ArrayList<>(); + + assertTrue(TRUE_SHOULD_HAVE_BEEN_RETURNED, downloadManager + .downloadArtifacts(getNotificationDataWithOneService(), new ArrayList<>(), modelFiles, catalogFiles)); + + Mockito.verifyZeroInteractions(mockBabelClient, mockDistributionClient, mockNotificationPublisher, + mockBabelArtifactConverter); + } + + @Test + public void downloadArtifacts_artifactDownloadFails() { + INotificationData data = getNotificationDataWithOneService(); + IArtifactInfo artifact = data.getServiceArtifacts().get(0); + PowerMockito.when(mockDistributionClient.download(artifact)) + .thenReturn(createDistributionClientDownloadResult(DistributionActionResultEnum.FAIL, OOPS, null)); + PowerMockito.doNothing().when(mockNotificationPublisher).publishDownloadFailure(mockDistributionClient, data, + artifact, OOPS); + + assertFalse(FALSE_SHOULD_HAVE_BEEN_RETURNED, + downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), null, null)); + + Mockito.verify(mockDistributionClient).download(artifact); + Mockito.verify(mockNotificationPublisher).publishDownloadFailure(mockDistributionClient, data, artifact, OOPS); + + Mockito.verifyZeroInteractions(mockBabelClient, mockBabelArtifactConverter); + } + + private IDistributionClientDownloadResult createDistributionClientDownloadResult( + DistributionActionResultEnum status, String message, byte[] payload) { + IDistributionClientDownloadResult downloadResult = new DistributionClientDownloadResultImpl(status, message); + + ((DistributionClientDownloadResultImpl) downloadResult).setArtifactPayload(payload); + + return downloadResult; + } + + @SuppressWarnings("unchecked") + private void doCreateBabelClientFailureTest(Class exception) throws Exception { + PowerMockito.whenNew(BabelServiceClient.class).withAnyArguments().thenThrow(exception); + + INotificationData data = getNotificationDataWithToscaCsarFile(); + IArtifactInfo artifactInfo = data.getServiceArtifacts().get(0); + setupValidDownloadCsarMocks(data, artifactInfo, new ArtifactTestUtils()); + PowerMockito.doNothing().when(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, + artifactInfo); + + assertFalse(FALSE_SHOULD_HAVE_BEEN_RETURNED, + downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), null, null)); + + Mockito.verify(mockDistributionClient).download(artifactInfo); + Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifactInfo); + Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifactInfo); + + Mockito.verifyZeroInteractions(mockBabelArtifactConverter); + } + + /** + * Test disabled as exception handling needs to be reworked + * + * @throws IOException + */ + @SuppressWarnings("unchecked") + @Test + public void downloadArtifacts_invalidToscaCsarFile() throws IOException, BabelServiceException { + INotificationData data = getNotificationDataWithToscaCsarFile(); + IArtifactInfo artifact = data.getServiceArtifacts().get(0); + PowerMockito.when(mockDistributionClient.download(artifact)).thenReturn(createDistributionClientDownloadResult( + DistributionActionResultEnum.SUCCESS, null, "This is not a valid Tosca CSAR File".getBytes())); + PowerMockito.doNothing().when(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, + artifact); + PowerMockito.when(mockBabelClient.postArtifact(Matchers.any(), Matchers.anyString(), Matchers.anyString(), + Matchers.anyString())).thenThrow(BabelServiceException.class); + PowerMockito.doNothing().when(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, + artifact); + + assertFalse(FALSE_SHOULD_HAVE_BEEN_RETURNED, + downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), null, null)); + + Mockito.verify(mockDistributionClient).download(artifact); + Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); + Mockito.verify(mockBabelClient).postArtifact(Matchers.any(), Matchers.anyString(), Matchers.anyString(), + Matchers.anyString()); + Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifact); + + Mockito.verifyZeroInteractions(mockBabelArtifactConverter); + + } + + @Test + public void downloadArtifacts_invalidModelQuerySpec() { + INotificationData data = getNotificationDataWithModelQuerySpec(); + IArtifactInfo artifact = data.getServiceArtifacts().get(0); + + List modelArtifacts = new ArrayList<>(); + + PowerMockito.when(mockDistributionClient.download(artifact)).thenReturn(createDistributionClientDownloadResult( + DistributionActionResultEnum.SUCCESS, null, "This is not a valid Model Query Spec".getBytes())); + PowerMockito.doNothing().when(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, + artifact); + + assertFalse(FALSE_SHOULD_HAVE_BEEN_RETURNED, + downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, null)); + + Mockito.verify(mockDistributionClient).download(artifact); + Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); + Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifact); + + Mockito.verifyZeroInteractions(mockBabelClient, mockBabelArtifactConverter); + } + + private void setupValidDownloadCsarMocks(INotificationData data, IArtifactInfo artifactInfo, + ArtifactTestUtils artifactTestUtils) throws IOException, BabelServiceException { + PowerMockito.when(mockDistributionClient.download(artifactInfo)) + .thenReturn(createDistributionClientDownloadResult(DistributionActionResultEnum.SUCCESS, null, + artifactTestUtils.loadResource("compressedArtifacts/service-VscpaasTest-csar.csar"))); + PowerMockito.doNothing().when(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, + artifactInfo); + PowerMockito.when(mockBabelClient.postArtifact(Matchers.any(), Matchers.anyString(), Matchers.anyString(), + Matchers.anyString())).thenReturn(createBabelArtifacts()); + } + + private List createBabelArtifacts() { + List artifactList = new ArrayList<>(); + artifactList.add(new BabelArtifact("ModelArtifact", BabelArtifact.ArtifactType.MODEL, "Some model payload")); + artifactList.add(new BabelArtifact("VNFCArtifact", BabelArtifact.ArtifactType.VNFCATALOG, "Some VNFC payload")); + return artifactList; + } + + @Test + public void downloadArtifacts_validModelQuerySpec() + throws IOException, BabelServiceException, BabelArtifactParsingException { + ArtifactTestUtils artifactTestUtils = new ArtifactTestUtils(); + INotificationData data = getNotificationDataWithModelQuerySpec(); + IArtifactInfo artifact = data.getServiceArtifacts().get(0); + setupValidModelQuerySpecMocks(artifactTestUtils, data, artifact); + + List modelFiles = new ArrayList<>(); + List catalogFiles = new ArrayList<>(); + assertTrue(TRUE_SHOULD_HAVE_BEEN_RETURNED, + downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelFiles, catalogFiles)); + + assertTrue("There should have been some model artifacts", !modelFiles.isEmpty()); + assertTrue("There should not have been any catalog artifacts", catalogFiles.isEmpty()); + + Mockito.verify(mockDistributionClient).download(artifact); + Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); + + Mockito.verifyZeroInteractions(mockBabelClient, mockBabelArtifactConverter); + } + + private void setupValidModelQuerySpecMocks(ArtifactTestUtils artifactTestUtils, INotificationData data, + IArtifactInfo artifact) throws IOException { + PowerMockito.when(mockDistributionClient.download(artifact)) + .thenReturn(createDistributionClientDownloadResult(DistributionActionResultEnum.SUCCESS, null, + artifactTestUtils.loadResource("models/named-query-wan-connector.xml"))); + PowerMockito.doNothing().when(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, + artifact); + } + + + + @Test + public void downloadArtifacts_invalidType() + throws IOException, BabelServiceException, BabelArtifactParsingException { + INotificationData data = getNotificationDataWithInvalidType(); + IArtifactInfo artifact = data.getServiceArtifacts().get(0); + + List catalogArtifacts = new ArrayList<>(); + + PowerMockito.when(mockDistributionClient.download(artifact)).thenReturn(createDistributionClientDownloadResult( + DistributionActionResultEnum.SUCCESS, null, "This content does not matter.".getBytes())); + PowerMockito.doNothing().when(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, + artifact); + + assertFalse(FALSE_SHOULD_HAVE_BEEN_RETURNED, + downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), null, catalogArtifacts)); + + Mockito.verify(mockDistributionClient).download(artifact); + Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); + Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifact); + + Mockito.verifyZeroInteractions(mockBabelClient, mockBabelArtifactConverter); + } +}