X-Git-Url: https://gerrit.onap.org/r/gitweb?p=aai%2Fmodel-loader.git;a=blobdiff_plain;f=src%2Ftest%2Fjava%2Forg%2Fonap%2Faai%2Fmodelloader%2Fnotification%2FTestArtifactDownloadManager.java;h=3d1cf1592146ff3f75e5c158e52b17117177926f;hp=f8b3de9ca0a44f8f113e1b0dc90d3eeb44ffc13c;hb=HEAD;hpb=50889fa7107127868a9a4391218772ff58d0ac2e diff --git a/src/test/java/org/onap/aai/modelloader/notification/TestArtifactDownloadManager.java b/src/test/java/org/onap/aai/modelloader/notification/TestArtifactDownloadManager.java index f8b3de9..79eb94d 100644 --- a/src/test/java/org/onap/aai/modelloader/notification/TestArtifactDownloadManager.java +++ b/src/test/java/org/onap/aai/modelloader/notification/TestArtifactDownloadManager.java @@ -21,13 +21,11 @@ package org.onap.aai.modelloader.notification; import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsEmptyCollection.empty; -import static org.junit.Assert.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithInvalidType; import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithModelQuerySpec; @@ -39,19 +37,26 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Properties; -import org.hamcrest.collection.IsEmptyCollection; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; import org.onap.aai.babel.service.data.BabelArtifact; -import org.onap.aai.modelloader.config.ModelLoaderConfig; +import org.onap.aai.modelloader.babel.BabelArtifactService; import org.onap.aai.modelloader.entity.Artifact; +import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifact; import org.onap.aai.modelloader.entity.model.BabelArtifactParsingException; +import org.onap.aai.modelloader.entity.model.ModelArtifact; +import org.onap.aai.modelloader.entity.model.NamedQueryArtifact; +import org.onap.aai.modelloader.extraction.InvalidArchiveException; +import org.onap.aai.modelloader.extraction.VnfCatalogExtractor; import org.onap.aai.modelloader.restclient.BabelServiceClient; import org.onap.aai.modelloader.restclient.BabelServiceClientException; -import org.onap.aai.modelloader.service.BabelServiceClientFactory; -import org.onap.aai.modelloader.service.HttpsBabelServiceClientFactory; import org.onap.aai.modelloader.util.ArtifactTestUtils; import org.onap.sdc.api.IDistributionClient; import org.onap.sdc.api.notification.IArtifactInfo; @@ -59,7 +64,6 @@ import org.onap.sdc.api.notification.INotificationData; import org.onap.sdc.api.results.IDistributionClientDownloadResult; import org.onap.sdc.impl.DistributionClientDownloadResultImpl; import org.onap.sdc.utils.DistributionActionResultEnum; -import org.springframework.test.util.ReflectionTestUtils; /** * Tests {@link ArtifactDownloadManager}. @@ -67,31 +71,25 @@ import org.springframework.test.util.ReflectionTestUtils; public class TestArtifactDownloadManager { private ArtifactDownloadManager downloadManager; - private BabelServiceClient mockBabelClient; - private IDistributionClient mockDistributionClient; - private NotificationPublisher mockNotificationPublisher; - private BabelArtifactConverter mockBabelArtifactConverter; - private BabelServiceClientFactory mockClientFactory; - - @Before + @Mock private BabelServiceClient mockBabelClient; + @Mock private IDistributionClient mockDistributionClient; + @Mock private NotificationPublisher mockNotificationPublisher; + @Mock private BabelArtifactConverter mockBabelArtifactConverter; + @InjectMocks BabelArtifactService babelArtifactService; + private VnfCatalogExtractor vnfCatalogExtractor; + + @BeforeEach public void setup() throws Exception { - mockBabelClient = mock(BabelServiceClient.class); - mockDistributionClient = mock(IDistributionClient.class); - mockNotificationPublisher = mock(NotificationPublisher.class); - mockBabelArtifactConverter = mock(BabelArtifactConverter.class); - mockClientFactory = mock(HttpsBabelServiceClientFactory.class); - when(mockClientFactory.create(any())).thenReturn(mockBabelClient); + MockitoAnnotations.openMocks(this); + vnfCatalogExtractor = new VnfCatalogExtractor(); Properties configProperties = new Properties(); configProperties.load(this.getClass().getClassLoader().getResourceAsStream("model-loader.properties")); downloadManager = new ArtifactDownloadManager(mockDistributionClient, - new ModelLoaderConfig(configProperties, "."), mockClientFactory); - - ReflectionTestUtils.setField(downloadManager, "notificationPublisher", mockNotificationPublisher); - ReflectionTestUtils.setField(downloadManager, "babelArtifactConverter", mockBabelArtifactConverter); + mockNotificationPublisher, vnfCatalogExtractor, babelArtifactService); } - @After + @AfterEach public void tearDown() { downloadManager = null; mockDistributionClient = null; @@ -100,16 +98,13 @@ public class TestArtifactDownloadManager { /** * Test downloading zero artifacts from SDC. + * @throws Exception */ @Test - public void testDownloadWithZeroArtifacts() { - List modelFiles = new ArrayList<>(); - List catalogFiles = new ArrayList<>(); - assertThat(downloadManager.downloadArtifacts(getNotificationDataWithOneService(), new ArrayList<>(), modelFiles, - catalogFiles), is(true)); - assertThat(modelFiles, is(empty())); - assertThat(catalogFiles, is(empty())); - Mockito.verifyZeroInteractions(mockBabelClient, mockDistributionClient, mockNotificationPublisher, + public void testDownloadWithZeroArtifacts() throws Exception { + List artifacts = downloadManager.downloadArtifacts(getNotificationDataWithOneService(), new ArrayList<>()); + assertThat(artifacts, is(empty())); + Mockito.verifyNoInteractions(mockBabelClient, mockDistributionClient, mockNotificationPublisher, mockBabelArtifactConverter); } @@ -123,31 +118,14 @@ public class TestArtifactDownloadManager { doNothing().when(mockNotificationPublisher).publishDownloadFailure(mockDistributionClient, data, artifact, errorMessage); - assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), null, null), is(false)); + assertThrows(DownloadFailureException.class, + () -> downloadManager.downloadArtifacts(data, data.getServiceArtifacts())); Mockito.verify(mockDistributionClient).download(artifact); Mockito.verify(mockNotificationPublisher).publishDownloadFailure(mockDistributionClient, data, artifact, errorMessage); - Mockito.verifyZeroInteractions(mockBabelClient, mockBabelArtifactConverter); - } - - @Test - public void testErrorCreatingBabelClient() throws Exception { - when(mockClientFactory.create(any())).thenThrow(new BabelServiceClientException(new Exception())); - - INotificationData data = getNotificationDataWithToscaCsarFile(); - IArtifactInfo artifactInfo = data.getServiceArtifacts().get(0); - setupValidDownloadCsarMocks(data, artifactInfo, new ArtifactTestUtils()); - doNothing().when(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifactInfo); - - assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), null, null), is(false)); - - Mockito.verify(mockDistributionClient).download(artifactInfo); - Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifactInfo); - Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifactInfo); - - Mockito.verifyZeroInteractions(mockBabelArtifactConverter); + Mockito.verifyNoInteractions(mockBabelClient, mockBabelArtifactConverter); } @Test @@ -157,17 +135,18 @@ public class TestArtifactDownloadManager { when(mockDistributionClient.download(artifact)).thenReturn(createDistributionClientDownloadResult( DistributionActionResultEnum.SUCCESS, null, "This is not a valid Tosca CSAR File".getBytes())); doNothing().when(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); - when(mockBabelClient.postArtifact(any(), any(), any(), any())).thenThrow(new BabelServiceClientException("")); + when(mockBabelClient.postArtifact(any(), any())).thenThrow(new BabelServiceClientException("")); doNothing().when(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifact); - assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), null, null), is(false)); + assertThrows(ProcessToscaArtifactsException.class, + () -> downloadManager.downloadArtifacts(data, data.getServiceArtifacts())); Mockito.verify(mockDistributionClient).download(artifact); Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); - Mockito.verify(mockBabelClient).postArtifact(any(), any(), any(), any()); + Mockito.verify(mockBabelClient).postArtifact(any(), any()); Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifact); - Mockito.verifyZeroInteractions(mockBabelArtifactConverter); + Mockito.verifyNoInteractions(mockBabelArtifactConverter); } @@ -182,43 +161,48 @@ public class TestArtifactDownloadManager { DistributionActionResultEnum.SUCCESS, null, "This is not a valid Model Query Spec".getBytes())); doNothing().when(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); - assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, null), - is(false)); + assertThrows(BabelArtifactParsingException.class, + () -> downloadManager.downloadArtifacts(data, data.getServiceArtifacts())); Mockito.verify(mockDistributionClient).download(artifact); Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifact); - Mockito.verifyZeroInteractions(mockBabelClient, mockBabelArtifactConverter); + Mockito.verifyNoInteractions(mockBabelClient, mockBabelArtifactConverter); } @Test public void downloadArtifacts_validToscaCsarFile() - throws IOException, BabelServiceClientException, BabelArtifactParsingException { + throws Exception { INotificationData data = getNotificationDataWithToscaCsarFile(); IArtifactInfo artifactInfo = data.getServiceArtifacts().get(0); setupValidDownloadCsarMocks(data, artifactInfo, new ArtifactTestUtils()); - List modelArtifacts = new ArrayList<>(); - List catalogFiles = new ArrayList<>(); - assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, catalogFiles), - is(true)); - assertThat(catalogFiles.size(), is(0)); + List artifacts = downloadManager.downloadArtifacts(data, data.getServiceArtifacts()); + List modelArtifacts = artifacts.stream().filter(ModelArtifact.class::isInstance) + .collect(Collectors.toList()); + List catalogArtifacts = artifacts.stream().filter(VnfCatalogArtifact.class::isInstance) + .collect(Collectors.toList()); + assertThat(modelArtifacts.size(), is(1)); + assertThat(catalogArtifacts.size(), is(1)); Mockito.verify(mockDistributionClient).download(artifactInfo); Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifactInfo); - Mockito.verify(mockBabelClient).postArtifact(any(), any(), any(), any()); + Mockito.verify(mockBabelClient).postArtifact(any(), any()); Mockito.verify(mockBabelArtifactConverter).convertToModel(any()); Mockito.verify(mockBabelArtifactConverter).convertToCatalog(any()); } private void setupValidDownloadCsarMocks(INotificationData data, IArtifactInfo artifactInfo, - ArtifactTestUtils artifactTestUtils) throws IOException, BabelServiceClientException { + ArtifactTestUtils artifactTestUtils) throws IOException, BabelServiceClientException, BabelArtifactParsingException { when(mockDistributionClient.download(artifactInfo)) .thenReturn(createDistributionClientDownloadResult(DistributionActionResultEnum.SUCCESS, null, artifactTestUtils.loadResource("compressedArtifacts/service-VscpaasTest-csar.csar"))); - when(mockBabelClient.postArtifact(any(), any(), any(), any())).thenReturn(createBabelArtifacts()); + when(mockBabelClient.postArtifact(any(), any())).thenReturn(createBabelArtifacts()); + + when(mockBabelArtifactConverter.convertToModel(any(BabelArtifact.class))).thenReturn(List.of(new ModelArtifact())); + when(mockBabelArtifactConverter.convertToCatalog(any(BabelArtifact.class))).thenReturn(new VnfCatalogArtifact("")); } private List createBabelArtifacts() { @@ -230,23 +214,24 @@ public class TestArtifactDownloadManager { @Test public void downloadArtifactsWithValidModelQuerySpec() - throws IOException, BabelServiceClientException, BabelArtifactParsingException { + throws Exception { INotificationData data = getNotificationDataWithModelQuerySpec(); IArtifactInfo artifact = data.getServiceArtifacts().get(0); setupValidModelQuerySpecMocks(new ArtifactTestUtils(), data, artifact); - List modelFiles = new ArrayList<>(); - List catalogFiles = new ArrayList<>(); - assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelFiles, catalogFiles), - is(true)); + List artifacts = downloadManager.downloadArtifacts(data, data.getServiceArtifacts()); + List namedQueryArtifacts = artifacts.stream().filter(NamedQueryArtifact.class::isInstance) + .collect(Collectors.toList()); + List catalogArtifacts = artifacts.stream().filter(VnfCatalogArtifact.class::isInstance) + .collect(Collectors.toList()); - assertThat(modelFiles, is(not(IsEmptyCollection.empty()))); - assertThat(catalogFiles, is(empty())); + assertThat(namedQueryArtifacts.size(), is(1)); + assertThat(catalogArtifacts, is(empty())); Mockito.verify(mockDistributionClient).download(artifact); Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); - Mockito.verifyZeroInteractions(mockBabelClient, mockBabelArtifactConverter); + Mockito.verifyNoInteractions(mockBabelClient, mockBabelArtifactConverter); } private void setupValidModelQuerySpecMocks(ArtifactTestUtils artifactTestUtils, INotificationData data, @@ -259,27 +244,31 @@ public class TestArtifactDownloadManager { @Test public void downloadArtifacts_validCsarAndModelFiles() - throws IOException, BabelServiceClientException, BabelArtifactParsingException { + throws Exception { ArtifactTestUtils artifactTestUtils = new ArtifactTestUtils(); INotificationData data = getNotificationDataWithOneOfEach(); - List artifacts = new ArrayList<>(); + List artifactInfos = new ArrayList<>(); IArtifactInfo serviceArtifact = data.getServiceArtifacts().get(0); IArtifactInfo modelSpecArtifact = data.getResources().get(1).getArtifacts().get(0); - artifacts.add(serviceArtifact); - artifacts.add(modelSpecArtifact); + artifactInfos.add(serviceArtifact); + artifactInfos.add(modelSpecArtifact); setupValidDownloadCsarMocks(data, serviceArtifact, artifactTestUtils); setupValidModelQuerySpecMocks(artifactTestUtils, data, modelSpecArtifact); - List modelFiles = new ArrayList<>(); - List catalogFiles = new ArrayList<>(); - assertThat(downloadManager.downloadArtifacts(data, artifacts, modelFiles, catalogFiles), is(true)); + List artifacts = downloadManager.downloadArtifacts(data, artifactInfos); + List modelArtifacts = artifacts.stream().filter(artifact -> !(artifact instanceof VnfCatalogArtifact)) + .collect(Collectors.toList()); + List catalogArtifacts = artifacts.stream().filter(VnfCatalogArtifact.class::isInstance) + .collect(Collectors.toList()); + assertThat(modelArtifacts.size(), is(2)); + assertThat(catalogArtifacts.size(), is(1)); Mockito.verify(mockDistributionClient).download(serviceArtifact); Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, serviceArtifact); - Mockito.verify(mockBabelClient).postArtifact(any(), any(), any(), any()); + Mockito.verify(mockBabelClient).postArtifact(any(), any()); Mockito.verify(mockBabelArtifactConverter).convertToModel(any()); Mockito.verify(mockBabelArtifactConverter).convertToCatalog(any()); @@ -299,21 +288,22 @@ public class TestArtifactDownloadManager { when(mockDistributionClient.download(artifactInfo)) .thenReturn(createDistributionClientDownloadResult(DistributionActionResultEnum.SUCCESS, null, artifactTestUtils.loadResource("compressedArtifacts/service-VscpaasTest-csar.csar"))); - when(mockBabelArtifactConverter.convertToModel(anyList())) + when(mockBabelArtifactConverter.convertToModel(any())) .thenThrow(BabelArtifactParsingException.class); doNothing().when(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifactInfo); - when(mockBabelClient.postArtifact(any(), any(), any(), any())).thenReturn(createBabelArtifacts()); + when(mockBabelClient.postArtifact(any(), any())).thenReturn(createBabelArtifacts()); List modelArtifacts = new ArrayList<>(); List catalogFiles = new ArrayList<>(); - assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, catalogFiles), - is(false)); + assertThrows(ProcessToscaArtifactsException.class, + () -> downloadManager.downloadArtifacts(data, data.getServiceArtifacts())); + assertThat(modelArtifacts, is(empty())); assertThat(catalogFiles, is(empty())); Mockito.verify(mockDistributionClient).download(artifactInfo); Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifactInfo); - Mockito.verify(mockBabelClient).postArtifact(any(), any(), any(), any()); + Mockito.verify(mockBabelClient).postArtifact(any(), any()); Mockito.verify(mockBabelArtifactConverter).convertToModel(any()); } @@ -327,12 +317,13 @@ public class TestArtifactDownloadManager { DistributionActionResultEnum.SUCCESS, null, "This content does not matter.".getBytes())); doNothing().when(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); - assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), null, new ArrayList<>()), - is(false)); + assertThrows(InvalidArchiveException.class, + () -> downloadManager.downloadArtifacts(data, data.getServiceArtifacts())); + Mockito.verify(mockDistributionClient).download(artifact); Mockito.verify(mockNotificationPublisher).publishDownloadSuccess(mockDistributionClient, data, artifact); Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifact); - Mockito.verifyZeroInteractions(mockBabelClient, mockBabelArtifactConverter); + Mockito.verifyNoInteractions(mockBabelClient, mockBabelArtifactConverter); } private IDistributionClientDownloadResult createDistributionClientDownloadResult(