diff options
Diffstat (limited to 'pmdictionaryvalidation/src')
12 files changed, 492 insertions, 5 deletions
diff --git a/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/util/ToResponseModelConverter.java b/pmdictionaryvalidation/src/main/java/org/onap/validation/cli/command/validate/ToResponseModelConverter.java index d78f493..674068f 100644 --- a/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/util/ToResponseModelConverter.java +++ b/pmdictionaryvalidation/src/main/java/org/onap/validation/cli/command/validate/ToResponseModelConverter.java @@ -14,11 +14,10 @@ * limitations under the License. * */ -package org.onap.validation.cli.util; +package org.onap.validation.cli.command.validate; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import org.onap.validation.cli.command.validate.ResponseModel; public final class ToResponseModelConverter { diff --git a/pmdictionaryvalidation/src/main/java/org/onap/validation/cli/core/CommandResponse.java b/pmdictionaryvalidation/src/main/java/org/onap/validation/cli/core/CommandResponse.java index e9f70ca..73db4ab 100644 --- a/pmdictionaryvalidation/src/main/java/org/onap/validation/cli/core/CommandResponse.java +++ b/pmdictionaryvalidation/src/main/java/org/onap/validation/cli/core/CommandResponse.java @@ -37,4 +37,12 @@ public class CommandResponse<T> { public enum CommandStatus { PASS, FAILED } + + @Override + public String toString() { + return "CommandResponse{" + + "result=" + result + + ", commandStatus=" + commandStatus + + '}'; + } } diff --git a/pmdictionaryvalidation/src/main/java/org/onap/validation/rule/PMDictionaryValidate.java b/pmdictionaryvalidation/src/main/java/org/onap/validation/rule/PMDictionaryValidate.java new file mode 100644 index 0000000..663dceb --- /dev/null +++ b/pmdictionaryvalidation/src/main/java/org/onap/validation/rule/PMDictionaryValidate.java @@ -0,0 +1,120 @@ +/* + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.validation.rule; + +import com.google.gson.Gson; +import org.onap.cli.fw.cmd.OnapCommand; +import org.onap.cli.fw.error.OnapCommandException; +import org.onap.cli.fw.output.OnapCommandResultType; +import org.onap.cli.fw.schema.OnapCommandSchema; +import org.onap.validation.cli.command.validate.ResponseModel; +import org.onap.validation.cli.command.validate.ResponseModel.ResponseStatus; +import org.onap.validation.cli.command.validate.ToJsonConverter; +import org.onap.validation.cli.command.validate.ToResponseModelConverter; +import org.onap.validation.cli.command.validate.ValidatePmDictionaryYamlCommand; +import org.onap.validation.cli.core.CommandException; +import org.onap.validation.cli.core.CommandResponse; +import org.onap.validation.yaml.util.Args; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; +import java.util.List; + +/** + * Validates CSAR + */ +@OnapCommandSchema(schema = "pm-dictionary-validate.yaml") +public class PMDictionaryValidate extends OnapCommand { + + private static final String VALIDATION_PASS = "PASS"; + private static final String VALIDATION_FAILED = "FAILED"; + public static final String PARAM_IN_YAML = "yaml"; + public static final String PARAM_OUT_FILE = "file"; + public static final String PARAM_OUT_DATE = "date"; + public static final String PARAM_OUT_CRITERIA = "criteria"; + public static final String PARAM_OUT_ERRORS = "errors"; + private final Gson gson = new Gson(); + + private static final Logger logger = LoggerFactory.getLogger(PMDictionaryValidate.class); + + @Override + protected void run() throws OnapCommandException { + + final Date timestamp = new Date(); + final String yamlPath = (String) getParametersMap().get(PARAM_IN_YAML).getValue(); + + try { + final ResponseModel responseModel = executeValidation(yamlPath); + handleResponse(responseModel, timestamp); + } catch (CommandException e) { + handleError(timestamp, yamlPath, e); + } + } + + private void handleResponse(ResponseModel responseModel, Date timestamp) { + setOclipResponse(responseModel.getFile(), + timestamp, + getCriteria(responseModel), + transformToJson(responseModel.getErrors()) + ); + } + + private void handleError(Date validationTimestamp, String path, CommandException e) { + setOclipResponse(path, + validationTimestamp, + VALIDATION_FAILED, + transformToJson(e.getMessage()) + ); + logger.error("Internal application error", e); + } + + private String getCriteria(ResponseModel responseModel) { + return responseModel.getStatus().equals(ResponseStatus.PASS) ? VALIDATION_PASS : VALIDATION_FAILED; + } + + private <T> String transformToJson(T data) { + return gson.toJson(data); + } + + private void setOclipResponse(String pathToFile, Date timestamp, String criteria, String errors) { + final PMDictionaryValidateResponse pmDictionaryValidateResponse = new PMDictionaryValidateResponse( + pathToFile, + timestamp.toString(), + criteria, + errors + ); + setOclipResponse(pmDictionaryValidateResponse); + } + + private void setOclipResponse(PMDictionaryValidateResponse pmDictionaryValidateResponse) { + this.getResult().getRecordsMap().get(PARAM_OUT_FILE).getValues().add(pmDictionaryValidateResponse.getFile()); + this.getResult().getRecordsMap().get(PARAM_OUT_DATE).getValues().add(pmDictionaryValidateResponse.getDate()); + this.getResult().getRecordsMap().get(PARAM_OUT_CRITERIA).getValues().add(pmDictionaryValidateResponse.getCriteria()); + this.getResult().getRecordsMap().get(PARAM_OUT_ERRORS).getValues().add(pmDictionaryValidateResponse.getErrors()); + this.getResult().setOutput(transformToJson(pmDictionaryValidateResponse)); + this.getResult().setType(OnapCommandResultType.TEXT); + } + + private ResponseModel executeValidation(String path) throws CommandException { + final ValidatePmDictionaryYamlCommand validation = new ValidatePmDictionaryYamlCommand(new ToJsonConverter()); + final CommandResponse<String> commandResponse = validation.execute(new Args(List.of(path))); + final String result = commandResponse.getResult(); + + return ToResponseModelConverter.toModel(result); + } +} diff --git a/pmdictionaryvalidation/src/main/java/org/onap/validation/rule/PMDictionaryValidateResponse.java b/pmdictionaryvalidation/src/main/java/org/onap/validation/rule/PMDictionaryValidateResponse.java new file mode 100644 index 0000000..3eb706b --- /dev/null +++ b/pmdictionaryvalidation/src/main/java/org/onap/validation/rule/PMDictionaryValidateResponse.java @@ -0,0 +1,57 @@ +/* + * Copyright 2019 Nokia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.validation.rule; + +public class PMDictionaryValidateResponse { + + public static final String PLATFORM_VTP_1_0 = "PM Dictionary Test Platform (VTP) 1.0"; + public static final String ONAP_DISCUSS_LISTS_ONAP_ORG = "ONAP VTP Team onap-discuss@lists.onap.org"; + private final String file; + private final String date; + private final String criteria; + private final String errors; + + public PMDictionaryValidateResponse(String file, String date, String criteria, String errors) { + this.file = file; + this.date = date; + this.criteria = criteria; + this.errors = errors; + } + + public String getFile() { + return file; + } + + public String getDate() { + return date; + } + + public String getContact() { + return ONAP_DISCUSS_LISTS_ONAP_ORG; + } + + public String getPlatform() { + return PLATFORM_VTP_1_0; + } + + public String getCriteria() { + return criteria; + } + + public String getErrors() { + return errors; + } +} diff --git a/pmdictionaryvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand b/pmdictionaryvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand new file mode 100644 index 0000000..72d9f1f --- /dev/null +++ b/pmdictionaryvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand @@ -0,0 +1,15 @@ +# Copyright 2020 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +org.onap.validation.rule.PMDictionaryValidate diff --git a/pmdictionaryvalidation/src/main/resources/open-cli-schema/pm-dictionary-validate.yaml b/pmdictionaryvalidation/src/main/resources/open-cli-schema/pm-dictionary-validate.yaml new file mode 100644 index 0000000..b779361 --- /dev/null +++ b/pmdictionaryvalidation/src/main/resources/open-cli-schema/pm-dictionary-validate.yaml @@ -0,0 +1,63 @@ +# Copyright 2020 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +open_cli_schema_version: 1.0 + +name: pm-dictionary-validate + +description: Validate PM Dictionary Yaml file + +info: + product: onap-honolulu + version: 1.0 + service: vnf-compliance + author: ONAP VTP Team onap-discuss@lists.onap.org + +parameters: + - name: yaml + description: Yaml file path + long_option: yaml + short_option: b + type: binary + is_optional: false + +results: + direction: portrait + attributes: + - name: file + description: PM Dictionary Yaml file + scope: short + type: string + - name: date + description: Validation date + scope: short + type: string + - name: platform + description: Platform used to test the reqs + scope: short + type: string + default_value: PM Dictionary Test Platform (VTP) 1.0 + - name: contact + description: Owner for this test case + scope: short + type: string + default_value: ONAP VTP Team onap-discuss@lists.onap.org + - name: criteria + description: Overall test reqs passed? PASS or FAILED + scope: short + type: string + - name: errors + description: All test cases errors + scope: short + type: json diff --git a/pmdictionaryvalidation/src/test/java/org/onap/functional/PmDictionaryValidateRuleFunctionalTest.java b/pmdictionaryvalidation/src/test/java/org/onap/functional/PmDictionaryValidateRuleFunctionalTest.java new file mode 100644 index 0000000..fc212e7 --- /dev/null +++ b/pmdictionaryvalidation/src/test/java/org/onap/functional/PmDictionaryValidateRuleFunctionalTest.java @@ -0,0 +1,133 @@ +/* + * Copyright 2020 Nokia + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.functional; + +import org.junit.Test; +import org.onap.functional.util.OnapCliWrapper; +import org.onap.validation.rule.PMDictionaryValidate; +import org.onap.validation.rule.PMDictionaryValidateResponse; + +import java.net.URISyntaxException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.onap.functional.util.ValidationUtility.OPERATION_STATUS_FAILED; +import static org.onap.functional.util.ValidationUtility.OPERATION_STATUS_PASS; +import static org.onap.functional.util.ValidationUtility.getCliCommandValidationResult; +import static org.onap.functional.util.ValidationUtility.verifyThatOperationFinishedWithError; +import static org.onap.functional.util.ValidationUtility.verifyThatOperationFinishedWithoutAnyError; + + +public class PmDictionaryValidateRuleFunctionalTest { + + + private static final String YAML_SCHEMA_SIMPLE_VALID_SCHEMA_YAML = "yaml_schema/Simple_Valid_Schema.yaml"; + private static final String NO_ERRORS = "[]"; + private static final String YAML_SCHEMA_PM_DICTIONARY_YAML = "yaml_schema/PM_Dictionary.yaml"; + private static final String PATH_TO_NON_EXITING_FILE_YAML = "path/to/nonExitingFile.yaml"; + private static final String NOT_YAML_FILE_TXT = "Not_Yaml_File.txt"; + + @Test + public void shouldSuccessfullyValidatePMDictionaryYamlFile() throws URISyntaxException { + // given + OnapCliWrapper cli = new OnapCliWrapper(createPnfValidationRequestInfo(YAML_SCHEMA_SIMPLE_VALID_SCHEMA_YAML)); + + // when + cli.handle(); + + // then + final PMDictionaryValidateResponse result = getCliCommandValidationResult(cli, PMDictionaryValidateResponse.class); + + assertThat(result.getFile()).contains(YAML_SCHEMA_SIMPLE_VALID_SCHEMA_YAML); + assertThat(result.getPlatform()).contains(PMDictionaryValidateResponse.PLATFORM_VTP_1_0); + assertThat(result.getContact()).contains(PMDictionaryValidateResponse.ONAP_DISCUSS_LISTS_ONAP_ORG); + assertThat(result.getCriteria()).isEqualTo(OPERATION_STATUS_PASS); + assertThat(result.getErrors()).isEqualTo(NO_ERRORS); + verifyThatOperationFinishedWithoutAnyError(cli); + } + + @Test + public void shouldFailsWhenPMDictionaryYamlFileHasSomeErrors() throws URISyntaxException { + // given + OnapCliWrapper cli = new OnapCliWrapper(createPnfValidationRequestInfo(YAML_SCHEMA_PM_DICTIONARY_YAML)); + + // when + cli.handle(); + + // then + final PMDictionaryValidateResponse result = getCliCommandValidationResult(cli, PMDictionaryValidateResponse.class); + + assertThat(result.getFile()).contains(YAML_SCHEMA_PM_DICTIONARY_YAML); + assertThat(result.getPlatform()).contains(PMDictionaryValidateResponse.PLATFORM_VTP_1_0); + assertThat(result.getContact()).contains(PMDictionaryValidateResponse.ONAP_DISCUSS_LISTS_ONAP_ORG); + assertThat(result.getCriteria()).isEqualTo(OPERATION_STATUS_FAILED); + final String errors = result.getErrors(); + assertThat(errors).contains( + "Value(s) is/are not in array of accepted values.", + "accepted value(s): [float, uint32, uint64]", + "Key not found: measChangeType", + "accepted value(s): [X, Y, Z]" + ); + verifyThatOperationFinishedWithoutAnyError(cli); + } + + @Test + public void shouldReportAnErrorWhenYamlFileDoesNotExist() { + // given + OnapCliWrapper cli = new OnapCliWrapper(new String[]{PATH_TO_NON_EXITING_FILE_YAML}); + + // when + cli.handle(); + + verifyThatOperationFinishedWithError(cli); + } + + + @Test + public void shouldReportThatValidationFailedWithInternalError() throws URISyntaxException { + // given + OnapCliWrapper cli = new OnapCliWrapper(createPnfValidationRequestInfo(NOT_YAML_FILE_TXT)); + + // when + cli.handle(); + + // then + final PMDictionaryValidateResponse result = getCliCommandValidationResult(cli, PMDictionaryValidateResponse.class); + + assertThat(result.getFile()).contains(NOT_YAML_FILE_TXT); + assertThat(result.getPlatform()).contains(PMDictionaryValidateResponse.PLATFORM_VTP_1_0); + assertThat(result.getContact()).contains(PMDictionaryValidateResponse.ONAP_DISCUSS_LISTS_ONAP_ORG); + assertThat(result.getCriteria()).isEqualTo(OPERATION_STATUS_FAILED); + assertThat(result.getErrors()).contains("Provided yaml file has invalid structure!"); + verifyThatOperationFinishedWithoutAnyError(cli); + } + + + private String[] createPnfValidationRequestInfo(String yamlPath) throws URISyntaxException { + return new String[]{ + "--product", "onap-honolulu", + "pm-dictionary-validate", + "--format", "json", + "--yaml", absoluteFilePath(yamlPath) + }; + } + + + public static String absoluteFilePath(String relativeFilePath) throws URISyntaxException { + return PMDictionaryValidate.class.getClassLoader().getResource(relativeFilePath) + .toURI().getPath(); + } +} diff --git a/pmdictionaryvalidation/src/test/java/org/onap/functional/util/OnapCliWrapper.java b/pmdictionaryvalidation/src/test/java/org/onap/functional/util/OnapCliWrapper.java new file mode 100644 index 0000000..347a7bb --- /dev/null +++ b/pmdictionaryvalidation/src/test/java/org/onap/functional/util/OnapCliWrapper.java @@ -0,0 +1,42 @@ +/* + * Copyright 2020 Nokia + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.functional.util; + + +import org.onap.cli.fw.cmd.OnapCommand; +import org.onap.cli.fw.error.OnapCommandException; +import org.onap.cli.fw.output.OnapCommandResult; +import org.onap.cli.main.OnapCli; + +public class OnapCliWrapper extends OnapCli { + + private OnapCommandResult commandResult; + + public OnapCliWrapper(String[] args) { + super(args); + } + + @Override + public void handleTracking(OnapCommand cmd) throws OnapCommandException { + super.handleTracking(cmd); + this.commandResult = cmd.getResult(); + } + + public OnapCommandResult getCommandResult() { + return this.commandResult; + } +} diff --git a/pmdictionaryvalidation/src/test/java/org/onap/functional/util/ValidationUtility.java b/pmdictionaryvalidation/src/test/java/org/onap/functional/util/ValidationUtility.java new file mode 100644 index 0000000..3a497f4 --- /dev/null +++ b/pmdictionaryvalidation/src/test/java/org/onap/functional/util/ValidationUtility.java @@ -0,0 +1,49 @@ +/* + * Copyright 2020 Nokia + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.functional.util; + +import com.google.gson.Gson; +import org.onap.cli.fw.output.OnapCommandResult; + + +import static org.assertj.core.api.Assertions.assertThat; + + +public final class ValidationUtility { + + private static final int NO_ERROR_CODE = 0; + public static final int ERROR_CODE = 1; + + private ValidationUtility(){} + + public static final String OPERATION_STATUS_PASS = "PASS"; + public static final String OPERATION_STATUS_FAILED = "FAILED"; + + public static <T> T getCliCommandValidationResult(OnapCliWrapper cli, Class<T> clazz) { + final OnapCommandResult onapCommandResult = cli.getCommandResult(); + final String json = onapCommandResult.getOutput().toString(); + return new Gson().fromJson(json, clazz); + } + + public static void verifyThatOperationFinishedWithoutAnyError(OnapCliWrapper cli) { + assertThat(cli.getExitCode()).isEqualTo(NO_ERROR_CODE); + } + + public static void verifyThatOperationFinishedWithError(OnapCliWrapper cli) { + assertThat(cli.getExitCode()).isEqualTo(ERROR_CODE); + } +} diff --git a/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/MainCITest.java b/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/MainCITest.java index c6eb2ad..307d388 100644 --- a/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/MainCITest.java +++ b/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/MainCITest.java @@ -28,7 +28,7 @@ import org.onap.validation.cli.command.validate.ResponseStorage; import org.onap.validation.cli.core.Cli; import org.onap.validation.cli.core.CommandException; import org.onap.validation.cli.core.Console; -import org.onap.validation.cli.util.ToResponseModelConverter; +import org.onap.validation.cli.command.validate.ToResponseModelConverter; import org.onap.validation.yaml.YamlLoadingUtils; import java.io.IOException; diff --git a/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ToJsonConverterTest.java b/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ToJsonConverterTest.java index 3c97681..06a15bb 100644 --- a/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ToJsonConverterTest.java +++ b/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ToJsonConverterTest.java @@ -22,7 +22,8 @@ import org.onap.validation.yaml.error.YamlDocumentValidationError; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.onap.validation.cli.util.ToResponseModelConverter.toModel; +import static org.onap.validation.cli.command.validate.ToResponseModelConverter.toModel; + class ToJsonConverterTest { diff --git a/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ValidateYamlCommandTest.java b/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ValidateYamlCommandTest.java index 6347f75..44622db 100644 --- a/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ValidateYamlCommandTest.java +++ b/pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ValidateYamlCommandTest.java @@ -29,7 +29,7 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.onap.validation.cli.util.ToResponseModelConverter.toModel; +import static org.onap.validation.cli.command.validate.ToResponseModelConverter.toModel; @ExtendWith(MockitoExtension.class) class ValidateYamlCommandTest { |