summaryrefslogtreecommitdiffstats
path: root/pmdictionaryvalidation
diff options
context:
space:
mode:
authorBogumil Zebek <bogumil.zebek@nokia.com>2020-12-23 10:02:43 +0100
committerZebek Bogumil <bogumil.zebek@nokia.com>2021-01-07 07:15:10 +0100
commit2a80695953ff5acbf80596249906708f58c67420 (patch)
tree2d35eb708e17209b37e52be2e91911542aa94a92 /pmdictionaryvalidation
parent25673a3551f2bf15f23afbbfe986947c6a975c91 (diff)
PM Validation Yaml rule
- Add PM Validation Yaml file as OCLIP rule Change-Id: Ida3abc79776a04b56d34e0b223de75225981eb6a Issue-ID: VNFSDK-721 Signed-off-by: Zebek Bogumil <bogumil.zebek@nokia.com>
Diffstat (limited to 'pmdictionaryvalidation')
-rw-r--r--pmdictionaryvalidation/pom.xml19
-rw-r--r--pmdictionaryvalidation/src/main/java/org/onap/validation/cli/command/validate/ToResponseModelConverter.java (renamed from pmdictionaryvalidation/src/test/java/org/onap/validation/cli/util/ToResponseModelConverter.java)3
-rw-r--r--pmdictionaryvalidation/src/main/java/org/onap/validation/cli/core/CommandResponse.java8
-rw-r--r--pmdictionaryvalidation/src/main/java/org/onap/validation/rule/PMDictionaryValidate.java120
-rw-r--r--pmdictionaryvalidation/src/main/java/org/onap/validation/rule/PMDictionaryValidateResponse.java57
-rw-r--r--pmdictionaryvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand15
-rw-r--r--pmdictionaryvalidation/src/main/resources/open-cli-schema/pm-dictionary-validate.yaml63
-rw-r--r--pmdictionaryvalidation/src/test/java/org/onap/functional/PmDictionaryValidateRuleFunctionalTest.java133
-rw-r--r--pmdictionaryvalidation/src/test/java/org/onap/functional/util/OnapCliWrapper.java42
-rw-r--r--pmdictionaryvalidation/src/test/java/org/onap/functional/util/ValidationUtility.java49
-rw-r--r--pmdictionaryvalidation/src/test/java/org/onap/validation/cli/MainCITest.java2
-rw-r--r--pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ToJsonConverterTest.java3
-rw-r--r--pmdictionaryvalidation/src/test/java/org/onap/validation/cli/command/validate/ValidateYamlCommandTest.java2
13 files changed, 511 insertions, 5 deletions
diff --git a/pmdictionaryvalidation/pom.xml b/pmdictionaryvalidation/pom.xml
index f9f5ed2..d677a9e 100644
--- a/pmdictionaryvalidation/pom.xml
+++ b/pmdictionaryvalidation/pom.xml
@@ -34,9 +34,22 @@
<mockito-core.version>3.5.0</mockito-core.version>
<mockito-junit-jupiter.version>2.23.0</mockito-junit-jupiter.version>
<gson.version>2.8.6</gson.version>
+ <cli-framework.version>5.0.3</cli-framework.version>
+ <cli-main.version>5.0.2</cli-main.version>
</properties>
<dependencies>
<dependency>
+ <groupId>org.onap.cli</groupId>
+ <artifactId>cli-framework</artifactId>
+ <version>${cli-framework.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j-slf4j-impl.version}</version>
@@ -88,6 +101,12 @@
<version>${mockito-junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.onap.cli</groupId>
+ <artifactId>cli-main</artifactId>
+ <version>${cli-main.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
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 {