2 * Copyright © 2019 Bell Canada
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.onap.ccsdk.cds.sdclistener.service;
18 import org.apache.commons.io.FileUtils;
19 import org.junit.Before;
20 import org.junit.Rule;
21 import org.junit.Test;
22 import org.junit.rules.TemporaryFolder;
23 import org.junit.runner.RunWith;
24 import org.mockito.Mockito;
25 import org.mockito.MockitoAnnotations;
26 import org.mockito.junit.MockitoJUnit;
27 import org.mockito.junit.MockitoRule;
28 import org.onap.ccsdk.cds.sdclistener.SdcListenerConfiguration;
29 import org.onap.ccsdk.cds.sdclistener.client.SdcListenerAuthClientInterceptor;
30 import org.onap.ccsdk.cds.sdclistener.dto.SdcListenerDto;
31 import org.onap.ccsdk.cds.sdclistener.handler.BluePrintProcesssorHandler;
32 import org.onap.ccsdk.cds.sdclistener.status.SdcListenerStatus;
33 import org.onap.sdc.api.results.IDistributionClientDownloadResult;
34 import org.onap.sdc.impl.mock.DistributionClientResultStubImpl;
35 import org.springframework.beans.factory.annotation.Autowired;
36 import org.springframework.boot.context.properties.EnableConfigurationProperties;
37 import org.springframework.boot.test.context.SpringBootTest;
38 import org.springframework.boot.test.mock.mockito.MockBean;
39 import org.springframework.test.context.junit4.SpringRunner;
42 import java.io.IOException;
43 import java.nio.file.Files;
44 import java.nio.file.Path;
45 import java.nio.file.Paths;
47 import static junit.framework.TestCase.assertTrue;
48 import static org.onap.ccsdk.cds.sdclistener.status.SdcListenerStatus.NotificationType.SDC_LISTENER_COMPONENT;
49 import static org.onap.sdc.utils.DistributionStatusEnum.COMPONENT_DONE_OK;
51 @RunWith(SpringRunner.class)
52 @EnableConfigurationProperties({SdcListenerAuthClientInterceptor.class,
53 BluePrintProcesssorHandler.class, SdcListenerDto.class, ListenerServiceImpl.class, SdcListenerStatus.class,
54 SdcListenerConfiguration.class})
55 @SpringBootTest(classes = {ListenerServiceImplTest.class})
56 public class ListenerServiceImplTest {
58 private static final String CSAR_SAMPLE = "src/test/resources/service-ServicePnfTest-csar.csar";
59 private static final String WRONG_CSAR_SAMPLE = "src/test/resources/wrong_csar_pattern.csar";
60 private static final String CBA_ZIP_PATH = "Artifacts/[a-zA-Z0-9-_.]+/Deployment/CONTROLLER_BLUEPRINT_ARCHIVE/[a-zA-Z0-9-_.()]+[.]zip";
61 private static final String ZIP_FILE = ".zip";
62 private static final String CSAR_FILE = ".csar";
63 private static final String DISTRIBUTION_ID = "1";
64 private static final String URL = "/sdc/v1/artifact";
67 private String csarArchivePath;
68 private Path tempDirectoryPath;
71 public TemporaryFolder folder = new TemporaryFolder();
74 public MockitoRule mockitoRule = MockitoJUnit.rule();
77 private ListenerServiceImpl listenerService;
80 SdcListenerStatus status;
83 SdcListenerDto listenerDto;
87 MockitoAnnotations.initMocks(this);
88 csarArchivePath = folder.getRoot().toString();
89 tempDirectoryPath = Paths.get(csarArchivePath, "cds-sdc-listener-test");
93 public void extractBluePrintSuccessfully() throws IOException {
95 listenerService.extractBluePrint(CSAR_SAMPLE, tempDirectoryPath.toString());
98 String result = checkFileExists(tempDirectoryPath);
99 assertTrue(result.contains(ZIP_FILE));
103 public void extractBluePrintFailure() {
105 Mockito.when(listenerDto.getDistributionId()).thenReturn(DISTRIBUTION_ID);
106 Mockito.when(listenerDto.getArtifactUrl()).thenReturn(URL);
107 Mockito.doCallRealMethod().when(status)
108 .sendResponseBackToSdc(DISTRIBUTION_ID, COMPONENT_DONE_OK, null, URL, SDC_LISTENER_COMPONENT);
111 listenerService.extractBluePrint(WRONG_CSAR_SAMPLE, tempDirectoryPath.toString());
114 Mockito.verify(status)
115 .sendResponseBackToSdc(DISTRIBUTION_ID, COMPONENT_DONE_OK, null, URL, SDC_LISTENER_COMPONENT);
119 public void storeCsarArtifactToFileSuccessfully() throws IOException {
121 DistributionClientDownloadResultStubImpl resultStub = new DistributionClientDownloadResultStubImpl();
124 listenerService.extractCsarAndStore(resultStub, tempDirectoryPath);
127 String result = checkFileExists(tempDirectoryPath);
128 assertTrue(result.contains(CSAR_FILE));
131 private String checkFileExists(Path path) throws IOException {
132 return Files.walk(path)
133 .filter(Files::isRegularFile)
140 public byte[] convertFileToByteArray(File file) {
142 return FileUtils.readFileToByteArray(file);
143 } catch (IOException e) {
149 public class DistributionClientDownloadResultStubImpl extends DistributionClientResultStubImpl implements
150 IDistributionClientDownloadResult {
152 public DistributionClientDownloadResultStubImpl() {
155 public byte[] getArtifactPayload() {
156 File file = Paths.get(CSAR_SAMPLE).toFile();
157 return convertFileToByteArray(file);
160 public String getArtifactName() {
161 return "MackArtifactName";
164 public String getArtifactFilename() {
165 return "MackArtifactName.csar";