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
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.
16 * SPDX-License-Identifier: Apache-2.0
17 * ============LICENSE_END=========================================================
19 package org.openecomp.sdc.validation.impl.validators;
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;
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;
41 @ExtendWith(MockitoExtension.class)
42 class HelmValidatorTest {
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/";
55 private HelmValidator validator;
57 private HelmValidatorHttpClient helmValidatorHttpClient;
59 private HelmValidatorConfig helmValidatorConfig;
62 void shouldCallHelmValidatorForEveryChartWhenIsEnabled() throws Exception {
63 when(helmValidatorConfig.isEnabled()).thenReturn(true);
64 String chartPath = RESOURCE_PATH + "/valid_two_charts";
66 var messages = new ValidationTestUtil().testValidator(validator, chartPath);
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());
77 void shouldNotCallHelmValidatorClientWhenIsDisabled() throws Exception {
78 when(helmValidatorConfig.isEnabled()).thenReturn(false);
79 String chartPath = RESOURCE_PATH + "/valid_two_charts";
81 var messages = new ValidationTestUtil().testValidator(validator, chartPath);
83 verify(helmValidatorHttpClient, times(0)).execute(any(), any(), any());
84 assertEquals(0, messages.size());
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));
96 var messages = new ValidationTestUtil().testValidator(validator, chartPath);
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());
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));
116 var messages = new ValidationTestUtil().testValidator(validator, validChartPath);
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());
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));
133 var messages = new ValidationTestUtil().testValidator(validator, chartPath);
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());