summaryrefslogtreecommitdiffstats
path: root/src/test/java
diff options
context:
space:
mode:
authorJoeOLeary <joseph.o.leary@est.tech>2019-02-15 13:46:01 +0000
committerJoeOLeary <joseph.o.leary@est.tech>2019-02-15 13:46:01 +0000
commit924ab47c83837fae7c70713cab51665b8fc858a6 (patch)
treed26b3fcf654603bdf27992399a76c7f879fffcc6 /src/test/java
parent85d315a40fa48255e1104a0c2d6c5ad984952c9c (diff)
Add Mapping
Change-Id: I417b7fe9d0e588c6c38dc23eb55e43a85e277e81 Issue-ID: DCAEGEN2-1216 Signed-off-by: JoeOLeary <joseph.o.leary@est.tech>
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/onap/dcaegen2/services/pmmapper/datarouter/DataRouterSubscriberTest.java9
-rw-r--r--src/test/java/org/onap/dcaegen2/services/pmmapper/mapping/MapperTest.java144
-rw-r--r--src/test/java/utils/EventUtils.java87
3 files changed, 232 insertions, 8 deletions
diff --git a/src/test/java/org/onap/dcaegen2/services/pmmapper/datarouter/DataRouterSubscriberTest.java b/src/test/java/org/onap/dcaegen2/services/pmmapper/datarouter/DataRouterSubscriberTest.java
index 00dc040..a40e28b 100644
--- a/src/test/java/org/onap/dcaegen2/services/pmmapper/datarouter/DataRouterSubscriberTest.java
+++ b/src/test/java/org/onap/dcaegen2/services/pmmapper/datarouter/DataRouterSubscriberTest.java
@@ -32,10 +32,8 @@ import static org.mockito.Mockito.when;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
-import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
import io.undertow.io.Receiver;
@@ -59,12 +57,10 @@ import org.mockito.stubbing.Answer;
import org.onap.dcaegen2.services.pmmapper.exceptions.TooManyTriesException;
import org.onap.dcaegen2.services.pmmapper.model.MapperConfig;
import org.onap.dcaegen2.services.pmmapper.model.Event;
-import org.onap.dcaegen2.services.pmmapper.model.EventMetadata;
import org.onap.dcaegen2.services.pmmapper.utils.HttpServerExchangeAdapter;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
-import org.slf4j.LoggerFactory;
@RunWith(PowerMockRunner.class)
@PrepareForTest(DataRouterSubscriber.class)
@@ -233,10 +229,7 @@ public class DataRouterSubscriberTest {
}).when(httpServerExchange).dispatch(any(Runnable.class));
objUnderTest.handleRequest(httpServerExchange);
- verify(eventReceiver, times(1))
- .receive(new Event(httpServerExchange, testString,
- new GsonBuilder().create()
- .fromJson(metadata, EventMetadata.class)));
+ verify(eventReceiver, times(1)).receive(any(Event.class));
assertEquals(logAppender.list.get(0).getMarker().getName(), "ENTRY");
assertNotNull(logAppender.list.get(0).getMDCPropertyMap().get("InvocationID"));
diff --git a/src/test/java/org/onap/dcaegen2/services/pmmapper/mapping/MapperTest.java b/src/test/java/org/onap/dcaegen2/services/pmmapper/mapping/MapperTest.java
new file mode 100644
index 0000000..eeaa39e
--- /dev/null
+++ b/src/test/java/org/onap/dcaegen2/services/pmmapper/mapping/MapperTest.java
@@ -0,0 +1,144 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.pmmapper.mapping;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+
+import com.google.gson.Gson;
+import freemarker.core.Environment;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+import org.everit.json.schema.Schema;
+import org.everit.json.schema.loader.SchemaLoader;
+import org.json.JSONObject;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.onap.dcaegen2.services.pmmapper.exceptions.MappingException;
+import org.onap.dcaegen2.services.pmmapper.exceptions.XMLParseException;
+import org.onap.dcaegen2.services.pmmapper.model.Event;
+import org.onap.dcaegen2.services.pmmapper.model.EventMetadata;
+import org.onap.logging.ref.slf4j.ONAPLogAdapter;
+import org.powermock.reflect.Whitebox;
+import utils.EventUtils;
+
+
+@ExtendWith(MockitoExtension.class)
+class MapperTest {
+
+ private static EventMetadata eventMetadata;
+ private static Schema vesSchema;
+ private Mapper objUnderTest;
+
+ private static final Path schema = Paths.get("src/test/resources/mapper_test/CommonEventFormat_30.1-ONAP.json");
+ private static final Path metadata = Paths.get("src/test/resources/valid_metadata.json");
+ private static final Path mapping = Paths.get("src/main/resources/mapping.ftl");
+ private static final Path dataDirectory = Paths.get("src/test/resources/mapper_test/mapping_data/");
+
+
+ @BeforeAll
+ static void classSetup() throws IOException {
+ JSONObject ves = new JSONObject(new String(Files.readAllBytes(schema)));
+ vesSchema = SchemaLoader.load(ves);
+
+ String metadataFileContents = new String(Files.readAllBytes(metadata));
+ eventMetadata = new Gson().fromJson(metadataFileContents, EventMetadata.class);
+ }
+
+ @BeforeEach
+ void setup() {
+ objUnderTest = new Mapper(mapping);
+ }
+
+ @ParameterizedTest
+ @MethodSource("getValidEvents")
+ void testValidEvent(Event testEvent) {
+ vesSchema.validate(new JSONObject(objUnderTest.map(testEvent)));
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInvalidEvents")
+ void testInvalidEvent(Event testEvent) {
+ assertThrows(MappingException.class, () -> objUnderTest.map(testEvent));
+ }
+
+ @Test
+ void testFailureToProcess() throws IOException, TemplateException {
+ Template mappingTemplateMock = mock(Template.class, RETURNS_DEEP_STUBS);
+ doThrow(new TemplateException(mock(Environment.class))).when(mappingTemplateMock)
+ .process(any(), any());
+ Whitebox.setInternalState(objUnderTest, "mappingTemplate", mappingTemplateMock);
+ Path testFile = Paths.get(dataDirectory + "/valid_data/no_measdata.xml");
+ Event testEvent = EventUtils.makeMockEvent(EventUtils.fileContentsToString(testFile), eventMetadata);
+ assertThrows(MappingException.class, () ->
+ objUnderTest.map(testEvent));
+ }
+
+ @Test
+ void testFailureToParse() {
+ assertThrows(XMLParseException.class, () ->
+ objUnderTest.map(EventUtils.makeMockEvent("not xml", eventMetadata)));
+ }
+
+ @Test
+ void testInvalidPath() {
+ assertThrows(IllegalArgumentException.class, () -> new Mapper(Paths.get("not a path")));
+ }
+
+ @Test
+ void testNullPath() {
+ assertThrows(NullPointerException.class, () -> new Mapper(null));
+ }
+
+ @Test
+ void testNullEvent() {
+ assertThrows(NullPointerException.class, () -> objUnderTest.map(null));
+ }
+
+ @Test
+ void testNullLogger() {
+ assertThrows(NullPointerException.class, () -> objUnderTest.map(mock(Event.class)));
+ }
+
+ static List<Event> getValidEvents() throws IOException {
+ return EventUtils.eventsFromDirectory(Paths.get(dataDirectory.toString() + "/valid_data/"), metadata);
+ }
+
+ static List<Event> getInvalidEvents() throws IOException {
+ return EventUtils.eventsFromDirectory(Paths.get(dataDirectory.toString() + "/invalid_data/"), metadata);
+ }
+}
+
diff --git a/src/test/java/utils/EventUtils.java b/src/test/java/utils/EventUtils.java
new file mode 100644
index 0000000..b265f1d
--- /dev/null
+++ b/src/test/java/utils/EventUtils.java
@@ -0,0 +1,87 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package utils;
+
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+
+import com.google.gson.Gson;
+import io.undertow.server.HttpServerExchange;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.onap.dcaegen2.services.pmmapper.model.Event;
+import org.onap.dcaegen2.services.pmmapper.model.EventMetadata;
+import org.slf4j.MDC;
+
+public class EventUtils {
+
+
+ /**
+ * reads contents of files inside the eventBodyDirectory, combines contents with metadata to make an Event Object.
+ * Fails test in the event of failure to read a file.
+ * @param eventBodyDirectory Path to directory with event body files.
+ * @param metadataPath Path to file with metadata object.
+ * @return List of Events containing the body as acquired from files inside eventBodyDirectory.
+ * @throws IOException in the event it fails to read from the files.
+ */
+ public static List<Event> eventsFromDirectory(Path eventBodyDirectory, Path metadataPath) throws IOException {
+ EventMetadata eventMetadata = new Gson().fromJson(fileContentsToString(metadataPath), EventMetadata.class);
+ try (Stream<Path> eventFileStream = Files.walk(eventBodyDirectory)) {
+ return eventFileStream.filter(Files::isRegularFile)
+ .filter(Files::isReadable)
+ .map(EventUtils::fileContentsToString)
+ .map(body -> EventUtils.makeMockEvent(body, eventMetadata))
+ .collect(Collectors.toList());
+ }
+ }
+
+ /**
+ * reads contents of file into a string.
+ * fails a tests in the event failure occurs.
+ * @param path path to file.
+ * @return string containing files contents
+ */
+ public static String fileContentsToString(Path path) {
+ try {
+ return new String(Files.readAllBytes(path));
+ } catch (IOException exception) {
+ fail("IOException occurred while generating events.");
+ }
+ return null;
+ }
+
+ /**
+ * @param body body for the event.
+ * @param eventMetadata metadata for the event.
+ * @return event with mock HttpServerExchange
+ */
+ public static Event makeMockEvent(String body, EventMetadata eventMetadata) {
+ return new Event(mock(HttpServerExchange.class, RETURNS_DEEP_STUBS), body, eventMetadata, new HashMap<>());
+ }
+}