2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdcrests.vsp.rest.services;
23 import static junit.framework.TestCase.assertEquals;
24 import static junit.framework.TestCase.assertFalse;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.MockitoAnnotations.initMocks;
27 import static org.powermock.api.mockito.PowerMockito.mock;
28 import static org.powermock.api.mockito.PowerMockito.mockStatic;
29 import static org.powermock.api.mockito.PowerMockito.when;
31 import java.io.IOException;
32 import java.util.Arrays;
33 import java.util.Optional;
34 import java.util.UUID;
35 import javax.activation.DataHandler;
36 import javax.ws.rs.core.Response;
37 import org.apache.commons.lang3.tuple.Pair;
38 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
39 import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition;
40 import org.junit.Assert;
41 import org.junit.Before;
42 import org.junit.Test;
43 import org.junit.runner.RunWith;
44 import org.mockito.ArgumentMatchers;
45 import org.mockito.Mock;
46 import org.openecomp.core.utilities.orchestration.OnboardingTypesEnum;
47 import org.openecomp.sdc.activitylog.ActivityLogManager;
48 import org.openecomp.sdc.activitylog.ActivityLogManagerFactory;
49 import org.openecomp.sdc.logging.api.Logger;
50 import org.openecomp.sdc.logging.api.LoggerFactory;
51 import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateManager;
52 import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateManagerFactory;
53 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
54 import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory;
55 import org.openecomp.sdc.vendorsoftwareproduct.types.OrchestrationTemplateActionResponse;
56 import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
57 import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileStatus;
58 import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse;
59 import org.openecomp.sdc.vendorsoftwareproduct.types.candidateheat.FilesDataStructure;
60 import org.openecomp.sdc.vendorsoftwareproduct.types.candidateheat.Module;
61 import org.openecomp.sdcrests.vendorsoftwareproducts.types.FileDataStructureDto;
62 import org.openecomp.sdcrests.vendorsoftwareproducts.types.OrchestrationTemplateActionResponseDto;
63 import org.openecomp.sdcrests.vendorsoftwareproducts.types.UploadFileResponseDto;
64 import org.powermock.core.classloader.annotations.PrepareForTest;
65 import org.powermock.modules.junit4.PowerMockRunner;
67 @RunWith(PowerMockRunner.class)
68 @PrepareForTest({VspManagerFactory.class, ActivityLogManagerFactory.class,
69 OrchestrationTemplateCandidateManagerFactory.class, OrchestrationTemplateCandidateImpl.class})
70 public class OrchestrationTemplateCandidateImplTest {
72 private Logger logger = LoggerFactory.getLogger(OrchestrationTemplateCandidateImplTest.class);
75 private OrchestrationTemplateCandidateManager candidateManager;
77 private VendorSoftwareProductManager vendorSoftwareProductManager;
79 private VspManagerFactory vspManagerFactory;
81 private ActivityLogManager activityLogManager;
83 private ActivityLogManagerFactory activityLogManagerFactory;
85 OrchestrationTemplateCandidateManagerFactory orchestrationTemplateCandidateManagerFactory;
87 private OrchestrationTemplateCandidateImpl orchestrationTemplateCandidate;
89 private final String candidateId = UUID.randomUUID().toString();
90 private final String softwareProductId = UUID.randomUUID().toString();
91 private final String versionId = UUID.randomUUID().toString();
93 private final String user = "cs0008";
99 mockStatic(VspManagerFactory.class);
100 when(VspManagerFactory.getInstance()).thenReturn(vspManagerFactory);
101 when(vspManagerFactory.createInterface()).thenReturn(vendorSoftwareProductManager);
102 mockStatic(ActivityLogManagerFactory.class);
103 when(ActivityLogManagerFactory.getInstance()).thenReturn(activityLogManagerFactory);
104 when(activityLogManagerFactory.createInterface()).thenReturn(activityLogManager);
105 mockStatic(OrchestrationTemplateCandidateManagerFactory.class);
106 when(OrchestrationTemplateCandidateManagerFactory.getInstance()).thenReturn(orchestrationTemplateCandidateManagerFactory);
107 when(orchestrationTemplateCandidateManagerFactory.createInterface()).thenReturn(candidateManager);
108 UploadFileResponse uploadFileResponse = new UploadFileResponse();
109 uploadFileResponse.setOnboardingType(OnboardingTypesEnum.ZIP);
110 uploadFileResponse.setNetworkPackageName("test");
111 when(candidateManager.upload(any(), any())).thenReturn(uploadFileResponse);
114 // get using the candidate manager.
115 Optional<Pair<String,byte[]>> zipFile =
116 Optional.of(Pair.of("Hello", "World".getBytes()));
118 when(candidateManager.get(
119 ArgumentMatchers.eq(candidateId),
120 ArgumentMatchers.any())).thenReturn(zipFile);
122 when(vendorSoftwareProductManager.get(
123 ArgumentMatchers.eq(softwareProductId),
124 ArgumentMatchers.any())).thenReturn(zipFile);
127 OrchestrationTemplateActionResponse processResponse =
128 new OrchestrationTemplateActionResponse();
129 processResponse.setStatus(UploadFileStatus.Success);
130 when(candidateManager.process(
131 ArgumentMatchers.eq(candidateId),
132 ArgumentMatchers.any())).thenReturn(processResponse);
135 ValidationResponse vr = new ValidationResponse();
136 when(candidateManager.updateFilesDataStructure(
137 ArgumentMatchers.eq(candidateId),
138 ArgumentMatchers.any(),
139 ArgumentMatchers.any())).thenReturn(vr);
141 FilesDataStructure fds = new FilesDataStructure();
142 fds.setArtifacts(Arrays.asList("a","b"));
143 fds.setNested(Arrays.asList("foo", "bar"));
144 fds.setUnassigned(Arrays.asList("c", "d"));
145 fds.setModules(Arrays.asList(new Module(), new Module()));
147 when(candidateManager.getFilesDataStructure(
148 ArgumentMatchers.eq(candidateId),
149 ArgumentMatchers.any())).thenReturn(Optional.of(fds));
152 }catch (Exception e){
153 logger.error(e.getMessage(), e);
158 public void uploadSignedTest() {
159 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
160 Response response = orchestrationTemplateCandidate.upload("1", "1", mockAttachment("filename.zip"), "1");
161 assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
165 public void uploadNotSignedTest(){
166 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
167 Response response = orchestrationTemplateCandidate.upload("1", "1", mockAttachment("filename.csar"), "1");
168 assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
171 private Attachment mockAttachment(final String fileName) {
172 final Attachment attachment = mock(Attachment.class);
173 when(attachment.getContentDisposition()).thenReturn(new ContentDisposition("test"));
174 final DataHandler dataHandler = mock(DataHandler.class);
175 when(dataHandler.getName()).thenReturn(fileName);
176 when(attachment.getDataHandler()).thenReturn(dataHandler);
177 final byte[] bytes = "upload package Test".getBytes();
178 when(attachment.getObject(ArgumentMatchers.any())).thenReturn(bytes);
183 public void uploadSignNotValidTest() {
184 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
185 Response response = orchestrationTemplateCandidate.upload("1", "1", mockAttachment("filename.zip"), "1");
186 assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
187 assertFalse(((UploadFileResponseDto)response.getEntity()).getErrors().isEmpty());
191 public void testCandidateGet() throws IOException {
192 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
193 Response rsp = orchestrationTemplateCandidate.get(candidateId, versionId, user);
194 Assert.assertEquals("Response status equals", Response.Status.OK.getStatusCode(), rsp.getStatus());
195 Assert.assertNotEquals(rsp.getHeaderString("Content-Disposition").indexOf("Candidate"),-1);
196 byte[] content = (byte[])rsp.getEntity();
197 Assert.assertEquals("World", new String(content));
201 public void testVendorSoftwareProductGet() throws IOException {
202 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
203 Response rsp = orchestrationTemplateCandidate.get(softwareProductId, versionId, user);
204 Assert.assertEquals("Response status equals", Response.Status.OK.getStatusCode(), rsp.getStatus());
205 Assert.assertNotEquals(rsp.getHeaderString("Content-Disposition").indexOf("Processed"),-1);
206 byte[] content = (byte[])rsp.getEntity();
207 Assert.assertEquals("World", new String(content));
211 public void testMissingGet() throws IOException {
212 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
213 Response rsp = orchestrationTemplateCandidate.get(UUID.randomUUID().toString(), versionId, user);
214 Assert.assertEquals("Response status equals", Response.Status.NOT_FOUND.getStatusCode(), rsp.getStatus());
218 public void testAbort() {
220 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
221 Response rsp = orchestrationTemplateCandidate.abort(candidateId, versionId);
222 Assert.assertEquals("Response status equals", Response.Status.OK.getStatusCode(), rsp.getStatus());
223 Assert.assertNull(rsp.getEntity());
225 catch (Exception ex) {
226 logger.error("unexpected exception", ex);
227 Assert.fail("abort should not throw an exception");
232 public void testProcess() {
234 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
235 Response rsp = orchestrationTemplateCandidate.process(candidateId, versionId, user);
236 Assert.assertEquals("Response status equals", Response.Status.OK.getStatusCode(), rsp.getStatus());
237 Assert.assertNotNull(rsp.getEntity());
238 OrchestrationTemplateActionResponseDto dto = (OrchestrationTemplateActionResponseDto)rsp.getEntity();
239 Assert.assertEquals("status check", UploadFileStatus.Success, dto.getStatus());
241 catch (Exception ex) {
242 logger.error("unexpected exception", ex);
243 Assert.fail("abort should not throw an exception");
248 public void testFilesDataStructureUpload() {
250 FileDataStructureDto dto = new FileDataStructureDto();
251 dto.setArtifacts(Arrays.asList("a", "b", "c"));
252 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
253 Response rsp = orchestrationTemplateCandidate.updateFilesDataStructure(candidateId, versionId, dto, user);
254 Assert.assertEquals("Response status equals", Response.Status.OK.getStatusCode(), rsp.getStatus());
256 catch (Exception ex) {
257 logger.error("unexpected exception", ex);
258 Assert.fail("abort should not throw an exception");
263 public void testFilesDataStructureGet() {
265 FileDataStructureDto dto = new FileDataStructureDto();
266 dto.setArtifacts(Arrays.asList("a", "b", "c"));
267 orchestrationTemplateCandidate = new OrchestrationTemplateCandidateImpl();
268 Response rsp = orchestrationTemplateCandidate.getFilesDataStructure(candidateId, versionId, user);
269 Assert.assertEquals("Response status equals", Response.Status.OK.getStatusCode(), rsp.getStatus());
271 catch (Exception ex) {
272 logger.error("unexpected exception", ex);
273 Assert.fail("abort should not throw an exception");