diff options
author | Adam Wudzinski <adam.wudzinski@nokia.com> | 2020-11-27 12:50:27 +0100 |
---|---|---|
committer | Vasyl Razinkov <vasyl.razinkov@est.tech> | 2020-12-02 12:59:56 +0000 |
commit | ad99b805537fc8f3103fa5646abe5342924e10cd (patch) | |
tree | 266fbadbef9ea2412455b907e9ac688f9e746d60 /openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test | |
parent | e7f2dfba0cb4d917c8da83c319b47ae279a6151e (diff) |
[SDC] PM_Dictionary file validation for ZIP onboarding
Use PM_Dictionary validator from VNF-SDK to validate PM_Dictionary files when onboarding ZIP package
Issue-ID: SDC-3390
Signed-off-by: Adam Wudzinski <adam.wudzinski@nokia.com>
Change-Id: I03fd622393d675977527b9845b6cf8b87b2ec0a3
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test')
4 files changed, 629 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/FileExtensionUtilsTest.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/FileExtensionUtilsTest.java new file mode 100644 index 0000000000..53a2cfa650 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/FileExtensionUtilsTest.java @@ -0,0 +1,111 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2020 Nokia Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ +package org.openecomp.sdc.validation.impl.validators; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.jupiter.api.Test; + +class FileExtensionUtilsTest { + + private static final Set<String> VALID_YAML_EXTENSIONS = Set.of( + ".yaml", + ".yml", + ".env" + ); + private static final Set<String> INVALID_YAML_EXTENSIONS = Set.of( + ".txt", + ".java", + ".properties" + ); + + private static final Set<String> VALID_PM_DICTIONARY_EXTENSIONS = Set.of( + "pmdict.yml", + "pmdict.yaml", + "pm_dict.yml", + "pm_dict.yaml", + "pmdictionary.yml", + "pmdictionary.yaml", + "pm_dictionary.yml", + "pm_dictionary.yaml" + ); + private static final Set<String> INVALID_PM_DICTIONARY_EXTENSIONS = Set.of( + "pmdict.txt", + "pmdict.java", + "pm.yml" + ); + + private static final Set<String> TEST_FILE_PREFIXES = Set.of( + "test", + "test_file" + ); + + @Test + void shouldMatchProperYamlExtensions() { + final boolean allValidFilesMatched = constructTestFilenamesWithExtensions(VALID_YAML_EXTENSIONS) + .allMatch(FileExtensionUtils::isYaml); + + assertTrue(allValidFilesMatched); + } + + @Test + void shouldNotMatchImproperYamlExtensions() { + final boolean allInvalidFilesNotMatched = constructTestFilenamesWithExtensions(INVALID_YAML_EXTENSIONS) + .noneMatch(FileExtensionUtils::isYaml); + + assertTrue(allInvalidFilesNotMatched); + } + + @Test + void shouldMatchProperPmDictionaryExtensions() { + final boolean allValidFilesMatched = constructTestFilenamesWithExtensions(VALID_PM_DICTIONARY_EXTENSIONS) + .allMatch(FileExtensionUtils::isPmDictionary); + + assertTrue(allValidFilesMatched); + } + + @Test + void shouldNotMatchImproperPmDictionaryExtensions() { + final boolean allInvalidFilesNotMatched = constructTestFilenamesWithExtensions(INVALID_PM_DICTIONARY_EXTENSIONS) + .noneMatch(FileExtensionUtils::isPmDictionary); + + assertTrue(allInvalidFilesNotMatched); + } + + private Stream<String> constructTestFilenamesWithExtensions(Set<String> extensions) { + return extensions.stream() + .flatMap(ext -> prepareFilenamesWithExtension(ext).stream()); + } + + private Set<String> prepareFilenamesWithExtension(String extension) { + return Stream.concat( + joinTestNamesWithExtension(extension.toLowerCase()), + joinTestNamesWithExtension(extension.toUpperCase()) + ).collect(Collectors.toSet()); + } + + private Stream<String> joinTestNamesWithExtension(String extension) { + return TEST_FILE_PREFIXES.stream() + .map(prefix -> prefix + extension); + } +}
\ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/PmDictionaryValidatorTest.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/PmDictionaryValidatorTest.java new file mode 100644 index 0000000000..d841694a23 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/PmDictionaryValidatorTest.java @@ -0,0 +1,60 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2020 Nokia Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.validation.impl.validators; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.openecomp.core.validation.types.MessageContainer; +import org.openecomp.sdc.validation.util.ValidationTestUtil; + +public class PmDictionaryValidatorTest { + + private static final String RESOURCE_PATH = "/org/openecomp/validation/validators/pm_dictionary_validator"; + private static final String VALID_PM_DICTIONARY_YAML = "valid_pm_dictionary.yaml"; + private static final String INVALID_PM_DICTIONARY_YAML = "invalid_pm_dictionary.yaml"; + + @Test + public void shouldNotReturnErrorsWhenValidPmDict() { + Map<String, MessageContainer> messages = runValidation( + RESOURCE_PATH + "/" + VALID_PM_DICTIONARY_YAML); + + assertNotNull(messages); + assertEquals(0, messages.size()); + } + + @Test + public void shouldReturnErrorsWhenInvalidPmDict() { + Map<String, MessageContainer> messages = runValidation( + RESOURCE_PATH + "/" + INVALID_PM_DICTIONARY_YAML); + + assertNotNull(messages); + assertNotNull(messages.get(INVALID_PM_DICTIONARY_YAML)); + assertEquals(4, messages.get(INVALID_PM_DICTIONARY_YAML).getErrorMessageList().size()); + } + + private Map<String, MessageContainer> runValidation(String path) { + PmDictionaryValidator validator = new PmDictionaryValidator(); + return ValidationTestUtil.testValidator(validator, path); + } +}
\ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/pm_dictionary_validator/invalid_pm_dictionary.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/pm_dictionary_validator/invalid_pm_dictionary.yaml new file mode 100644 index 0000000000..cfeb497eeb --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/pm_dictionary_validator/invalid_pm_dictionary.yaml @@ -0,0 +1,228 @@ +--- +# PM Dictionary schema specifying and describing the meta information +# used to define perf3gpp measurements in the PM Dictionary +pmMetaData: + presence: required + structure: + pmHeader: + presence: required + structure: + nfType: + presence: required + comment: NF type; should match the nfName-vendor string used in the fileReady + or perf3gpp eventName + pmDefSchemaVsn: + presence: required + value: 2.0 + comment: PM Dictionary Schema Version from the VES Event Registration specification + pmDefVsn: + presence: required + comment: vendor-defined PM Dictionary version + pmFields: + presence: required + structure: + iMeasInfoId: + presence: required + comment: vendor-defined integer measurement group identifier + iMeasType: + presence: required + comment: vendor-defined integer identifier for the measType; must be combined + with measInfoId to identify a specific measurement. + measChangeType: + presence: required + value: + - added + - modified + - deleted + comment: indicates the type of change that occurred during measLastChange + measCollectionMethod: + presence: required + value: + - CC + - SI + - DER + - Gauge + - Average + comment: the measurement collection method; CC, SI, DER and Gauge are as + defined in 3GPP; average contains the average value of the measurement + during the granularity period + measCondition: + presence: required + comment: description of the condition causing the measurement + measDescription: + presence: required + comment: description of the measurement information and purpose + measFamily: + presence: required + comment: abbreviation for a family of measurements, in 3GPP format, or vendor + defined + measInfoId: + presence: required + comment: name for a group of related measurements in 3GPP format or vendor + defined + measLastChange: + presence: required + comment: version of the PM Dictionary the last time this measurement was + added, modified or deleted + measObjClass: + presence: required + value: + - NGBTS + - NGCELL + - IPNO + - IPSEC + - ETHIF + comment: measurement object class + measResultRange: + presence: optional + comment: range of the measurement result; only necessary when the range + is smaller than the full range of the data type + measResultType: + presence: required + value: + - float + - uint32 + - uint64 + comment: data type of the measurement result + measResultUnits: + presence: required + value: + - seconds + - minutes + - nanoseconds + - microseconds + - dB + - number + - kilobytes + - bytes + - ethernetFrames + - packets + - users + comment: units of measure for the measurement result + measType: + presence: required + comment: measurement name in 3GPP or vendor-specific format; vendor specific + names are preceded with VS + measAdditionalFields: + presence: required + comment: vendor-specific PM Dictionary fields + structure: + vendorField1: + presence: required + value: + - X + - Y + - Z + comment: vendor field 1 description + vendorField2: + presence: optional + value: + - A + - B + comment: vendor field 2 description. +... +# PM Dictionary perf3gpp measurements for the gnb-Nokia NF (bracket style yaml) +--- +pmMetaData: + pmHeader: + nfType: gnb-Nokia + pmDefSchemaVsn: 2.0 + pmDefVsn: 5G19_1906_002 + pmFields: + iMeasInfoId: 2204 + iMeasType: 1 + measCollectionMethod: CC + measCondition: "This measurement is updated when X2AP: SgNB Modification Required message is sent to MeNB + with the SCG Change Indication set as PSCellChange." + measDescription: "This counter indicates the number of intra gNB intra frequency PSCell change attempts." + measFamily: NINFC + measInfoId: "NR Intra Frequency PSCell Change" + measLastChange: 5G18A_1807_003 + measObjClass: NGCELL + measResultRange: 0-4096 + measResultType: integer + measResultUnits: number + measType: VS.NINFC.IntraFrPscelChAttempt + measAdditionalFields: + vendorField1: X + vendorField2: B +... +--- +pmMetaData: + pmHeader: + nfType: gnb-Nokia + pmDefSchemaVsn: 2.0 + pmDefVsn: 5G19_1906_002 + pmFields: + iMeasInfoId: 2204 + iMeasType: 2 + measCollectionMethod: CC + measCondition: "This measurement is updated when the TDCoverall timer has elapsed before gNB receives the X2AP: SgNB Modification Confirm message." + measDescription: "This measurement the number of intra gNB intra frequency PSCell change failures due to TDCoverall timer expiry." + measFamily: NINFC + measInfoId: "NR Intra Frequency PSCell Change" + measLastChange: 5G18A_1807_003 + measObjClass: NGCELL + measResultRange: 0-4096 + measResultType: float + measResultUnits: number + measType: VS.NINFC.IntraFrPscelChFailTdcExp + measAdditionalFields: + vendorField1: + - Y + - X +... +--- +pmMetaData: + pmHeader: + nfType: gnb-Nokia + pmDefSchemaVsn: 2.0 + pmDefVsn: 5G19_1906_002 + pmFields: + iMeasInfoId: 2206 + iMeasType: 1 + measCondition: "This measurement is updated when MeNB replies to X2AP: SgNB Modification Required message with the X2AP: SgNB Modification Refuse message." + measCollectionMethod: CC + measDescription: "This counter indicates the number of intra gNB intra frequency PSCell change failures due to MeNB refusal." + measFamily: NINFC + measInfoId: "NR Intra Frequency PSCell Change" + measLastChange: 5G19_1906_002 + measObjClass: NGCELL + measResultRange: 0-4096 + measResultType: float + measChangeType: added + measResultUnits: number + measType: VS.NINFC.IntraFrPscelChFailMenbRef + measAdditionalFields: + vendorField1: + - Z + - A + vendorField2: A +... +--- +pmMetaData: + pmHeader: + nfType: gnb-Nokia + pmDefSchemaVsn: 2.0 + pmDefVsn: 5G19_1906_002 + pmFields: + iMeasInfoId: 2206 + iMeasType: 1 + measCondition: "This measurement is updated when MeNB replies to X2AP: SgNB Modification Required message with the X2AP: SgNB Modification Refuse message." + measCollectionMethod: CC + measDescription: "This counter indicates the number of intra gNB intra frequency PSCell change failures due to MeNB refusal." + measFamily: NINFC + measInfoId: "NR Intra Frequency PSCell Change" + measLastChange: 5G19_1906_002 + measObjClass: NGCELL + measResultRange: 0-4096 + measResultType: float + measChangeType: added + measResultUnits: number + measType: VS.NINFC.IntraFrPscelChFailMenbRef + measAdditionalFields: + vendorField1: + - X + - Y + vendorField2: A +... diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/pm_dictionary_validator/valid_pm_dictionary.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/pm_dictionary_validator/valid_pm_dictionary.yaml new file mode 100644 index 0000000000..1caab5fc73 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/pm_dictionary_validator/valid_pm_dictionary.yaml @@ -0,0 +1,230 @@ +--- +# PM Dictionary schema specifying and describing the meta information +# used to define perf3gpp measurements in the PM Dictionary +pmMetaData: + presence: required + structure: + pmHeader: + presence: required + structure: + nfType: + presence: required + comment: NF type; should match the nfName-vendor string used in the fileReady + or perf3gpp eventName + pmDefSchemaVsn: + presence: required + value: 2.0 + comment: PM Dictionary Schema Version from the VES Event Registration specification + pmDefVsn: + presence: required + comment: vendor-defined PM Dictionary version + pmFields: + presence: required + structure: + iMeasInfoId: + presence: required + comment: vendor-defined integer measurement group identifier + iMeasType: + presence: required + comment: vendor-defined integer identifier for the measType; must be combined + with measInfoId to identify a specific measurement. + measChangeType: + presence: required + value: + - added + - modified + - deleted + comment: indicates the type of change that occurred during measLastChange + measCollectionMethod: + presence: required + value: + - CC + - SI + - DER + - Gauge + - Average + comment: the measurement collection method; CC, SI, DER and Gauge are as + defined in 3GPP; average contains the average value of the measurement + during the granularity period + measCondition: + presence: required + comment: description of the condition causing the measurement + measDescription: + presence: required + comment: description of the measurement information and purpose + measFamily: + presence: required + comment: abbreviation for a family of measurements, in 3GPP format, or vendor + defined + measInfoId: + presence: required + comment: name for a group of related measurements in 3GPP format or vendor + defined + measLastChange: + presence: required + comment: version of the PM Dictionary the last time this measurement was + added, modified or deleted + measObjClass: + presence: required + value: + - NGBTS + - NGCELL + - IPNO + - IPSEC + - ETHIF + comment: measurement object class + measResultRange: + presence: optional + comment: range of the measurement result; only necessary when the range + is smaller than the full range of the data type + measResultType: + presence: required + value: + - float + - uint32 + - uint64 + comment: data type of the measurement result + measResultUnits: + presence: required + value: + - seconds + - minutes + - nanoseconds + - microseconds + - dB + - number + - kilobytes + - bytes + - ethernetFrames + - packets + - users + comment: units of measure for the measurement result + measType: + presence: required + comment: measurement name in 3GPP or vendor-specific format; vendor specific + names are preceded with VS + measAdditionalFields: + presence: required + comment: vendor-specific PM Dictionary fields + structure: + vendorField1: + presence: required + value: + - X + - Y + - Z + comment: vendor field 1 description + vendorField2: + presence: optional + value: + - A + - B + comment: vendor field 2 description. +... +# PM Dictionary perf3gpp measurements for the gnb-Nokia NF (bracket style yaml) +--- +pmMetaData: + pmHeader: + nfType: gnb-Nokia + pmDefSchemaVsn: 2.0 + pmDefVsn: 5G19_1906_002 + pmFields: + iMeasInfoId: 2204 + iMeasType: 1 + measCollectionMethod: CC + measCondition: "This measurement is updated when X2AP: SgNB Modification Required message is sent to MeNB + with the SCG Change Indication set as PSCellChange." + measDescription: "This counter indicates the number of intra gNB intra frequency PSCell change attempts." + measFamily: NINFC + measInfoId: "NR Intra Frequency PSCell Change" + measLastChange: 5G18A_1807_003 + measObjClass: NGCELL + measResultRange: 0-4096 + measResultType: float + measChangeType: added + measResultUnits: number + measType: VS.NINFC.IntraFrPscelChAttempt + measAdditionalFields: + vendorField1: X + vendorField2: B +... +--- +pmMetaData: + pmHeader: + nfType: gnb-Nokia + pmDefSchemaVsn: 2.0 + pmDefVsn: 5G19_1906_002 + pmFields: + iMeasInfoId: 2204 + iMeasType: 2 + measCollectionMethod: CC + measCondition: "This measurement is updated when the TDCoverall timer has elapsed before gNB receives the X2AP: SgNB Modification Confirm message." + measDescription: "This measurement the number of intra gNB intra frequency PSCell change failures due to TDCoverall timer expiry." + measFamily: NINFC + measInfoId: "NR Intra Frequency PSCell Change" + measLastChange: 5G18A_1807_003 + measObjClass: NGCELL + measResultRange: 0-4096 + measResultType: float + measChangeType: added + measResultUnits: number + measType: VS.NINFC.IntraFrPscelChFailTdcExp + measAdditionalFields: + vendorField1: + - Y + - X +... +--- +pmMetaData: + pmHeader: + nfType: gnb-Nokia + pmDefSchemaVsn: 2.0 + pmDefVsn: 5G19_1906_002 + pmFields: + iMeasInfoId: 2206 + iMeasType: 1 + measCondition: "This measurement is updated when MeNB replies to X2AP: SgNB Modification Required message with the X2AP: SgNB Modification Refuse message." + measCollectionMethod: CC + measDescription: "This counter indicates the number of intra gNB intra frequency PSCell change failures due to MeNB refusal." + measFamily: NINFC + measInfoId: "NR Intra Frequency PSCell Change" + measLastChange: 5G19_1906_002 + measObjClass: NGCELL + measResultRange: 0-4096 + measResultType: float + measChangeType: added + measResultUnits: number + measType: VS.NINFC.IntraFrPscelChFailMenbRef + measAdditionalFields: + vendorField1: + - X + - Y + vendorField2: A +... +--- +pmMetaData: + pmHeader: + nfType: gnb-Nokia + pmDefSchemaVsn: 2.0 + pmDefVsn: 5G19_1906_002 + pmFields: + iMeasInfoId: 2206 + iMeasType: 1 + measCondition: "This measurement is updated when MeNB replies to X2AP: SgNB Modification Required message with the X2AP: SgNB Modification Refuse message." + measCollectionMethod: CC + measDescription: "This counter indicates the number of intra gNB intra frequency PSCell change failures due to MeNB refusal." + measFamily: NINFC + measInfoId: "NR Intra Frequency PSCell Change" + measLastChange: 5G19_1906_002 + measObjClass: NGCELL + measResultRange: 0-4096 + measResultType: float + measChangeType: added + measResultUnits: number + measType: VS.NINFC.IntraFrPscelChFailMenbRef + measAdditionalFields: + vendorField1: + - X + - Z + vendorField2: A +... |