diff options
author | mark.j.leonard <mark.j.leonard@gmail.com> | 2018-06-07 16:45:38 +0100 |
---|---|---|
committer | mark.j.leonard <mark.j.leonard@gmail.com> | 2018-06-07 17:17:30 +0100 |
commit | 7e6fe8c29c5a5cfa5caf6ab47b30280e1fc20432 (patch) | |
tree | af9e48c7bf85ae68d42cbc94df60589bdd7e052e /src/test/java | |
parent | c5aea4a8bc398fc1c6220875e55b9520fd7f7524 (diff) |
Add support for loading VNF Catalog XML files
Issue-ID: AAI-1214
Change-Id: I5d0eb3456916e6f3e5ba3a9b4e828feaff0cde4e
Signed-off-by: mark.j.leonard <mark.j.leonard@gmail.com>
Diffstat (limited to 'src/test/java')
5 files changed, 434 insertions, 20 deletions
diff --git a/src/test/java/org/onap/aai/modelloader/csar/extractor/VnfCatalogExtractorTest.java b/src/test/java/org/onap/aai/modelloader/csar/extractor/VnfCatalogExtractorTest.java new file mode 100644 index 0000000..bd8c33f --- /dev/null +++ b/src/test/java/org/onap/aai/modelloader/csar/extractor/VnfCatalogExtractorTest.java @@ -0,0 +1,138 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 European Software Marketing Ltd. + * ================================================================================ + * 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.aai.modelloader.csar.extractor; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.junit.Test; +import org.onap.aai.modelloader.entity.Artifact; +import org.onap.aai.modelloader.entity.ArtifactType; +import org.onap.aai.modelloader.extraction.InvalidArchiveException; +import org.onap.aai.modelloader.extraction.VnfCatalogExtractor; +import org.onap.aai.modelloader.util.ArtifactTestUtils; + + +/** + * Tests {@link VnfCatalogExtractor}. + */ +public class VnfCatalogExtractorTest { + + private static final String FOO = "foo"; + private static final String SOME_BYTES = "just some bytes that will pass the firsts validation"; + private static final String SUPPLY_AN_ARCHIVE = "An archive must be supplied for processing."; + private static final String SUPPLY_NAME = "The name of the archive must be supplied for processing."; + + @Test + public void nullContentSupplied() { + invalidArgumentsTest(null, FOO, SUPPLY_AN_ARCHIVE); + } + + @Test + public void emptyContentSupplied() { + invalidArgumentsTest(new byte[0], FOO, SUPPLY_AN_ARCHIVE); + } + + @Test + public void nullNameSupplied() { + invalidArgumentsTest(SOME_BYTES.getBytes(), null, SUPPLY_NAME); + } + + @Test + public void blankNameSupplied() { + invalidArgumentsTest("just some bytes that will pass the firsts validation".getBytes(), " \t ", SUPPLY_NAME); + } + + @Test + public void emptyNameSupplied() { + invalidArgumentsTest("just some bytes that will pass the firsts validation".getBytes(), "", SUPPLY_NAME); + } + + @Test + public void invalidContentSupplied() { + invalidArgumentsTest("This is a piece of nonsense and not a zip file".getBytes(), FOO, + "An error occurred trying to create a ZipFile. Is the content being converted really a csar file?"); + } + + @Test + public void archiveContainsNoVnfcFiles() throws InvalidArchiveException, IOException { + List<Artifact> vnfcArtifacts = new VnfCatalogExtractor().extract( + new ArtifactTestUtils().loadResource("compressedArtifacts/noVnfcFilesArchive.csar"), + "noVnfcFilesArchive.csar"); + assertTrue("No VNFC files should have been extracted, but " + vnfcArtifacts.size() + " were found.", + vnfcArtifacts.isEmpty()); + } + + @Test + public void archiveContainsThreeRelevantVnfcFiles() throws IOException, InvalidArchiveException { + List<String> payloads = new ArrayList<>(); + payloads.add("xmlFiles/vnfcatalog-1.xml"); + payloads.add("xmlFiles/vnfcatalog-2.xml"); + payloads.add("xmlFiles/vnfcatalog-3.xml"); + String csarArchiveFile = "threeVnfcFilesArchive.csar"; + performVnfcAsserts(new VnfCatalogExtractor().extract( + new ArtifactTestUtils().loadResource("compressedArtifacts/" + csarArchiveFile), csarArchiveFile), + payloads); + } + + public void performVnfcAsserts(List<Artifact> actualVnfcArtifacts, List<String> expectedVnfcPayloadsToLoad) { + assertThat("An unexpected number of VNFC files have been extracted", actualVnfcArtifacts.size(), + is(expectedVnfcPayloadsToLoad.size())); + + for (Artifact artifact : actualVnfcArtifacts) { + assertThat("Unexpected artifact type found.", artifact.getType(), is(ArtifactType.VNF_CATALOG_XML)); + } + + Set<String> expectedVnfcPayloads = expectedVnfcPayloadsToLoad.stream().map(s -> { + try { + return ArtifactTestUtils.loadResourceAsString(s); + } catch (IOException e) { + throw new RuntimeException(e); + } + }).collect(Collectors.toSet()); + + Set<String> actualVnfcPayloads = + actualVnfcArtifacts.stream().map(s -> s.getPayload()).collect(Collectors.toSet()); + + assertThat("Unexpected VNF Catalog file(s) found.", expectedVnfcPayloads.containsAll(actualVnfcPayloads), + is(true)); + } + + private void invalidArgumentsTest(byte[] archive, String name, String expectedErrorMessage) { + try { + new VnfCatalogExtractor().extract(archive, name); + fail("An instance of InvalidArchiveException should have been thrown"); + } catch (Exception ex) { + assertTrue(ex instanceof InvalidArchiveException); + assertEquals(expectedErrorMessage, ex.getLocalizedMessage()); + } + } + +} + diff --git a/src/test/java/org/onap/aai/modelloader/entity/catalog/TestVnfCatalogArtifactHandler.java b/src/test/java/org/onap/aai/modelloader/entity/catalog/TestVnfCatalogArtifactHandler.java index b54bb20..cead699 100644 --- a/src/test/java/org/onap/aai/modelloader/entity/catalog/TestVnfCatalogArtifactHandler.java +++ b/src/test/java/org/onap/aai/modelloader/entity/catalog/TestVnfCatalogArtifactHandler.java @@ -41,6 +41,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import org.onap.aai.modelloader.config.ModelLoaderConfig; import org.onap.aai.modelloader.entity.Artifact; +import org.onap.aai.modelloader.entity.ArtifactType; import org.onap.aai.modelloader.restclient.AaiRestClient; import org.onap.aai.restclient.client.OperationResult; @@ -80,6 +81,40 @@ public class TestVnfCatalogArtifactHandler { assertPutOperationsSucceeded(); } + @Test + public void testUpdateVnfImagesFromXml() throws Exception { + // GET operation + OperationResult mockGetResp = mock(OperationResult.class); + + // @formatter:off + when(mockGetResp.getResultCode()) + .thenReturn(Response.Status.OK.getStatusCode()) + .thenReturn(Response.Status.NOT_FOUND.getStatusCode()) + .thenReturn(Response.Status.NOT_FOUND.getStatusCode()) + .thenReturn(Response.Status.OK.getStatusCode()); + // @formatter:on + + when(mockRestClient.getResource(Mockito.anyString(), Mockito.anyString(), Mockito.any(MediaType.class))) + .thenReturn(mockGetResp); + mockPutOperations(); + + // Example VNF Catalog XML + VnfCatalogArtifactHandler handler = new VnfCatalogArtifactHandler(createConfig()); + assertThat( + handler.pushArtifacts(createVnfCatalogXmlArtifact(), "test", new ArrayList<Artifact>(), mockRestClient), + is(true)); + + // Only two of the VNF images should be pushed + ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class); + AaiRestClient client = Mockito.verify(mockRestClient, Mockito.times(2)); + client.putResource(Mockito.anyString(), argument.capture(), Mockito.anyString(), Mockito.any(MediaType.class)); + assertThat(argument.getAllValues().size(), is(2)); + assertThat(argument.getAllValues().get(0), containsString("5.2.5")); + assertThat(argument.getAllValues().get(0), containsString("VM00")); + assertThat(argument.getAllValues().get(1), containsString("5.2.4")); + assertThat(argument.getAllValues().get(1), containsString("VM00")); + } + private ModelLoaderConfig createConfig() { Properties configProperties = new Properties(); try { @@ -107,6 +142,20 @@ public class TestVnfCatalogArtifactHandler { } /** + * Example VNF Catalog based on VNF_CATALOG XML + * + * @return test Artifacts + * @throws IOException + * @throws UnsupportedEncodingException + */ + private List<Artifact> createVnfCatalogXmlArtifact() throws IOException, UnsupportedEncodingException { + byte[] encoded = Files.readAllBytes(Paths.get("src/test/resources/xmlFiles/fortigate.xml")); + List<Artifact> artifacts = new ArrayList<Artifact>(); + artifacts.add(new VnfCatalogArtifact(ArtifactType.VNF_CATALOG_XML, new String(encoded, "utf-8"))); + return artifacts; + } + + /** * Always return CREATED (success) for a PUT operation. */ private void mockPutOperations() { diff --git a/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerVnfcTest.java b/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerVnfcTest.java new file mode 100644 index 0000000..6c7a77f --- /dev/null +++ b/src/test/java/org/onap/aai/modelloader/notification/ArtifactDownloadManagerVnfcTest.java @@ -0,0 +1,227 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 European Software Marketing Ltd. + * ================================================================================ + * 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.aai.modelloader.notification; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.onap.aai.modelloader.fixture.NotificationDataFixtureBuilder.getNotificationDataWithToscaCsarFile; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.mockito.internal.util.reflection.Whitebox; +import org.onap.aai.babel.service.data.BabelArtifact; +import org.onap.aai.modelloader.config.ModelLoaderConfig; +import org.onap.aai.modelloader.entity.Artifact; +import org.onap.aai.modelloader.entity.ArtifactType; +import org.onap.aai.modelloader.entity.catalog.VnfCatalogArtifact; +import org.onap.aai.modelloader.entity.model.BabelArtifactParsingException; +import org.onap.aai.modelloader.entity.model.ModelArtifact; +import org.onap.aai.modelloader.extraction.InvalidArchiveException; +import org.onap.aai.modelloader.extraction.VnfCatalogExtractor; +import org.onap.aai.modelloader.restclient.BabelServiceClient; +import org.onap.aai.modelloader.restclient.BabelServiceClientException; +import org.onap.aai.modelloader.service.BabelServiceClientFactory; +import org.onap.aai.modelloader.util.ArtifactTestUtils; +import org.onap.sdc.api.IDistributionClient; +import org.onap.sdc.api.notification.IArtifactInfo; +import org.onap.sdc.api.notification.INotificationData; +import org.onap.sdc.api.results.IDistributionClientDownloadResult; +import org.onap.sdc.impl.DistributionClientDownloadResultImpl; +import org.onap.sdc.utils.DistributionActionResultEnum; + +/** + * Tests {@link ArtifactDownloadManager} with VNF Catalog Artifacts. + */ +public class ArtifactDownloadManagerVnfcTest { + + private ArtifactDownloadManager downloadManager; + private BabelServiceClient mockBabelClient; + private IDistributionClient mockDistributionClient; + private NotificationPublisher mockNotificationPublisher; + private BabelArtifactConverter mockBabelArtifactConverter; + private BabelServiceClientFactory mockClientFactory; + private VnfCatalogExtractor mockVnfCatalogExtractor; + + @Before + public void setup() throws Exception { + mockBabelClient = mock(BabelServiceClient.class); + mockDistributionClient = mock(IDistributionClient.class); + mockNotificationPublisher = mock(NotificationPublisher.class); + mockBabelArtifactConverter = mock(BabelArtifactConverter.class); + mockClientFactory = mock(BabelServiceClientFactory.class); + when(mockClientFactory.create(Mockito.any())).thenReturn(mockBabelClient); + mockVnfCatalogExtractor = mock(VnfCatalogExtractor.class); + + Properties configProperties = new Properties(); + configProperties.load(this.getClass().getClassLoader().getResourceAsStream("model-loader.properties")); + downloadManager = new ArtifactDownloadManager(mockDistributionClient, + new ModelLoaderConfig(configProperties, "."), mockClientFactory); + + + Whitebox.setInternalState(downloadManager, "notificationPublisher", mockNotificationPublisher); + Whitebox.setInternalState(downloadManager, "babelArtifactConverter", mockBabelArtifactConverter); + Whitebox.setInternalState(downloadManager, "vnfCatalogExtractor", mockVnfCatalogExtractor); + } + + @Test + public void downloadArtifacts_validToscaVnfcCsarFile() + throws IOException, BabelServiceClientException, BabelArtifactParsingException, InvalidArchiveException { + INotificationData data = getNotificationDataWithToscaCsarFile(); + IArtifactInfo artifactInfo = data.getServiceArtifacts().get(0); + + setupValidDownloadCsarMocks(data, artifactInfo); + when(mockBabelClient.postArtifact(Matchers.any(), Matchers.anyString(), Matchers.anyString(), + Matchers.anyString())).thenReturn(createBabelArtifacts()); + when(mockVnfCatalogExtractor.extract(Matchers.any(), Matchers.anyString())).thenReturn(new ArrayList<>()); + + List<Artifact> modelArtifacts = new ArrayList<>(); + List<Artifact> catalogFiles = new ArrayList<>(); + assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, catalogFiles), + is(true)); + + assertEquals("There should have been some catalog files", 2, catalogFiles.size()); + } + + @Test + public void downloadArtifacts_validXmlVnfcCsarFile() + throws IOException, BabelServiceClientException, BabelArtifactParsingException, InvalidArchiveException { + INotificationData data = getNotificationDataWithToscaCsarFile(); + IArtifactInfo artifactInfo = data.getServiceArtifacts().get(0); + + setupValidDownloadCsarMocks(data, artifactInfo); + when(mockBabelClient.postArtifact(Matchers.any(), Matchers.anyString(), Matchers.anyString(), + Matchers.anyString())).thenReturn(createBabelArtifactsNoVnfc()); + when(mockVnfCatalogExtractor.extract(Matchers.any(), Matchers.anyString())) + .thenReturn(createXmlVnfcArtifacts()); + + List<Artifact> modelArtifacts = new ArrayList<>(); + List<Artifact> catalogFiles = new ArrayList<>(); + assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, catalogFiles), + is(true)); + + assertEquals("There should have been some catalog files", 3, catalogFiles.size()); + } + + @Test + public void downloadArtifacts_validNoVnfcCsarFile() + throws IOException, BabelServiceClientException, BabelArtifactParsingException, InvalidArchiveException { + INotificationData data = getNotificationDataWithToscaCsarFile(); + IArtifactInfo artifactInfo = data.getServiceArtifacts().get(0); + + setupValidDownloadCsarMocks(data, artifactInfo); + when(mockBabelClient.postArtifact(Matchers.any(), Matchers.anyString(), Matchers.anyString(), + Matchers.anyString())).thenReturn(createBabelArtifactsNoVnfc()); + when(mockVnfCatalogExtractor.extract(Matchers.any(), Matchers.anyString())).thenReturn(new ArrayList<>()); + + List<Artifact> modelArtifacts = new ArrayList<>(); + List<Artifact> catalogFiles = new ArrayList<>(); + assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, catalogFiles), + is(true)); + + assertEquals("There should not have been any catalog files", 0, catalogFiles.size()); + } + + @Test + public void downloadArtifacts_invalidXmlAndToscaVnfcCsarFile() + throws IOException, BabelServiceClientException, BabelArtifactParsingException, InvalidArchiveException { + INotificationData data = getNotificationDataWithToscaCsarFile(); + IArtifactInfo artifactInfo = data.getServiceArtifacts().get(0); + + setupValidDownloadCsarMocks(data, artifactInfo); + when(mockBabelClient.postArtifact(Matchers.any(), Matchers.anyString(), Matchers.anyString(), + Matchers.anyString())).thenReturn(createBabelArtifacts()); + when(mockVnfCatalogExtractor.extract(Matchers.any(), Matchers.anyString())) + .thenReturn(createXmlVnfcArtifacts()); + doNothing().when(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifactInfo); + + List<Artifact> modelArtifacts = new ArrayList<>(); + List<Artifact> catalogFiles = new ArrayList<>(); + assertThat(downloadManager.downloadArtifacts(data, data.getServiceArtifacts(), modelArtifacts, catalogFiles), + is(false)); + + Mockito.verify(mockNotificationPublisher).publishDeployFailure(mockDistributionClient, data, artifactInfo); + } + + private IDistributionClientDownloadResult createDistributionClientDownloadResult( + DistributionActionResultEnum status, String message, byte[] payload) { + IDistributionClientDownloadResult downloadResult = new DistributionClientDownloadResultImpl(status, message); + + ((DistributionClientDownloadResultImpl) downloadResult).setArtifactPayload(payload); + + return downloadResult; + } + + private void setupValidDownloadCsarMocks(INotificationData data, IArtifactInfo artifactInfo) + throws IOException, BabelServiceClientException, BabelArtifactParsingException { + when(mockDistributionClient.download(artifactInfo)) + .thenReturn(createDistributionClientDownloadResult(DistributionActionResultEnum.SUCCESS, null, + new ArtifactTestUtils().loadResource("compressedArtifacts/service-VscpaasTest-csar.csar"))); + when(mockBabelArtifactConverter.convertToModel(Mockito.anyListOf(BabelArtifact.class))) + .thenReturn(createModelArtifacts()); + when(mockBabelArtifactConverter.convertToCatalog(Mockito.anyListOf(BabelArtifact.class))) + .thenReturn(createToscaVnfcArtifacts()); + } + + private List<BabelArtifact> createBabelArtifacts() { + List<BabelArtifact> artifactList = new ArrayList<>(); + artifactList.add(new BabelArtifact("ModelArtifact", BabelArtifact.ArtifactType.MODEL, "Some model payload")); + artifactList.add(new BabelArtifact("VNFCArtifact", BabelArtifact.ArtifactType.VNFCATALOG, "Some VNFC payload")); + return artifactList; + } + + private List<BabelArtifact> createBabelArtifactsNoVnfc() { + List<BabelArtifact> artifactList = new ArrayList<>(); + artifactList.add(new BabelArtifact("ModelArtifact", BabelArtifact.ArtifactType.MODEL, "Some model payload")); + return artifactList; + } + + private List<Artifact> createModelArtifacts() { + List<Artifact> modelArtifacts = new ArrayList<>(); + modelArtifacts.add(new ModelArtifact()); + modelArtifacts.add(new ModelArtifact()); + return modelArtifacts; + } + + private List<Artifact> createToscaVnfcArtifacts() { + List<Artifact> vnfcArtifacts = new ArrayList<>(); + vnfcArtifacts.add(new VnfCatalogArtifact("Some VNFC payload")); + vnfcArtifacts.add(new VnfCatalogArtifact("Some VNFC payload")); + return vnfcArtifacts; + } + + private List<Artifact> createXmlVnfcArtifacts() { + List<Artifact> vnfcArtifacts = new ArrayList<>(); + vnfcArtifacts.add(new VnfCatalogArtifact(ArtifactType.VNF_CATALOG_XML, "Some VNFC payload")); + vnfcArtifacts.add(new VnfCatalogArtifact(ArtifactType.VNF_CATALOG_XML, "Some VNFC payload")); + vnfcArtifacts.add(new VnfCatalogArtifact(ArtifactType.VNF_CATALOG_XML, "Some VNFC payload")); + return vnfcArtifacts; + } +} diff --git a/src/test/java/org/onap/aai/modelloader/service/TestModelLoaderService.java b/src/test/java/org/onap/aai/modelloader/service/TestModelLoaderService.java index 8e07650..e40ca3c 100644 --- a/src/test/java/org/onap/aai/modelloader/service/TestModelLoaderService.java +++ b/src/test/java/org/onap/aai/modelloader/service/TestModelLoaderService.java @@ -56,7 +56,7 @@ public class TestModelLoaderService { public void testMissingConfig() { new ModelLoaderService().start(); } - + @Test public void testLoadModel() { Response response = service.loadModel(""); @@ -80,7 +80,7 @@ public class TestModelLoaderService { public void testIngestModelMissingName() throws IOException { byte[] csarPayload = new ArtifactTestUtils().loadResource("compressedArtifacts/service-VscpaasTest-csar.csar"); Response response = service.ingestModel("", "", Base64.getEncoder().encodeToString(csarPayload)); - assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); + assertThat(response.getStatus(), is(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode())); } } diff --git a/src/test/java/org/onap/aai/modelloader/util/TestJsonXmlConverter.java b/src/test/java/org/onap/aai/modelloader/util/TestJsonXmlConverter.java index 4b7db56..81a4833 100644 --- a/src/test/java/org/onap/aai/modelloader/util/TestJsonXmlConverter.java +++ b/src/test/java/org/onap/aai/modelloader/util/TestJsonXmlConverter.java @@ -49,34 +49,34 @@ public class TestJsonXmlConverter { @Test public void testConversion() throws Exception { - byte[] encoded = Files.readAllBytes(Paths.get(XML_MODEL_FILE)); - assertThat(JsonXmlConverter.isValidJson(new String(encoded)), is(false)); - encoded = Files.readAllBytes(Paths.get(JSON_MODEL_FILE)); + byte[] encoded = Files.readAllBytes(Paths.get(XML_MODEL_FILE)); + assertThat(JsonXmlConverter.isValidJson(new String(encoded)), is(false)); + encoded = Files.readAllBytes(Paths.get(JSON_MODEL_FILE)); String originalJson = new String(encoded); assertThat(JsonXmlConverter.isValidJson(originalJson), is(true)); String xmlFromJson = JsonXmlConverter.convertJsonToXml(originalJson); - // Spot check one of the attributes - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.parse(new ByteArrayInputStream(xmlFromJson.getBytes())); - NodeList nodeList = doc.getDocumentElement().getChildNodes(); + // Spot check one of the attributes + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document doc = builder.parse(new ByteArrayInputStream(xmlFromJson.getBytes())); + NodeList nodeList = doc.getDocumentElement().getChildNodes(); - String modelVid = "notFound"; - for (int i = 0; i < nodeList.getLength(); i++) { - Node currentNode = nodeList.item(i); - if (currentNode.getNodeName().equals("model-invariant-id")) { - modelVid = currentNode.getTextContent(); - break; - } + String modelVid = "notFound"; + for (int i = 0; i < nodeList.getLength(); i++) { + Node currentNode = nodeList.item(i); + if (currentNode.getNodeName().equals("model-invariant-id")) { + modelVid = currentNode.getTextContent(); + break; } + } assertThat(modelVid.equals("3d560d81-57d0-438b-a2a1-5334dba0651a"), is(true)); - // Convert the XML form back into JSON - JsonXmlConverter.convertXmlToJson(xmlFromJson); + // Convert the XML form back into JSON + JsonXmlConverter.convertXmlToJson(xmlFromJson); } } |