From 1b44134b16ac74e8326ba14e1764a9023cc6f0cf Mon Sep 17 00:00:00 2001 From: Maciej Malewski Date: Thu, 10 Dec 2020 14:38:00 +0100 Subject: Integration tests for validating PM_Dictionary. Checking compliance content of the PM_Dictionary file against it's schema. Issue-ID: SDC-3390 Change-Id: I8e20f977c7d6838005bc84fc6c7c8ab197152a53 Signed-off-by: Maciej Malewski --- .../tests/validation/pmdictionary/CsarLoader.java | 54 +++++++++++++ .../pmdictionary/CsarValidationTest.java | 73 ++++++++++++++++++ .../validation/pmdictionary/ZipValidationTest.java | 90 ++++++++++++++++++++++ 3 files changed, 217 insertions(+) create mode 100644 integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/CsarLoader.java create mode 100644 integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/CsarValidationTest.java create mode 100644 integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/ZipValidationTest.java (limited to 'integration-tests/src/test/java/org') diff --git a/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/CsarLoader.java b/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/CsarLoader.java new file mode 100644 index 0000000000..ca80ecee4c --- /dev/null +++ b/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/CsarLoader.java @@ -0,0 +1,54 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2020 Nokia. 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.onap.sdc.backend.ci.tests.validation.pmdictionary; + +import org.apache.commons.io.IOUtils; +import org.openecomp.core.utilities.file.FileContentHandler; +import org.openecomp.core.utilities.orchestration.OnboardingTypesEnum; +import org.openecomp.sdc.vendorsoftwareproduct.exception.OnboardPackageException; +import org.openecomp.sdc.vendorsoftwareproduct.types.OnboardPackage; +import org.openecomp.sdc.vendorsoftwareproduct.types.OnboardPackageInfo; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; + +class CsarLoader { + + private CsarLoader() { + } + + static FileContentHandler load(String csarFileName, String csarFilePath) throws IOException, OnboardPackageException { + InputStream inputStream = CsarLoader.class.getResourceAsStream(csarFilePath); + OnboardPackage onboardPackage = getOnboardPackage(csarFileName, inputStream); + return onboardPackage.getFileContentHandler(); + } + + private static OnboardPackage getOnboardPackage(String csarFileName, InputStream inputStream) throws OnboardPackageException, IOException { + OnboardPackageInfo onboardPackageInfo = new OnboardPackageInfo(csarFileName, OnboardingTypesEnum.CSAR.name(), + convertFileInputStream(inputStream), OnboardingTypesEnum.CSAR); + return onboardPackageInfo.getOnboardPackage(); + } + + private static ByteBuffer convertFileInputStream(final InputStream fileInputStream) throws IOException { + byte[] fileContent = IOUtils.toByteArray(fileInputStream); + return ByteBuffer.wrap(fileContent); + } +} diff --git a/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/CsarValidationTest.java b/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/CsarValidationTest.java new file mode 100644 index 0000000000..e12e058d6c --- /dev/null +++ b/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/CsarValidationTest.java @@ -0,0 +1,73 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2020 Nokia. 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.onap.sdc.backend.ci.tests.validation.pmdictionary; + +import org.junit.jupiter.api.Test; +import org.openecomp.core.utilities.file.FileContentHandler; +import org.openecomp.sdc.datatypes.error.ErrorLevel; +import org.openecomp.sdc.datatypes.error.ErrorMessage; +import org.openecomp.sdc.vendorsoftwareproduct.exception.OnboardPackageException; +import org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.ValidatorFactory; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +class CsarValidationTest { + + @Test + void shouldNotReturnErrors_whenPnfCsarIsValid() throws OnboardPackageException, IOException { + //given + FileContentHandler pnfFileContent = CsarLoader.load("validPnfCompliantWithSOL004.csar", "/Files/PNFs/validation/pmdictionary/validPnfCompliantWithSOL004.csar"); + + //when + Map> errorsMap = ValidatorFactory.getValidator(pnfFileContent).validateContent(pnfFileContent); + + //then + assertThat(errorsMap, is(anEmptyMap())); + } + + @Test + void shouldReturnError_whenPMDictionaryContentIsNotCompliantWithSchema() throws OnboardPackageException, IOException { + //given + String expectedErrorMessage = "Document number: 1, Path: /pmMetaData/, Message: Key not found: pmHeader"; + FileContentHandler pnfFileContent = CsarLoader.load("invalidPnfCompliantWithSOL004.csar", "/Files/PNFs/validation/pmdictionary/invalidPnfCompliantWithSOL004.csar"); + + //when + Map> errorMap = ValidatorFactory.getValidator(pnfFileContent).validateContent(pnfFileContent); + List errorList = errorMap.get("uploadFile"); + + //then + assertThat(errorList, is(not(empty()))); + assertThat(getActualErrorMessage(errorList), is(equalTo(expectedErrorMessage))); + assertThat(getActualErrorLevel(errorList), is(ErrorLevel.ERROR)); + } + + private String getActualErrorMessage(List errorList) { + return errorList.get(0).getMessage(); + } + + private ErrorLevel getActualErrorLevel(List errorList) { + return errorList.get(0).getLevel(); + } +} diff --git a/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/ZipValidationTest.java b/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/ZipValidationTest.java new file mode 100644 index 0000000000..d3287d29b6 --- /dev/null +++ b/integration-tests/src/test/java/org/onap/sdc/backend/ci/tests/validation/pmdictionary/ZipValidationTest.java @@ -0,0 +1,90 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2020 Nokia. 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.onap.sdc.backend.ci.tests.validation.pmdictionary; + +import org.junit.jupiter.api.Test; +import org.openecomp.core.utilities.file.FileContentHandler; +import org.openecomp.core.utilities.orchestration.OnboardingTypesEnum; +import org.openecomp.sdc.common.utils.CommonUtil; +import org.openecomp.sdc.datatypes.error.ErrorLevel; +import org.openecomp.sdc.datatypes.error.ErrorMessage; +import org.openecomp.sdc.validation.util.ValidationManagerUtil; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +class ZipValidationTest { + + private static final String PM_DICTIONARY_FILE = "pmdict.yaml"; + private static final String ZIPS_PATH = "Files/VNFs/validation/pmdictionary"; + + @Test + void shouldReportOnlyFileNotReferenced_whenValidPmDictionaryZip() throws IOException { + // given + FileContentHandler fileContentHandler = getFileContentHandler("validPmDict.zip"); + + // when + Map> errors = ValidationManagerUtil.initValidationManager(fileContentHandler) + .validate(); + List pmDictValidationErrors = extractPmDictValidationErrors(errors); + + // then + assertThat(pmDictValidationErrors).isEmpty(); + } + + @Test + void shouldReportPmDictionaryErrors_whenInvalidPmDictionaryZip() throws IOException { + // given + FileContentHandler fileContentHandler = getFileContentHandler("invalidPmDict.zip"); + ErrorMessage errorMessage = new ErrorMessage(ErrorLevel.ERROR, + "ERROR: [PM_DICT]: Document Number: 1, Path: /pmMetaData/, Problem: Key not found: pmHeader"); + + + // when + Map> errors = ValidationManagerUtil.initValidationManager(fileContentHandler) + .validate(); + List pmDictValidationErrors = extractPmDictValidationErrors(errors); + + // then + assertThat(pmDictValidationErrors) + .hasSize(1) + .containsExactly(errorMessage); + } + + private FileContentHandler getFileContentHandler(String filename) throws IOException { + return CommonUtil.validateAndUploadFileContent(OnboardingTypesEnum.ZIP, + Objects.requireNonNull(this.getClass() + .getClassLoader() + .getResourceAsStream(ZIPS_PATH + "/" + filename)) + .readAllBytes()); + } + + private List extractPmDictValidationErrors(Map> errors) { + return errors.getOrDefault(PM_DICTIONARY_FILE, List.of()) + .stream() + .filter(error -> error.getMessage().contains("[PM_DICT]")) + .collect(Collectors.toList()); + } +} -- cgit 1.2.3-korg