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.entity.catalog;
23 import static org.hamcrest.CoreMatchers.containsString;
24 import static org.hamcrest.CoreMatchers.is;
25 import static org.hamcrest.MatcherAssert.assertThat;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.when;
30 import java.io.IOException;
31 import java.io.UnsupportedEncodingException;
32 import java.nio.file.Files;
33 import java.nio.file.Paths;
34 import java.util.ArrayList;
35 import java.util.List;
37 import org.junit.jupiter.api.BeforeAll;
38 import org.junit.jupiter.api.Test;
39 import org.mockito.ArgumentCaptor;
40 import org.mockito.Mockito;
41 import org.onap.aai.modelloader.config.AaiProperties;
42 import org.onap.aai.modelloader.entity.Artifact;
43 import org.onap.aai.modelloader.entity.ArtifactType;
44 import org.onap.aai.modelloader.restclient.AaiRestClient;
45 import org.springframework.http.HttpStatus;
46 import org.springframework.http.MediaType;
47 import org.springframework.http.ResponseEntity;
49 public class TestVnfCatalogArtifactHandler {
51 protected static AaiProperties aaiProperties = new AaiProperties();
53 private AaiRestClient mockRestClient = mock(AaiRestClient.class);
56 public static void setup() {
57 aaiProperties.setBaseUrl("http://aai.onap:80");
58 aaiProperties.setModelUrl("/aai/%s/service-design-and-creation/models/model/");
59 aaiProperties.setNamedQueryUrl("/aai/%s/service-design-and-creation/named-queries/named-query/");
60 aaiProperties.setVnfImageUrl("/aai/v*/service-design-and-creation/vnf-images");
64 * Update A&AI with 4 images, 2 of which already exist.
69 public void testUpdateVnfImages() throws Exception {
71 ResponseEntity mockGetResp = mock(ResponseEntity.class);
74 when(mockGetResp.getStatusCodeValue())
75 .thenReturn(HttpStatus.OK.value())
76 .thenReturn(HttpStatus.NOT_FOUND.value())
77 .thenReturn(HttpStatus.NOT_FOUND.value())
78 .thenReturn(HttpStatus.OK.value());
81 when(mockRestClient.getResource(Mockito.anyString(), Mockito.anyString(), Mockito.any(MediaType.class), Mockito.any()))
82 .thenReturn(mockGetResp);
85 // Example VNF Catalog XML
86 VnfCatalogArtifactHandler handler = new VnfCatalogArtifactHandler(aaiProperties);
87 assertTrue(handler.pushArtifacts(createVnfCatalogArtifact(), "test", new ArrayList<Artifact>(), mockRestClient));
89 assertPutOperationsSucceeded();
93 public void testUpdateVnfImagesFromXml() throws Exception {
95 ResponseEntity mockGetResp = mock(ResponseEntity.class);
98 when(mockGetResp.getStatusCodeValue())
99 .thenReturn(HttpStatus.OK.value())
100 .thenReturn(HttpStatus.NOT_FOUND.value())
101 .thenReturn(HttpStatus.NOT_FOUND.value())
102 .thenReturn(HttpStatus.OK.value());
105 when(mockRestClient.getResource(Mockito.anyString(), Mockito.anyString(), Mockito.any(MediaType.class), Mockito.any()))
106 .thenReturn(mockGetResp);
109 // Example VNF Catalog XML
110 VnfCatalogArtifactHandler handler = new VnfCatalogArtifactHandler(aaiProperties);
112 handler.pushArtifacts(createVnfCatalogXmlArtifact(), "test", new ArrayList<Artifact>(), mockRestClient),
115 // Only two of the VNF images should be pushed
116 ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
117 AaiRestClient client = Mockito.verify(mockRestClient, Mockito.times(2));
118 client.putResource(Mockito.anyString(), argument.capture(), Mockito.anyString(), Mockito.any(MediaType.class), Mockito.any());
119 assertThat(argument.getAllValues().size(), is(2));
120 assertThat(argument.getAllValues().get(0), containsString("5.2.5"));
121 assertThat(argument.getAllValues().get(0), containsString("VM00"));
122 assertThat(argument.getAllValues().get(1), containsString("5.2.4"));
123 assertThat(argument.getAllValues().get(1), containsString("VM00"));
127 * Example VNF Catalog based on JSON data (returned by Babel)
129 * @return test Artifacts
130 * @throws IOException
131 * @throws UnsupportedEncodingException
133 private List<Artifact> createVnfCatalogArtifact() throws IOException, UnsupportedEncodingException {
134 String examplePath = "src/test/resources/imagedataexample.json";
135 byte[] encoded = Files.readAllBytes(Paths.get(examplePath));
136 List<Artifact> artifacts = new ArrayList<Artifact>();
137 artifacts.add(new VnfCatalogArtifact(new String(encoded, "utf-8")));
142 * Example VNF Catalog based on VNF_CATALOG XML
144 * @return test Artifacts
145 * @throws IOException
146 * @throws UnsupportedEncodingException
148 private List<Artifact> createVnfCatalogXmlArtifact() throws IOException, UnsupportedEncodingException {
149 byte[] encoded = Files.readAllBytes(Paths.get("src/test/resources/xmlFiles/fortigate.xml"));
150 List<Artifact> artifacts = new ArrayList<Artifact>();
151 artifacts.add(new VnfCatalogArtifact(ArtifactType.VNF_CATALOG_XML, new String(encoded, "utf-8")));
156 * Always return CREATED (success) for a PUT operation.
158 private void mockPutOperations() {
159 ResponseEntity mockPutResp = mock(ResponseEntity.class);
160 when(mockPutResp.getStatusCode()).thenReturn(HttpStatus.CREATED);
161 when(mockRestClient.putResource(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(),
162 Mockito.any(MediaType.class), Mockito.any())).thenReturn(mockPutResp);
165 private void assertPutOperationsSucceeded() {
166 // Only two of the VNF images should be pushed
167 ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
168 AaiRestClient mockedClient = Mockito.verify(mockRestClient, Mockito.times(2));
169 mockedClient.putResource(Mockito.anyString(), argument.capture(), Mockito.anyString(),
170 Mockito.any(MediaType.class), Mockito.any());
171 assertThat(argument.getAllValues().get(0), containsString("3.16.9"));
172 assertThat(argument.getAllValues().get(0), containsString("VM00"));
173 assertThat(argument.getAllValues().get(1), containsString("3.16.1"));
174 assertThat(argument.getAllValues().get(1), containsString("VM01"));