From 0408ea82dc1a55b4f30e7062eb91e76b94091392 Mon Sep 17 00:00:00 2001 From: "mark.j.leonard" Date: Wed, 5 Dec 2018 18:29:26 +0000 Subject: [PATCH] Throw an Exception for XML test file mismatches Fix a bug that masked differences between expected and actual XML files. This affects JUnit tests only. Change-Id: I72c779c008baa9fba52c09a0751cdd25bdc0e5cc Issue-ID: AAI-1991 Signed-off-by: mark.j.leonard --- .../aai/babel/service/CsarToXmlConverterTest.java | 377 +++++++++++---------- .../org/onap/aai/babel/util/ArtifactTestUtils.java | 32 +- 2 files changed, 211 insertions(+), 198 deletions(-) diff --git a/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java b/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java index 84a2934..1d39f6d 100644 --- a/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java +++ b/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java @@ -47,196 +47,201 @@ import org.onap.aai.babel.service.data.BabelArtifact; import org.onap.aai.babel.testdata.CsarTest; import org.onap.aai.babel.util.ArtifactTestUtils; import org.onap.aai.babel.xml.generator.XmlArtifactGenerationException; +import org.xml.sax.SAXException; /** * Tests {@link CsarToXmlConverter}. */ public class CsarToXmlConverterTest { - private static final String ARTIFACT_GENERATOR_CONFIG = "artifact-generator.properties"; - private static final String FILTER_TYPES_CONFIG = "filter-types.properties"; - - private static final String INCORRECT_CSAR_NAME = "the_name_of_the_csar_file.csar"; - private static final String SERVICE_VERSION = "1.0"; - - static { - if (System.getProperty("APP_HOME") == null) { - System.setProperty("APP_HOME", "."); - } - } - - // The class to be tested. - private CsarToXmlConverter converter; - - @Rule - public ExpectedException exception = ExpectedException.none(); - - @Before - public void setup() { - System.setProperty(ArtifactGeneratorToscaParser.PROPERTY_ARTIFACT_GENERATOR_CONFIG_FILE, - new ArtifactTestUtils().getResourcePath(ARTIFACT_GENERATOR_CONFIG)); - - System.setProperty(ArtifactGeneratorToscaParser.PROPERTY_GROUP_FILTERS_CONFIG_FILE, - new ArtifactTestUtils().getResourcePath(FILTER_TYPES_CONFIG)); - - converter = new CsarToXmlConverter(); - } - - @After - public void tearDown() { - converter = null; - } - - @Test(expected = NullPointerException.class) - public void testNullArtifactSupplied() throws CsarConverterException { - converter.generateXmlFromCsar(null, null, null); - } - - @Test(expected = NullPointerException.class) - public void testMissingName() throws CsarConverterException, IOException { - converter.generateXmlFromCsar(CsarTest.SD_WAN_CSAR_FILE.getContent(), null, null); - } - - @Test(expected = NullPointerException.class) - public void testMissingVersion() throws CsarConverterException, IOException { - converter.generateXmlFromCsar(CsarTest.SD_WAN_CSAR_FILE.getContent(), INCORRECT_CSAR_NAME, null); - } - - @Test(expected = CsarConverterException.class) - public void testNoPayloadExists() throws CsarConverterException { - converter.generateXmlFromCsar(new byte[0], INCORRECT_CSAR_NAME, SERVICE_VERSION); - } - - @Test(expected = CsarConverterException.class) - public void testCsarFileHasNoYmlFiles() throws CsarConverterException, IOException { - converter.generateXmlFromCsar(CsarTest.NO_YAML_FILES.getContent(), CsarTest.NO_YAML_FILES.getName(), - SERVICE_VERSION); - } - - /** - * Test that an Exception is thrown when the Artifact Generator properties are not present. - * - * @throws CsarConverterException - * if there is an error either extracting the YAML files or generating XML artifacts - * @throws IOException - * if an I/O exception occurs loading the test CSAR file - * @throws IOException - * @throws XmlArtifactGenerationException - * @throws CsarConverterException - */ - @Test - public void testArtifactGeneratorConfigMissing() throws CsarConverterException, IOException { - exception.expect(CsarConverterException.class); - exception.expectMessage("Cannot generate artifacts. System property artifactgenerator.config not configured"); - - // Unset the required system property - System.clearProperty(ArtifactGeneratorToscaParser.PROPERTY_ARTIFACT_GENERATOR_CONFIG_FILE); - converter.generateXmlFromCsar(CsarTest.SD_WAN_CSAR_FILE.getContent(), CsarTest.SD_WAN_CSAR_FILE.getName(), - SERVICE_VERSION); - } - - /** - * Test that an Exception is thrown when the Artifact Generator's Group Filter properties are not present. - * - * @throws IOException - * @throws XmlArtifactGenerationException - * @throws CsarConverterException - */ - @Test - public void generateXmlFromCsarFilterTypesSystemPropertyNotSet() - throws IOException, XmlArtifactGenerationException, CsarConverterException { - exception.expect(CsarConverterException.class); - exception.expectMessage("Cannot generate artifacts. System property groupfilter.config not configured"); - - // Unset the required system property - System.clearProperty(ArtifactGeneratorToscaParser.PROPERTY_GROUP_FILTERS_CONFIG_FILE); - converter.generateXmlFromCsar(CsarTest.SD_WAN_CSAR_FILE.getContent(), CsarTest.SD_WAN_CSAR_FILE.getName(), - SERVICE_VERSION); - } - - @Test - public void testServiceMetadataMissing() - throws IOException, XmlArtifactGenerationException, CsarConverterException { - converter.generateXmlFromCsar(CsarTest.MISSING_METADATA_CSAR.getContent(), - CsarTest.MISSING_METADATA_CSAR.getName(), SERVICE_VERSION); - } - - @Test - public void generateXmlFromSdWanCsar() throws IOException, CsarConverterException { - List filesToLoad = new ArrayList<>(); - filesToLoad.add("AAI-SD-WAN-Service-Test-service-1.0.xml"); - filesToLoad.add("AAI-SdWanTestVsp..DUMMY..module-0-resource-2.xml"); - filesToLoad.add("AAI-Tunnel_XConnTest-resource-2.0.xml"); - filesToLoad.add("AAI-SD-WAN-Test-VSP-resource-1.0.xml"); - assertThatGeneratedFilesMatchExpected(createExpectedXmlFiles(filesToLoad), CsarTest.SD_WAN_CSAR_FILE); - } - - @Test - public void generateXmlFromNetworkCollectionCsar() throws IOException, CsarConverterException { - List filesToLoad = new ArrayList<>(); - filesToLoad.add("AAI-TEST SVC_1-service-1.0.xml"); - filesToLoad.add("AAI-TEST CR_1-resource-7.0.xml"); - filesToLoad.add("AAI-testcr_1..NetworkCollection..0-resource-1.xml"); - filesToLoad.add("AAI-ExtVL-resource-40.0.xml"); - assertThatGeneratedFilesMatchExpected(createExpectedXmlFiles(filesToLoad), - CsarTest.NETWORK_COLLECTION_CSAR_FILE); - } - - @Test - public void generatePortMirrorConfigurationModel() - throws CsarConverterException, IOException, XmlArtifactGenerationException { - List filesToLoad = new ArrayList<>(); - filesToLoad.add("AAI-Port Mirror_Test-service-1.0.xml"); - filesToLoad.add("AAI-Port Mirroring Configuration-resource-35.0.xml"); - assertThatGeneratedFilesMatchExpected(createExpectedXmlFiles(filesToLoad), CsarTest.PORT_MIRROR_CSAR); - } - - @Test - public void generateXmlFromServiceProxyCsar() - throws CsarConverterException, IOException, XmlArtifactGenerationException { - List filesToLoad = new ArrayList<>(); - filesToLoad.add("AAI-Grouping Service for Test-service-1.0.xml"); - filesToLoad.add("AAI-groupingservicefortest..ResourceInstanceGroup..0-resource-1.xml"); - filesToLoad.add("AAI-groupingservicefortest..ResourceInstanceGroup..1-resource-1.xml"); - assertThatGeneratedFilesMatchExpected(createExpectedXmlFiles(filesToLoad), CsarTest.SERVICE_PROXY_CSAR_FILE); - } - - public Matcher matches(final String expected) { - return new BaseMatcher() { - protected String theExpected = expected; - - @Override - public boolean matches(Object item) { - return new ArtifactTestUtils().compareXmlStrings((String) item, theExpected); - } - - @Override - public void describeTo(Description description) { - description.appendText(theExpected.toString()); - } - }; - } - - private Map createExpectedXmlFiles(List filesToLoad) throws IOException { - Map xmlMap = new HashMap<>(); - for (String filename : filesToLoad) { - xmlMap.put(filename, new ArtifactTestUtils().loadResourceAsString("generatedXml/" + filename)); - } - return xmlMap; - } - - private void assertThatGeneratedFilesMatchExpected(Map expectedXmlFiles, CsarTest csarFile) - throws CsarConverterException, IOException { - List generatedArtifacts = converter.generateXmlFromCsar(csarFile.getContent(), - csarFile.getName(), SERVICE_VERSION); - assertThat("Incorrect number of files generated", // - generatedArtifacts.size(), is(equalTo(expectedXmlFiles.size()))); - for (BabelArtifact generated : generatedArtifacts) { - String fileName = generated.getName(); - String expectedXml = expectedXmlFiles.get(fileName); - assertThat("Missing expected content for " + generated.getName(), expectedXml, is(not(nullValue()))); - assertThat("The content of " + generated.getName() + " must match the expected content", - generated.getPayload(), matches(expectedXml)); - } - } + private static final String ARTIFACT_GENERATOR_CONFIG = "artifact-generator.properties"; + private static final String FILTER_TYPES_CONFIG = "filter-types.properties"; + + private static final String INCORRECT_CSAR_NAME = "the_name_of_the_csar_file.csar"; + private static final String SERVICE_VERSION = "1.0"; + + static { + if (System.getProperty("APP_HOME") == null) { + System.setProperty("APP_HOME", "."); + } + } + + // The class to be tested. + private CsarToXmlConverter converter; + + @Rule + public ExpectedException exception = ExpectedException.none(); + + @Before + public void setup() { + System.setProperty(ArtifactGeneratorToscaParser.PROPERTY_ARTIFACT_GENERATOR_CONFIG_FILE, + new ArtifactTestUtils().getResourcePath(ARTIFACT_GENERATOR_CONFIG)); + + System.setProperty(ArtifactGeneratorToscaParser.PROPERTY_GROUP_FILTERS_CONFIG_FILE, + new ArtifactTestUtils().getResourcePath(FILTER_TYPES_CONFIG)); + + converter = new CsarToXmlConverter(); + } + + @After + public void tearDown() { + converter = null; + } + + @Test(expected = NullPointerException.class) + public void testNullArtifactSupplied() throws CsarConverterException { + converter.generateXmlFromCsar(null, null, null); + } + + @Test(expected = NullPointerException.class) + public void testMissingName() throws CsarConverterException, IOException { + converter.generateXmlFromCsar(CsarTest.SD_WAN_CSAR_FILE.getContent(), null, null); + } + + @Test(expected = NullPointerException.class) + public void testMissingVersion() throws CsarConverterException, IOException { + converter.generateXmlFromCsar(CsarTest.SD_WAN_CSAR_FILE.getContent(), INCORRECT_CSAR_NAME, null); + } + + @Test(expected = CsarConverterException.class) + public void testNoPayloadExists() throws CsarConverterException { + converter.generateXmlFromCsar(new byte[0], INCORRECT_CSAR_NAME, SERVICE_VERSION); + } + + @Test(expected = CsarConverterException.class) + public void testCsarFileHasNoYmlFiles() throws CsarConverterException, IOException { + converter.generateXmlFromCsar(CsarTest.NO_YAML_FILES.getContent(), CsarTest.NO_YAML_FILES.getName(), + SERVICE_VERSION); + } + + /** + * Test that an Exception is thrown when the Artifact Generator properties are not present. + * + * @throws CsarConverterException + * if there is an error either extracting the YAML files or generating XML artifacts + * @throws IOException + * if an I/O exception occurs loading the test CSAR file + * @throws IOException + * @throws XmlArtifactGenerationException + * @throws CsarConverterException + */ + @Test + public void testArtifactGeneratorConfigMissing() throws CsarConverterException, IOException { + exception.expect(CsarConverterException.class); + exception.expectMessage("Cannot generate artifacts. System property artifactgenerator.config not configured"); + + // Unset the required system property + System.clearProperty(ArtifactGeneratorToscaParser.PROPERTY_ARTIFACT_GENERATOR_CONFIG_FILE); + converter.generateXmlFromCsar(CsarTest.SD_WAN_CSAR_FILE.getContent(), CsarTest.SD_WAN_CSAR_FILE.getName(), + SERVICE_VERSION); + } + + /** + * Test that an Exception is thrown when the Artifact Generator's Group Filter properties are not present. + * + * @throws IOException + * @throws XmlArtifactGenerationException + * @throws CsarConverterException + */ + @Test + public void generateXmlFromCsarFilterTypesSystemPropertyNotSet() + throws IOException, XmlArtifactGenerationException, CsarConverterException { + exception.expect(CsarConverterException.class); + exception.expectMessage("Cannot generate artifacts. System property groupfilter.config not configured"); + + // Unset the required system property + System.clearProperty(ArtifactGeneratorToscaParser.PROPERTY_GROUP_FILTERS_CONFIG_FILE); + converter.generateXmlFromCsar(CsarTest.SD_WAN_CSAR_FILE.getContent(), CsarTest.SD_WAN_CSAR_FILE.getName(), + SERVICE_VERSION); + } + + @Test + public void testServiceMetadataMissing() + throws IOException, XmlArtifactGenerationException, CsarConverterException { + converter.generateXmlFromCsar(CsarTest.MISSING_METADATA_CSAR.getContent(), + CsarTest.MISSING_METADATA_CSAR.getName(), SERVICE_VERSION); + } + + @Test + public void generateXmlFromSdWanCsar() throws IOException, CsarConverterException { + List filesToLoad = new ArrayList<>(); + filesToLoad.add("AAI-SD-WAN-Service-Test-service-1.0.xml"); + filesToLoad.add("AAI-SdWanTestVsp..DUMMY..module-0-resource-2.xml"); + filesToLoad.add("AAI-Tunnel_XConnTest-resource-2.0.xml"); + filesToLoad.add("AAI-SD-WAN-Test-VSP-resource-1.0.xml"); + assertThatGeneratedFilesMatchExpected(createExpectedXmlFiles(filesToLoad), CsarTest.SD_WAN_CSAR_FILE); + } + + @Test + public void generateXmlFromNetworkCollectionCsar() throws IOException, CsarConverterException { + List filesToLoad = new ArrayList<>(); + filesToLoad.add("AAI-TEST SVC_1-service-1.0.xml"); + filesToLoad.add("AAI-TEST CR_1-resource-7.0.xml"); + filesToLoad.add("AAI-testcr_1..NetworkCollection..0-resource-1.xml"); + filesToLoad.add("AAI-ExtVL-resource-40.0.xml"); + assertThatGeneratedFilesMatchExpected(createExpectedXmlFiles(filesToLoad), + CsarTest.NETWORK_COLLECTION_CSAR_FILE); + } + + @Test + public void generatePortMirrorConfigurationModel() + throws CsarConverterException, IOException, XmlArtifactGenerationException { + List filesToLoad = new ArrayList<>(); + filesToLoad.add("AAI-Port Mirror_Test-service-1.0.xml"); + filesToLoad.add("AAI-Port Mirroring Configuration-resource-35.0.xml"); + assertThatGeneratedFilesMatchExpected(createExpectedXmlFiles(filesToLoad), CsarTest.PORT_MIRROR_CSAR); + } + + @Test + public void generateXmlFromServiceProxyCsar() + throws CsarConverterException, IOException, XmlArtifactGenerationException { + List filesToLoad = new ArrayList<>(); + filesToLoad.add("AAI-Grouping Service for Test-service-1.0.xml"); + filesToLoad.add("AAI-groupingservicefortest..ResourceInstanceGroup..0-resource-1.xml"); + filesToLoad.add("AAI-groupingservicefortest..ResourceInstanceGroup..1-resource-1.xml"); + assertThatGeneratedFilesMatchExpected(createExpectedXmlFiles(filesToLoad), CsarTest.SERVICE_PROXY_CSAR_FILE); + } + + public Matcher matches(final String expected) { + return new BaseMatcher() { + protected String theExpected = expected; + + @Override + public boolean matches(Object item) { + try { + return new ArtifactTestUtils().compareXmlStrings((String) item, theExpected); + } catch (SAXException | IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public void describeTo(Description description) { + description.appendText(theExpected.toString()); + } + }; + } + + private Map createExpectedXmlFiles(List filesToLoad) throws IOException { + Map xmlMap = new HashMap<>(); + for (String filename : filesToLoad) { + xmlMap.put(filename, new ArtifactTestUtils().loadResourceAsString("generatedXml/" + filename)); + } + return xmlMap; + } + + private void assertThatGeneratedFilesMatchExpected(Map expectedXmlFiles, CsarTest csarFile) + throws CsarConverterException, IOException { + List generatedArtifacts = + converter.generateXmlFromCsar(csarFile.getContent(), csarFile.getName(), SERVICE_VERSION); + assertThat("Incorrect number of files generated", // + generatedArtifacts.size(), is(equalTo(expectedXmlFiles.size()))); + for (BabelArtifact generated : generatedArtifacts) { + String fileName = generated.getName(); + String expectedXml = expectedXmlFiles.get(fileName); + assertThat("Missing expected content for " + generated.getName(), expectedXml, is(not(nullValue()))); + assertThat("The content of " + generated.getName() + " must match the expected content", + generated.getPayload(), matches(expectedXml)); + } + } } diff --git a/src/test/java/org/onap/aai/babel/util/ArtifactTestUtils.java b/src/test/java/org/onap/aai/babel/util/ArtifactTestUtils.java index 3cbe194..fa0b784 100644 --- a/src/test/java/org/onap/aai/babel/util/ArtifactTestUtils.java +++ b/src/test/java/org/onap/aai/babel/util/ArtifactTestUtils.java @@ -51,6 +51,16 @@ public class ArtifactTestUtils { private static final String JSON_RESPONSES_FOLDER = "response/"; private static final String CSAR_INPUTS_FOLDER = "compressedArtifacts/"; + /** + * Specific test method for the YAML Extractor test. + * + * @param toscaFiles + * files extracted by the YamlExtractor + * @param ymlPayloadsToLoad + * the expected YAML files + * @throws IOException + * if an I/O exception occurs + */ public void performYmlAsserts(List toscaFiles, List ymlPayloadsToLoad) throws IOException { assertThat("An incorrect number of YAML files have been extracted", toscaFiles.size(), is(equalTo(ymlPayloadsToLoad.size()))); @@ -70,22 +80,20 @@ public class ArtifactTestUtils { } /** - * Compare 2 XML strings to see if they have the same content + * Compare two XML strings to see if they have the same content. * * @param string1 + * XML content * @param string2 - * @return true if similar + * XML content + * @return true if XML content is similar + * @throws IOException + * if an I/O exception occurs + * @throws SAXException + * if the XML parsing fails */ - public boolean compareXmlStrings(String string1, String string2) { - boolean similar = false; - - try { - similar = new Diff(string1, string2).similar(); - } catch (SAXException | IOException e) { // NOSONAR - similar = true; - } - - return similar; + public boolean compareXmlStrings(String string1, String string2) throws SAXException, IOException { + return new Diff(string1, string2).similar(); } public byte[] getCompressedArtifact(String resourceName) throws IOException { -- 2.16.6