2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 European Software Marketing Ltd.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
21 package org.onap.aai.modelloader.notification;
23 import static org.hamcrest.CoreMatchers.is;
24 import static org.hamcrest.MatcherAssert.assertThat;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.eq;
27 import static org.mockito.Mockito.when;
28 import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithCatalogFile;
29 import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithOneOfEach;
31 import java.io.IOException;
32 import java.util.ArrayList;
33 import java.util.List;
35 import org.junit.jupiter.api.AfterEach;
36 import org.junit.jupiter.api.BeforeEach;
37 import org.junit.jupiter.api.Test;
38 import org.mockito.Mock;
39 import org.mockito.Mockito;
40 import org.mockito.MockitoAnnotations;
41 import org.onap.aai.babel.service.data.BabelArtifact;
42 import org.onap.aai.modelloader.config.AaiProperties;
43 import org.onap.aai.modelloader.entity.Artifact;
44 import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifact;
45 import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifactHandler;
46 import org.onap.aai.modelloader.entity.model.BabelArtifactParsingException;
47 import org.onap.aai.modelloader.entity.model.ModelArtifactHandler;
48 import org.onap.aai.modelloader.entity.model.ModelArtifactParser;
49 import org.onap.aai.modelloader.extraction.InvalidArchiveException;
50 import org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder;
51 import org.onap.aai.modelloader.restclient.AaiRestClient;
52 import org.onap.aai.modelloader.service.ArtifactDeploymentManager;
53 import org.onap.aai.modelloader.util.ArtifactTestUtils;
54 import org.onap.sdc.api.notification.INotificationData;
55 import org.springframework.web.client.RestTemplate;
58 * Tests {@link ArtifactDeploymentManager}.
60 public class TestArtifactDeploymentManager {
62 private static final String SHOULD_HAVE_RETURNED_FALSE = "This should have returned false";
64 private ArtifactDeploymentManager manager;
66 @Mock private ModelArtifactHandler modelArtifactHandlerMock;
67 @Mock private VnfCatalogArtifactHandler vnfCatalogArtifactHandlerMock;
70 public void setup() throws IOException {
71 MockitoAnnotations.openMocks(this);
72 AaiProperties aaiProperties = new AaiProperties();
73 aaiProperties.setBaseUrl("http://aai.onap:80");
74 aaiProperties.setModelUrl("/aai/%s/service-design-and-creation/models/model/");
75 aaiProperties.setNamedQueryUrl("/aai/%s/service-design-and-creation/named-queries/named-query/");
76 aaiProperties.setVnfImageUrl("/aai/%s/service-design-and-creation/vnf-images");
78 AaiRestClient aaiRestClient = new AaiRestClient(aaiProperties, new RestTemplate());
79 manager = new ArtifactDeploymentManager(modelArtifactHandlerMock, vnfCatalogArtifactHandlerMock, aaiRestClient);
83 public void tearDown() {
84 modelArtifactHandlerMock = null;
85 vnfCatalogArtifactHandlerMock = null;
90 public void deploy_csarDeploymentsFailed() throws IOException, BabelArtifactParsingException {
91 INotificationData data = NotificationDataFixtureBuilder.getNotificationDataWithToscaCsarFile();
92 byte[] xml = new ArtifactTestUtils().loadResource("convertedYmls/AAI-SCP-Test-VSP-resource-1.0.xml");
93 BabelArtifact toscaArtifact = setupTest(xml, data);
94 List<Artifact> modelArtifacts = new BabelArtifactConverter(new ModelArtifactParser()).convertToModel(toscaArtifact);
96 when(modelArtifactHandlerMock.pushArtifacts(eq(modelArtifacts), eq(data.getDistributionID()), any(), any()))
99 assertThat(SHOULD_HAVE_RETURNED_FALSE, manager.deploy(data.getDistributionID(), modelArtifacts, new ArrayList<>()), is(false));
101 Mockito.verify(modelArtifactHandlerMock).pushArtifacts(eq(modelArtifacts), eq(data.getDistributionID()), any(),
103 Mockito.verify(vnfCatalogArtifactHandlerMock, Mockito.never()).pushArtifacts(eq(modelArtifacts),
104 eq(data.getDistributionID()), any(), any());
105 Mockito.verify(modelArtifactHandlerMock).rollback(eq(new ArrayList<Artifact>()), eq(data.getDistributionID()),
107 Mockito.verify(vnfCatalogArtifactHandlerMock, Mockito.never()).rollback(eq(new ArrayList<Artifact>()),
108 eq(data.getDistributionID()), any());
111 private BabelArtifact setupTest(byte[] xml, INotificationData data) throws IOException {
112 org.onap.sdc.api.notification.IArtifactInfo artifactInfo = data.getServiceArtifacts().get(0);
114 BabelArtifact xmlArtifact =
115 new BabelArtifact(artifactInfo.getArtifactName(), BabelArtifact.ArtifactType.MODEL, new String(xml));
121 public void deploy_catalogDeploymentsFailed()
122 throws IOException, BabelArtifactParsingException, InvalidArchiveException {
123 INotificationData data = getNotificationDataWithCatalogFile();
125 List<org.onap.aai.modelloader.entity.Artifact> catalogFiles = new ArrayList<>();
126 catalogFiles.add(new VnfCatalogArtifact("Some catalog content"));
128 when(modelArtifactHandlerMock.pushArtifacts(any(), any(), any(), any())).thenReturn(true);
129 when(vnfCatalogArtifactHandlerMock.pushArtifacts(eq(catalogFiles), eq(data.getDistributionID()), any(), any()))
132 assertThat(SHOULD_HAVE_RETURNED_FALSE, manager.deploy(data.getDistributionID(), new ArrayList<>(), catalogFiles), is(false));
134 Mockito.verify(modelArtifactHandlerMock).pushArtifacts(eq(new ArrayList<Artifact>()),
135 eq(data.getDistributionID()), any(), any());
136 Mockito.verify(vnfCatalogArtifactHandlerMock).pushArtifacts(eq(catalogFiles), eq(data.getDistributionID()),
138 Mockito.verify(modelArtifactHandlerMock).rollback(eq(new ArrayList<Artifact>()), eq(data.getDistributionID()),
140 Mockito.verify(vnfCatalogArtifactHandlerMock).rollback(eq(new ArrayList<Artifact>()),
141 eq(data.getDistributionID()), any());
145 public void testNoArtifactsDeployed() throws IOException, BabelArtifactParsingException, InvalidArchiveException {
146 doFailedCombinedTests(false, false);
150 public void testModelsNotDeployed() throws IOException, BabelArtifactParsingException, InvalidArchiveException {
151 doFailedCombinedTests(false, true);
155 public void testCatalogsNotDeployed() throws IOException, BabelArtifactParsingException, InvalidArchiveException {
156 doFailedCombinedTests(true, false);
159 private void doFailedCombinedTests(boolean modelsDeployed, boolean catalogsDeployed)
160 throws IOException, BabelArtifactParsingException, InvalidArchiveException {
161 INotificationData data = getNotificationDataWithOneOfEach();
162 byte[] xml = new ArtifactTestUtils().loadResource("convertedYmls/AAI-SCP-Test-VSP-resource-1.0.xml");
163 BabelArtifact toscaArtifact = setupTest(xml, data);
164 List<Artifact> modelArtifacts = new BabelArtifactConverter(new ModelArtifactParser()).convertToModel(toscaArtifact);
166 List<org.onap.aai.modelloader.entity.Artifact> catalogFiles = new ArrayList<>();
167 catalogFiles.add(new VnfCatalogArtifact("Some catalog content"));
169 when(vnfCatalogArtifactHandlerMock.pushArtifacts(eq(catalogFiles), eq(data.getDistributionID()), any(), any()))
170 .thenReturn(catalogsDeployed);
171 when(modelArtifactHandlerMock.pushArtifacts(eq(modelArtifacts), eq(data.getDistributionID()), any(), any()))
172 .thenReturn(modelsDeployed);
174 assertThat(SHOULD_HAVE_RETURNED_FALSE, manager.deploy(data.getDistributionID(), modelArtifacts, catalogFiles), is(false));
176 // Catalog artifacts are only pushed if models are successful.
177 Mockito.verify(modelArtifactHandlerMock).pushArtifacts(eq(modelArtifacts), eq(data.getDistributionID()), any(),
179 if (modelsDeployed) {
180 Mockito.verify(vnfCatalogArtifactHandlerMock).pushArtifacts(eq(catalogFiles), eq(data.getDistributionID()),
184 if (modelsDeployed && catalogsDeployed) {
185 Mockito.verify(modelArtifactHandlerMock, Mockito.never()).rollback(any(), any(), any());
186 Mockito.verify(vnfCatalogArtifactHandlerMock, Mockito.never()).rollback(any(), any(), any());
188 if (modelsDeployed) {
189 Mockito.verify(modelArtifactHandlerMock).rollback(eq(new ArrayList<Artifact>()),
190 eq(data.getDistributionID()), any());
191 Mockito.verify(vnfCatalogArtifactHandlerMock).rollback(eq(new ArrayList<Artifact>()),
192 eq(data.getDistributionID()), any());
194 Mockito.verify(modelArtifactHandlerMock).rollback(eq(new ArrayList<Artifact>()),
195 eq(data.getDistributionID()), any());
196 Mockito.verify(vnfCatalogArtifactHandlerMock, Mockito.never()).rollback(any(), any(), any());
202 * Deploy both models and VNF images.
204 * @throws IOException
205 * @throws BabelArtifactParsingException
206 * @throws InvalidArchiveException
209 public void testDeploySuccess() throws IOException, BabelArtifactParsingException, InvalidArchiveException {
210 INotificationData data = getNotificationDataWithOneOfEach();
211 byte[] xml = new ArtifactTestUtils().loadResource("convertedYmls/AAI-SCP-Test-VSP-resource-1.0.xml");
212 BabelArtifact toscaArtifact = setupTest(xml, data);
213 List<Artifact> modelArtifacts = new BabelArtifactConverter(new ModelArtifactParser()).convertToModel(toscaArtifact);
215 List<org.onap.aai.modelloader.entity.Artifact> catalogFiles = new ArrayList<>();
216 catalogFiles.add(new VnfCatalogArtifact("Some catalog content"));
218 when(vnfCatalogArtifactHandlerMock.pushArtifacts(eq(catalogFiles), eq(data.getDistributionID()), any(), any()))
220 when(modelArtifactHandlerMock.pushArtifacts(eq(modelArtifacts), eq(data.getDistributionID()), any(), any()))
223 assertThat(manager.deploy(data.getDistributionID(), modelArtifacts, catalogFiles), is(true));
225 Mockito.verify(vnfCatalogArtifactHandlerMock).pushArtifacts(eq(catalogFiles), eq(data.getDistributionID()),
227 Mockito.verify(modelArtifactHandlerMock).pushArtifacts(eq(modelArtifacts), eq(data.getDistributionID()), any(),
229 Mockito.verify(modelArtifactHandlerMock, Mockito.never()).rollback(any(), any(), any());
230 Mockito.verify(vnfCatalogArtifactHandlerMock, Mockito.never()).rollback(any(), any(), any());