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.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;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.stream.Collectors;
-import org.hamcrest.collection.IsEmptyCollection;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+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;
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}.
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;
/**
* Test downloading zero artifacts from SDC.
+ * @throws Exception
*/
@Test
- public void testDownloadWithZeroArtifacts() {
- List<Artifact> modelFiles = new ArrayList<>();
- List<Artifact> catalogFiles = new ArrayList<>();
- assertThat(downloadManager.downloadArtifacts(getNotificationDataWithOneService(), new ArrayList<>(), modelFiles,
- catalogFiles), is(true));
- assertThat(modelFiles, is(empty()));
- assertThat(catalogFiles, is(empty()));
+ public void testDownloadWithZeroArtifacts() throws Exception {
+ List<Artifact> artifacts = downloadManager.downloadArtifacts(getNotificationDataWithOneService(), new ArrayList<>());
+ assertThat(artifacts, is(empty()));
Mockito.verifyNoInteractions(mockBabelClient, mockDistributionClient, mockNotificationPublisher,
mockBabelArtifactConverter);
}
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,
Mockito.verifyNoInteractions(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.verifyNoInteractions(mockBabelArtifactConverter);
- }
-
@Test
public void downloadArtifacts_invalidToscaCsarFile() throws IOException, BabelServiceClientException {
INotificationData data = getNotificationDataWithToscaCsarFile();
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.verifyNoInteractions(mockBabelArtifactConverter);
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);
@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<org.onap.aai.modelloader.entity.Artifact> modelArtifacts = new ArrayList<>();
- List<org.onap.aai.modelloader.entity.Artifact> catalogFiles = new ArrayList<>();
- assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, catalogFiles),
- is(true));
- assertThat(catalogFiles.size(), is(0));
+ List<Artifact> artifacts = downloadManager.downloadArtifacts(data, data.getServiceArtifacts());
+ List<Artifact> modelArtifacts = artifacts.stream().filter(ModelArtifact.class::isInstance)
+ .collect(Collectors.toList());
+ List<Artifact> 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<BabelArtifact> createBabelArtifacts() {
@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<org.onap.aai.modelloader.entity.Artifact> modelFiles = new ArrayList<>();
- List<org.onap.aai.modelloader.entity.Artifact> catalogFiles = new ArrayList<>();
- assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelFiles, catalogFiles),
- is(true));
+ List<Artifact> artifacts = downloadManager.downloadArtifacts(data, data.getServiceArtifacts());
+ List<Artifact> namedQueryArtifacts = artifacts.stream().filter(NamedQueryArtifact.class::isInstance)
+ .collect(Collectors.toList());
+ List<Artifact> 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);
@Test
public void downloadArtifacts_validCsarAndModelFiles()
- throws IOException, BabelServiceClientException, BabelArtifactParsingException {
+ throws Exception {
ArtifactTestUtils artifactTestUtils = new ArtifactTestUtils();
INotificationData data = getNotificationDataWithOneOfEach();
- List<IArtifactInfo> artifacts = new ArrayList<>();
+ List<IArtifactInfo> 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<org.onap.aai.modelloader.entity.Artifact> modelFiles = new ArrayList<>();
- List<org.onap.aai.modelloader.entity.Artifact> catalogFiles = new ArrayList<>();
- assertThat(downloadManager.downloadArtifacts(data, artifacts, modelFiles, catalogFiles), is(true));
+ List<Artifact> artifacts = downloadManager.downloadArtifacts(data, artifactInfos);
+ List<Artifact> modelArtifacts = artifacts.stream().filter(artifact -> !(artifact instanceof VnfCatalogArtifact))
+ .collect(Collectors.toList());
+ List<Artifact> 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());
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<Artifact> modelArtifacts = new ArrayList<>();
List<Artifact> 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());
}
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);