Improve testing stability
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / test / java / org / openecomp / sdc / vendorsoftwareproduct / QuestionnaireDataServiceTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.vendorsoftwareproduct;
22
23
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.nio.ByteBuffer;
27 import java.util.List;
28 import java.util.Objects;
29 import org.apache.commons.collections4.MapUtils;
30 import org.apache.commons.io.IOUtils;
31 import org.junit.Assert;
32 import org.junit.Before;
33 import org.mockito.InjectMocks;
34 import org.mockito.MockitoAnnotations;
35 import org.openecomp.core.utilities.orchestration.OnboardingTypesEnum;
36 import org.openecomp.core.validation.util.MessageContainerUtil;
37 import org.openecomp.sdc.datatypes.error.ErrorLevel;
38 import org.openecomp.sdc.logging.api.Logger;
39 import org.openecomp.sdc.logging.api.LoggerFactory;
40 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
41 import org.openecomp.sdc.vendorsoftwareproduct.exception.OnboardPackageException;
42 import org.openecomp.sdc.vendorsoftwareproduct.impl.OrchestrationTemplateCandidateManagerImpl;
43 import org.openecomp.sdc.vendorsoftwareproduct.informationArtifact.InformationArtifactData;
44 import org.openecomp.sdc.vendorsoftwareproduct.questionnaire.QuestionnaireDataService;
45 import org.openecomp.sdc.vendorsoftwareproduct.tree.UploadFileTest;
46 import org.openecomp.sdc.vendorsoftwareproduct.types.OnboardPackageInfo;
47 import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
48 import org.openecomp.sdc.vendorsoftwareproduct.types.questionnaire.component.ComponentQuestionnaire;
49 import org.openecomp.sdc.versioning.dao.types.Version;
50
51 public class QuestionnaireDataServiceTest {
52   private static final Logger LOGGER = LoggerFactory.getLogger(QuestionnaireDataServiceTest.class);
53
54   public static final Version VERSION = new Version(0, 1);
55   private QuestionnaireDataService questionnaireDataService;// = new QuestionnaireDataServiceImpl();
56
57   @InjectMocks
58   private OrchestrationTemplateCandidateManagerImpl candidateManager;
59
60   private UploadFileTest uploadFileTest = new UploadFileTest();
61   private OnboardPackageInfo onboardPackageInfo;
62
63   private static String vspId;
64   private static Version vspActiveVersion;
65   private static final String USER1 = "vspTestUser1";
66   private static final VspDetails vspDetails = new VspDetails(vspId, VERSION);
67   private static final String CSAR = "csar";
68   private static final String ZIP = "zip";
69
70   @Before
71   public void setUp() throws Exception {
72     MockitoAnnotations.openMocks(this);
73   }
74
75   // TODO: 3/15/2017 fix and enable   //@Test
76   public void testQuestionnaireDataAfterLegalUploadWithComposition() throws IOException, OnboardPackageException {
77     InformationArtifactData informationArtifactData =
78         uploadFileAndValidateInformationArtifactData("/fullComposition", 5);
79
80     assertQuestionnaireValuesAreAsExpected(informationArtifactData, false);
81   }
82
83
84   // TODO: 3/15/2017 fix and enable   //@Test
85   public void testQuestionnaireDataAfterLegalUploadEmptyComposition() throws IOException, OnboardPackageException {
86     uploadFileAndValidateInformationArtifactData("/emptyComposition", 0);
87   }
88
89
90   // TODO: 3/15/2017 fix and enable   //@Test
91   public void testQuestionnaireDataAfterIllegalUpload() throws IOException, OnboardPackageException {
92     try (InputStream zipInputStream = uploadFileTest.getZipInputStream("/missingYml")) {
93       onboardPackageInfo = new OnboardPackageInfo("missingYml", CSAR, convertFileInputStream(zipInputStream), OnboardingTypesEnum.CSAR);
94       UploadFileResponse uploadFileResponse =
95               candidateManager.upload(vspDetails, onboardPackageInfo);
96     }
97     InformationArtifactData informationArtifactData = questionnaireDataService
98         .generateQuestionnaireDataForInformationArtifact(vspId, vspActiveVersion);
99
100   }
101
102   private InformationArtifactData uploadFileAndValidateInformationArtifactData(final String filePath,
103                                                                                final int listSizeToCheck)
104       throws IOException, OnboardPackageException {
105
106     try (final InputStream zipInputStream = uploadFileTest.getZipInputStream(filePath)) {
107       onboardPackageInfo = new OnboardPackageInfo("file", OnboardingTypesEnum.CSAR.toString(),
108           convertFileInputStream(zipInputStream), OnboardingTypesEnum.CSAR);
109       final UploadFileResponse uploadFileResponse = candidateManager.upload(vspDetails, onboardPackageInfo);
110       candidateManager.process(vspId, VERSION);
111
112       Assert.assertTrue(MapUtils.isEmpty(
113               MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, uploadFileResponse.getErrors())));
114     }
115     final InformationArtifactData informationArtifactData = questionnaireDataService
116         .generateQuestionnaireDataForInformationArtifact(vspId, vspActiveVersion);
117     Assert.assertNotNull(informationArtifactData);
118
119     final List<ComponentQuestionnaire> componentQuestionnaireList =
120         informationArtifactData.getComponentQuestionnaires();
121     Assert.assertEquals(componentQuestionnaireList.size(), listSizeToCheck);
122
123     return informationArtifactData;
124   }
125
126   private void assertQuestionnaireValuesAreAsExpected(
127       InformationArtifactData informationArtifactData, boolean condition) {
128     Assert.assertEquals(
129         Objects.isNull(informationArtifactData.getComponentQuestionnaires().get(0).getCompute()),
130         condition);
131     Assert.assertEquals(
132         Objects.isNull(informationArtifactData.getComponentQuestionnaires().get(0).getStorage()),
133         condition);
134   }
135
136   private ByteBuffer convertFileInputStream(final InputStream fileInputStream) {
137     byte[] fileContent = new byte[0];
138     try {
139       fileContent = IOUtils.toByteArray(fileInputStream);
140     } catch (final IOException e) {
141       LOGGER.error(String.format("Could not convert %s into byte[]", fileInputStream), e);
142     }
143     return ByteBuffer.wrap(fileContent);
144   }
145
146 }