From e1ccd83e39090f16a446b23e154b8e28530e2fdd Mon Sep 17 00:00:00 2001 From: PawelSzalapski Date: Wed, 8 Aug 2018 11:01:03 +0200 Subject: Refactor the code base a bit Remove potential race condition coming from shared 'version' veriable in singleton instance of RestController. Move the logic behind reading the json schemas out of a on-request phase to application startup. Minor refactoring done that will bump up test coverage. Change-Id: I2ad1ba91dafafd785ede61591a4dc146abf6a1eb Signed-off-by: PawelSzalapski Issue-ID: DCAEGEN2-526 --- .../org/onap/dcae/ApplicationSettingsTest.java | 32 +++++--- src/test/java/org/onap/dcae/TestingUtilities.java | 1 - .../dcae/commonFunction/EventProcessorTest.java | 4 +- .../dcae/vestest/TestJsonSchemaValidation.java | 83 ------------------- .../org/onap/dcae/vestest/TestingUtilities.java | 93 ---------------------- 5 files changed, 22 insertions(+), 191 deletions(-) delete mode 100644 src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java delete mode 100644 src/test/java/org/onap/dcae/vestest/TestingUtilities.java (limited to 'src/test/java') diff --git a/src/test/java/org/onap/dcae/ApplicationSettingsTest.java b/src/test/java/org/onap/dcae/ApplicationSettingsTest.java index 2ac42080..26b0a68b 100644 --- a/src/test/java/org/onap/dcae/ApplicationSettingsTest.java +++ b/src/test/java/org/onap/dcae/ApplicationSettingsTest.java @@ -20,6 +20,11 @@ package org.onap.dcae; * ============LICENSE_END========================================================= */ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.fge.jsonschema.core.exceptions.ProcessingException; +import com.github.fge.jsonschema.core.report.ProcessingReport; +import com.github.fge.jsonschema.main.JsonSchema; import io.vavr.collection.HashMap; import io.vavr.collection.Map; import org.json.JSONObject; @@ -28,6 +33,7 @@ import org.junit.Test; import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Objects; @@ -35,6 +41,7 @@ import java.util.Objects; import static java.util.Collections.singletonList; import static org.junit.Assert.*; import static org.onap.dcae.CLIUtils.processCmdLine; +import static org.onap.dcae.TestingUtilities.createTemporaryFile; public class ApplicationSettingsTest { @@ -281,22 +288,25 @@ public class ApplicationSettingsTest { } @Test - public void shouldReturnJSONSchema() throws IOException { + public void shouldReturnJSONSchema() throws IOException, ProcessingException { // when - JSONObject jsonSchema = fromTemporaryConfiguration("collector.schema.file={\"v1\": {}}") - .jsonSchema(); + String sampleJsonSchema = "{" + + " \"type\": \"object\"," + + " \"properties\": {" + + " \"state\": { \"type\": \"string\" }" + + " }" + + "}"; + Path temporarySchemaFile = createTemporaryFile(sampleJsonSchema); - // then - assertEquals(new JSONObject("{\"v1\": {}}").toMap(), jsonSchema.toMap()); - } - - @Test - public void shouldReturnDefaultJSONSchema() throws IOException { // when - JSONObject jsonSchema = fromTemporaryConfiguration().jsonSchema(); + JsonSchema schema = fromTemporaryConfiguration(String.format("collector.schema.file={\"v1\": \"%s\"}", temporarySchemaFile)) + .jsonSchema("v1"); // then - assertEquals(new JSONObject("{\"v5\":\"./etc/CommonEventFormat_28.3.json\"}").toMap(), jsonSchema.toMap()); + JsonNode incorrectTestObject = new ObjectMapper().readTree("{ \"state\": 1 }"); + JsonNode correctTestObject = new ObjectMapper().readTree("{ \"state\": \"hi\" }"); + assertFalse(schema.validate(incorrectTestObject).isSuccess()); + assertTrue(schema.validate(correctTestObject).isSuccess()); } @Test diff --git a/src/test/java/org/onap/dcae/TestingUtilities.java b/src/test/java/org/onap/dcae/TestingUtilities.java index 0bbb6cc3..092983bf 100644 --- a/src/test/java/org/onap/dcae/TestingUtilities.java +++ b/src/test/java/org/onap/dcae/TestingUtilities.java @@ -82,7 +82,6 @@ public final class TestingUtilities { T get() throws Exception; } - public static void assertFailureHasInfo(Try any, String... msgPart) { Java6Assertions.assertThat(any.isFailure()).isTrue(); AbstractThrowableAssert o = Java6Assertions.assertThat(any.getCause()) diff --git a/src/test/java/org/onap/dcae/commonFunction/EventProcessorTest.java b/src/test/java/org/onap/dcae/commonFunction/EventProcessorTest.java index f5c5d5f9..97dccb5b 100644 --- a/src/test/java/org/onap/dcae/commonFunction/EventProcessorTest.java +++ b/src/test/java/org/onap/dcae/commonFunction/EventProcessorTest.java @@ -29,7 +29,6 @@ import org.mockito.ArgumentCaptor; import org.onap.dcae.ApplicationSettings; import org.onap.dcae.CLIUtils; import org.onap.dcae.commonFunction.event.publishing.EventPublisher; -import org.onap.dcae.vestest.TestingUtilities; import java.util.List; @@ -43,12 +42,11 @@ public class EventProcessorTest { private final String ev = "{\"event\": {\"commonEventHeader\": { \"reportingEntityName\": \"VM name will be provided by ECOMP\", \"startEpochMicrosec\": 1477012779802988,\"lastEpochMicrosec\": 1477012789802988,\"eventId\": \"83\",\"sourceName\": \"Dummy VM name - No Metadata available\",\"sequence\": 83,\"priority\": \"Normal\",\"functionalRole\": \"vFirewall\",\"domain\": \"measurementsForVfScaling\",\"reportingEntityId\": \"VM UUID will be provided by ECOMP\",\"sourceId\": \"Dummy VM UUID - No Metadata available\",\"version\": 1.1},\"measurementsForVfScalingFields\": {\"measurementInterval\": 10,\"measurementsForVfScalingVersion\": 1.1,\"vNicUsageArray\": [{\"multicastPacketsIn\": 0,\"bytesIn\": 3896,\"unicastPacketsIn\": 0, \"multicastPacketsOut\": 0,\"broadcastPacketsOut\": 0, \"packetsOut\": 28,\"bytesOut\": 12178,\"broadcastPacketsIn\": 0,\"packetsIn\": 58,\"unicastPacketsOut\": 0,\"vNicIdentifier\": \"eth0\"}]}}}"; - Map streamID; + private Map streamID; private ApplicationSettings properties; @Before public void setUp() { - streamID = TestingUtilities.convertDMaaPStreamsPropertyToMap("fault=sec_fault|syslog=sec_syslog|heartbeat=sec_heartbeat|measurementsForVfScaling=sec_measurement|mobileFlow=sec_mobileflow|other=sec_other|stateChange=sec_statechange|thresholdCrossingAlert=sec_thresholdCrossingAlert|voiceQuality=ves_voicequality|sipSignaling=ves_sipsignaling"); properties = new ApplicationSettings(new String[]{}, CLIUtils::processCmdLine); streamID = properties.dMaaPStreamsMapping(); } diff --git a/src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java b/src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java deleted file mode 100644 index 9146cdac..00000000 --- a/src/test/java/org/onap/dcae/vestest/TestJsonSchemaValidation.java +++ /dev/null @@ -1,83 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * PROJECT - * ================================================================================ - * Copyright (C) 2017 AT&T 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.onap.dcae.vestest; - -import static java.nio.file.Files.readAllBytes; -import static junit.framework.Assert.assertEquals; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import java.io.IOException; -import java.nio.file.Paths; -import org.junit.Test; -import org.onap.dcae.SchemaValidator; - -public class TestJsonSchemaValidation { - - @Test - public void shouldValidEventPassSchema_27_2() throws IOException { - String result = - SchemaValidator.validateAgainstSchema( - readJSONFromFile("src/test/resources/ves4_valid.json").toString(), - readJSONFromFile("etc/CommonEventFormat_27.2.json").toString()); - assertEquals(result, "true"); - } - - @Test - public void shouldInvalidEventDoesNotPassSchema_27_2() throws IOException { - String result = - SchemaValidator.validateAgainstSchema( - readJSONFromFile("src/test/resources/ves4_invalid.json").toString(), - readJSONFromFile("etc/CommonEventFormat_27.2.json").toString()); - assertEquals(result, "false"); - } - - @Test - public void shouldValidEventPassSchema_30_0_1() throws IOException { - String result = - SchemaValidator.validateAgainstSchema( - readJSONFromFile("src/test/resources/ves7_valid.json").toString(), - readJSONFromFile("etc/CommonEventFormat_30.0.1.json").toString()); - assertEquals(result, "true"); - } - - @Test - public void shouldValidEventBatchPassSchema_30_0_1() throws IOException { - String result = - SchemaValidator.validateAgainstSchema( - readJSONFromFile("src/test/resources/ves7_batch_valid.json").toString(), - readJSONFromFile("etc/CommonEventFormat_30.0.1.json").toString()); - assertEquals(result, "true"); - } - - @Test - public void shouldInvalidEventDoesNotPassSchema_30_0_1() throws IOException { - String result = - SchemaValidator.validateAgainstSchema( - readJSONFromFile("src/test/resources/ves7_invalid.json").toString(), - readJSONFromFile("etc/CommonEventFormat_30.0.1.json").toString()); - assertEquals(result, "false"); - } - - private static JsonObject readJSONFromFile(String path) throws IOException { - return (JsonObject) new JsonParser().parse(new String(readAllBytes(Paths.get(path)))); - } -} diff --git a/src/test/java/org/onap/dcae/vestest/TestingUtilities.java b/src/test/java/org/onap/dcae/vestest/TestingUtilities.java deleted file mode 100644 index eff31f6d..00000000 --- a/src/test/java/org/onap/dcae/vestest/TestingUtilities.java +++ /dev/null @@ -1,93 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.onap.dcaegen2.collectors.ves - * ================================================================================ - * Copyright (C) 2018 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.dcae.vestest; - -import static java.nio.file.Files.readAllBytes; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import io.vavr.collection.HashMap; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -/** - * @author Pawel Szalapski (pawel.szalapski@nokia.com) - */ -public final class TestingUtilities { - - private TestingUtilities() { - // utility class, no objects allowed - } - - static JsonObject readJSONFromFile(Path path) { - return rethrow(() -> (JsonObject) new JsonParser().parse(new String(readAllBytes(path)))); - } - - static Path createTemporaryFile() { - return rethrow(() -> { - Path temporaryDirectory = Files.createTempDirectory("temporaryDirectory"); - Path temporaryFile = TestingUtilities.createFile(temporaryDirectory + "/testFile"); - TestingUtilities.scheduleToBeDeletedAfterTests(temporaryDirectory); - TestingUtilities.scheduleToBeDeletedAfterTests(temporaryFile); - return temporaryFile; - }); - } - - public static HashMap convertDMaaPStreamsPropertyToMap(String streamIdsProperty) { - java.util.HashMap domainToStreamIdsMapping = new java.util.HashMap<>(); - String[] topics = streamIdsProperty.split("\\|"); - for (String t : topics) { - String domain = t.split("=")[0]; - String[] streamIds = t.split("=")[1].split(","); - domainToStreamIdsMapping.put(domain, streamIds); - } - return HashMap.ofAll(domainToStreamIdsMapping); - } - - private static Path createFile(String path) { - return rethrow(() -> Files.createFile(Paths.get(path))); - } - - private static void scheduleToBeDeletedAfterTests(Path path) { - path.toFile().deleteOnExit(); - } - - /** - * Exception in test case usually means there is something wrong, it should never be catched, but rather thrown to - * be handled by JUnit framework. - */ - private static T rethrow(CheckedSupplier supplier) { - try { - return supplier.get(); - } catch (Exception e) { - throw new RuntimeException(); - } - } - - @FunctionalInterface - interface CheckedSupplier { - - T get() throws Exception; - } - - -} -- cgit 1.2.3-korg