f639acafaba1a535b14e06e7b7d046d67f784de6
[sdc.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 Nokia
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        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.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19 package org.openecomp.sdc.validation.impl.validators;
20
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.mockito.ArgumentMatchers.any;
23 import static org.mockito.ArgumentMatchers.eq;
24 import static org.mockito.Mockito.times;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.when;
27
28 import java.nio.file.Files;
29 import java.nio.file.Path;
30 import org.junit.jupiter.api.Test;
31 import org.junit.jupiter.api.extension.ExtendWith;
32 import org.mockito.InjectMocks;
33 import org.mockito.Mock;
34 import org.mockito.junit.jupiter.MockitoExtension;
35 import org.openecomp.sdc.common.http.client.api.HttpResponse;
36 import org.openecomp.sdc.datatypes.error.ErrorLevel;
37 import org.openecomp.sdc.validation.impl.util.HelmValidatorHttpClient;
38 import org.openecomp.sdc.validation.type.helmvalidator.HelmValidatorConfig;
39 import org.openecomp.sdc.validation.util.ValidationTestUtil;
40
41 @ExtendWith(MockitoExtension.class)
42 class HelmValidatorTest {
43
44     private static final String RESOURCE_PATH = "/org/openecomp/validation/validators/helm_validator";
45     private static final String VALIDATOR_RESPONSE_WITH_ERRORS = "{\"renderErrors\":[\"[ERROR] render error\"],\""
46         + "lintWarning\":[\"[WARNING] warning\"],"
47         + "\"lintError\":[\"[ERROR] lint error\"],"
48         + "\"versionUsed\":\"3.5.2\",\"valid\":false,\"deployable\":true}";
49     private static final String VALIDATOR_RESPONSE_WITHOUT_LINTING = "{\"renderErrors\":[\"[ERROR] render error 1\"],"
50         + "\"versionUsed\":\"3.5.2\",\"valid\":false,\"deployable\":true}";
51     private static final String VALIDATOR_ERROR_RESPONSE = "{\"message\":\"Error response message\"}";
52     private static final String TEST_RESOURCES = "./src/test/resources/";
53
54     @InjectMocks
55     private HelmValidator validator;
56     @Mock
57     private HelmValidatorHttpClient helmValidatorHttpClient;
58     @Mock
59     private HelmValidatorConfig helmValidatorConfig;
60
61     @Test
62     void shouldCallHelmValidatorForEveryChartWhenIsEnabled() throws Exception {
63         when(helmValidatorConfig.isEnabled()).thenReturn(true);
64         String chartPath = RESOURCE_PATH + "/valid_two_charts";
65
66         var messages = new ValidationTestUtil().testValidator(validator, chartPath);
67
68         byte[] firstChartContent = Files.readAllBytes(Path.of(TEST_RESOURCES + chartPath + "/chart1.tgz"));
69         byte[] secondChartContent = Files.readAllBytes(Path.of(TEST_RESOURCES + chartPath + "/chart2.tgz"));
70         verify(helmValidatorHttpClient).execute("chart1.tgz", firstChartContent, helmValidatorConfig);
71         verify(helmValidatorHttpClient).execute("chart2.tgz", secondChartContent, helmValidatorConfig);
72         verify(helmValidatorHttpClient, times(2)).execute(any(), any(), any());
73         assertEquals(2, messages.size());
74     }
75
76     @Test
77     void shouldNotCallHelmValidatorClientWhenIsDisabled() throws Exception {
78         when(helmValidatorConfig.isEnabled()).thenReturn(false);
79         String chartPath = RESOURCE_PATH + "/valid_two_charts";
80
81         var messages = new ValidationTestUtil().testValidator(validator, chartPath);
82
83         verify(helmValidatorHttpClient, times(0)).execute(any(), any(), any());
84         assertEquals(0, messages.size());
85     }
86
87     @Test
88     void shouldContainsMessagesForEveryChartWhenIsEnabled() throws Exception {
89         when(helmValidatorConfig.isEnabled()).thenReturn(true);
90         String chartPath = RESOURCE_PATH + "/valid_two_charts";
91         when(helmValidatorHttpClient.execute(eq("chart1.tgz"), any(), any()))
92             .thenReturn(new HttpResponse<>(VALIDATOR_RESPONSE_WITH_ERRORS, 200));
93         when(helmValidatorHttpClient.execute(eq("chart2.tgz"), any(), any()))
94             .thenReturn(new HttpResponse<>(VALIDATOR_RESPONSE_WITHOUT_LINTING, 200));
95
96         var messages = new ValidationTestUtil().testValidator(validator, chartPath);
97
98         assertEquals(2, messages.size());
99         var firstChartErrors = messages.get("chart1.tgz").getErrorMessageList();
100         var secondChartErrors = messages.get("chart2.tgz").getErrorMessageList();
101         assertEquals(3, firstChartErrors.size());
102         assertEquals(1, secondChartErrors.size());
103         assertEquals("ERROR: [HELM VALIDATOR]: [ERROR] render error", firstChartErrors.get(0).getMessage());
104         assertEquals("WARNING: [HELM VALIDATOR]: [ERROR] lint error", firstChartErrors.get(1).getMessage());
105         assertEquals("WARNING: [HELM VALIDATOR]: [WARNING] warning", firstChartErrors.get(2).getMessage());
106         assertEquals("ERROR: [HELM VALIDATOR]: [ERROR] render error 1", secondChartErrors.get(0).getMessage());
107     }
108
109     @Test
110     void shouldCorectlySetErrorsAndWarningsFromHelmValidator() throws Exception {
111         String validChartPath = RESOURCE_PATH + "/valid_chart";
112         when(helmValidatorConfig.isEnabled()).thenReturn(true);
113         when(helmValidatorHttpClient.execute(any(), any(), any()))
114             .thenReturn(new HttpResponse<>(VALIDATOR_RESPONSE_WITH_ERRORS, 200));
115
116         var messages = new ValidationTestUtil().testValidator(validator, validChartPath);
117
118         var chartErrors = messages.get("chart.tgz").getErrorMessageList();
119         assertEquals(1, messages.size());
120         assertEquals(3, chartErrors.size());
121         assertEquals("ERROR: [HELM VALIDATOR]: [ERROR] render error", chartErrors.get(0).getMessage());
122         assertEquals("WARNING: [HELM VALIDATOR]: [ERROR] lint error", chartErrors.get(1).getMessage());
123         assertEquals("WARNING: [HELM VALIDATOR]: [WARNING] warning", chartErrors.get(2).getMessage());
124     }
125
126     @Test
127     void shouldAddWarningWhenErrorResponseFromValidator() throws Exception {
128         String chartPath = RESOURCE_PATH + "/valid_chart";
129         when(helmValidatorConfig.isEnabled()).thenReturn(true);
130         when(helmValidatorHttpClient.execute(any(), any(), any()))
131             .thenReturn(new HttpResponse<>(VALIDATOR_ERROR_RESPONSE, 400));
132
133         var messages = new ValidationTestUtil().testValidator(validator, chartPath);
134
135         var chartErrors = messages.get("chart.tgz").getErrorMessageList();
136         assertEquals(1, chartErrors.size());
137         assertEquals(ErrorLevel.WARNING, chartErrors.get(0).getLevel());
138         assertEquals("WARNING: [HELM VALIDATOR]: Error response message", chartErrors.get(0).getMessage());
139     }
140
141 }