diff options
author | 2018-04-03 17:28:44 +0100 | |
---|---|---|
committer | 2018-04-03 17:28:44 +0100 | |
commit | 7b1f813441f94261f43ec4f5bb0944ad2570fbdf (patch) | |
tree | 7c5a2d1f378b2a0b358905e82d21cce73f3e1d6d /src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java | |
parent | 4dd316529148d07059d844197cdb676806bdc0c6 (diff) |
Revisions made to the Model Loader to use Babel
Change the Model Loader to use the Babel micro service.
Responsibility for transformation of ASDC TOSCA models,
the yaml files, has been moved from ASDC and placed into
the Bable microservice. Model Loader will forward any
CSAR received from ASDC and delegate transformation to
Babel. Babel will return the transformed TOSCA models
to Model Loader which will then ingest them into the
A&AI Inventory.
Issue-ID: AAI-987
Change-Id: I99594770b51b00cb7dcc0f30706060ae27cd94c5
Signed-off-by: Blackwell, Ian (ib733q) <IanB@amdocs.com>
Diffstat (limited to 'src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java')
-rw-r--r-- | src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerTest.java | 287 |
1 files changed, 287 insertions, 0 deletions
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<org.onap.aai.modelloader.entity.Artifact> modelFiles = new ArrayList<>(); + List<org.onap.aai.modelloader.entity.Artifact> 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<? extends Throwable> 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<org.onap.aai.modelloader.entity.Artifact> 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<BabelArtifact> createBabelArtifacts() { + List<BabelArtifact> 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<org.onap.aai.modelloader.entity.Artifact> modelFiles = new ArrayList<>(); + List<org.onap.aai.modelloader.entity.Artifact> 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<org.onap.aai.modelloader.entity.Artifact> 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); + } +} |