2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019 Nordix Foundation.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.dcaegen2.services.pmmapper;
23 import static org.junit.Assert.assertFalse;
24 import static org.junit.Assert.assertTrue;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
26 import static org.mockito.Mockito.*;
27 import static org.mockserver.integration.ClientAndServer.startClientAndServer;
28 import static org.mockserver.model.HttpResponse.response;
30 import java.io.IOException;
31 import java.nio.file.Files;
32 import java.nio.file.Path;
33 import java.nio.file.Paths;
34 import java.util.Arrays;
35 import java.util.List;
37 import com.google.gson.Gson;
38 import io.undertow.server.HttpServerExchange;
39 import io.undertow.util.StatusCodes;
40 import org.onap.dcaegen2.services.pmmapper.utils.XMLValidator;
41 import reactor.core.publisher.Flux;
43 import org.junit.jupiter.api.AfterAll;
44 import org.junit.jupiter.api.BeforeAll;
45 import org.junit.jupiter.api.Test;
46 import org.junit.jupiter.api.extension.ExtendWith;
47 import org.mockito.Mockito;
48 import org.mockito.junit.jupiter.MockitoExtension;
49 import org.mockserver.client.server.MockServerClient;
50 import org.mockserver.integration.ClientAndServer;
51 import org.mockserver.model.HttpRequest;
52 import org.onap.dcaegen2.services.pmmapper.filtering.MeasFilterHandler;
53 import org.onap.dcaegen2.services.pmmapper.mapping.Mapper;
54 import org.onap.dcaegen2.services.pmmapper.model.Event;
55 import org.onap.dcaegen2.services.pmmapper.model.EventMetadata;
56 import org.onap.dcaegen2.services.pmmapper.model.MapperConfig;
57 import org.onap.dcaegen2.services.pmmapper.utils.MeasConverter;
58 import org.onap.dcaegen2.services.pmmapper.utils.MeasSplitter;
59 import utils.EventUtils;
62 @ExtendWith(MockitoExtension.class)
65 static ClientAndServer mockServer;
66 static MockServerClient client;
68 private static EventMetadata eventMetadata;
70 private static final Path dataDirectory = Paths.get("src/test/resources/mapper_test/mapping_data/");
71 private static final Path metadata = Paths.get("src/test/resources/valid_metadata.json");
72 private static final Path schema = Paths.get("src/main/resources/measCollec_plusString.xsd");
76 public static void setup() {
77 mockServer = startClientAndServer(1080);
78 client = new MockServerClient("127.0.0.1", 1080);
82 public static void teardown() {
87 void testHandleBackPressureNullValue() {
88 assertThrows(NullPointerException.class, () -> App.handleBackPressure(null));
92 void testHandleBackPressure() {
93 Event event = utils.EventUtils.makeMockEvent("", mock(EventMetadata.class));
94 App.handleBackPressure(event);
95 verify(event.getHttpServerExchange(), times(1)).setStatusCode(StatusCodes.TOO_MANY_REQUESTS);
96 verify(event.getHttpServerExchange(), times(1)).unDispatch();
100 void testReceiveRequestNullValue() {
101 assertThrows(NullPointerException.class, () -> App.receiveRequest(null));
105 void testReceiveRequest() {
106 Event event = utils.EventUtils.makeMockEvent("", mock(EventMetadata.class));
107 App.receiveRequest(event);
108 verify(event.getHttpServerExchange(), times(1)).setStatusCode(StatusCodes.OK);
109 verify(event.getHttpServerExchange(), times(1)).unDispatch();
113 public void testFilterByFileType_success() {
114 Event mockEvent = Mockito.mock(Event.class);
115 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
117 HttpServerExchange exchange = Mockito.mock(HttpServerExchange.class);
118 when(mockEvent.getHttpServerExchange()).thenReturn(exchange);
119 when(exchange.getRequestPath()).thenReturn("ATEST.xml");
121 boolean result = App.filterByFileType(new MeasFilterHandler(new MeasConverter()), mockEvent, mockConfig);
126 public void testFilterByFileType_NonXML() {
127 Event mockEvent = Mockito.mock(Event.class);
128 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
130 HttpServerExchange exchange = Mockito.mock(HttpServerExchange.class);
131 when(mockEvent.getHttpServerExchange()).thenReturn(exchange);
132 when(exchange.getRequestPath()).thenReturn("ATEST.png");
134 boolean result = App.filterByFileType(new MeasFilterHandler(new MeasConverter()), mockEvent, mockConfig);
139 public void testFilterByFileType_throwException() {
140 Event mockEvent = Mockito.mock(Event.class);
141 MeasFilterHandler mockFilter = Mockito.mock(MeasFilterHandler.class);
142 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
144 Mockito.when(mockFilter.filterByFileType(mockEvent)).thenThrow(RuntimeException.class);
146 boolean result = App.filterByFileType(mockFilter, mockEvent, mockConfig);
151 public void testValidateXML_success() throws IOException {
152 XMLValidator mockValidator = new XMLValidator(schema);
153 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
155 String metadataFileContents = new String(Files.readAllBytes(metadata));
156 eventMetadata = new Gson().fromJson(metadataFileContents, EventMetadata.class);
158 Path testFile = Paths.get(dataDirectory + "/valid_data/meas_results.xml");
159 Event mockEvent = EventUtils.makeMockEvent(EventUtils.fileContentsToString(testFile), eventMetadata);
161 boolean result = App.validate(mockValidator, mockEvent, mockConfig);
167 public void testValidateXML_failure() throws IOException {
168 XMLValidator mockValidator = new XMLValidator(schema);
169 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
171 String metadataFileContents = new String(Files.readAllBytes(metadata));
172 eventMetadata = new Gson().fromJson(metadataFileContents, EventMetadata.class);
174 Path testFile = Paths.get("src/test/resources/xml_validator_test/test_data/invalid/no_managed_element.xml");
175 Event mockEvent = EventUtils.makeMockEvent(EventUtils.fileContentsToString(testFile), eventMetadata);
177 boolean result = App.validate(mockValidator, mockEvent, mockConfig);
183 public void testValidateXML_throwException() {
184 Event mockEvent = Mockito.mock(Event.class);
185 XMLValidator mockValidator = Mockito.mock(XMLValidator.class);
186 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
188 Mockito.when(mockValidator.validate(mockEvent)).thenThrow(RuntimeException.class);
189 boolean result = App.validate(mockValidator, mockEvent, mockConfig);
195 public void testFilter_success() {
196 Event mockEvent = Mockito.mock(Event.class);
197 List<Event> mockEvents = Arrays.asList(mockEvent);
198 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
199 boolean result = App.filter(new MeasFilterHandler(new MeasConverter()), mockEvents, mockConfig);
204 public void testFilter_throwException() {
205 HttpRequest req = HttpRequest.request();
206 client.when(req).respond( response().withStatusCode(200));
208 Event mockEvent = Mockito.mock(Event.class);
209 List<Event> mockEvents = Arrays.asList(mockEvent);
210 MeasFilterHandler mockFilter = Mockito.mock(MeasFilterHandler.class);
211 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
213 Mockito.when(mockConfig.getDmaapDRDeleteEndpoint()).thenReturn("http://127.0.0.1:1080");
214 Mockito.when(mockConfig.getSubscriberIdentity()).thenReturn("sid");
215 Mockito.when(mockEvent.getPublishIdentity()).thenReturn("pid");
216 Mockito.when(mockFilter.filterByMeasType(mockEvent)).thenThrow(RuntimeException.class);
218 boolean x = App.filter(mockFilter, mockEvents, mockConfig);
225 public void testSplit_empty_success() {
226 Event mockEvent = Mockito.mock(Event.class);
227 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
228 MeasConverter mockMeasConverter = Mockito.mock(MeasConverter.class);
229 Flux<List<Event>> splitResult = App.split(new MeasSplitter(mockMeasConverter), mockEvent, mockConfig);
230 splitResult.equals(Flux.<List<Event>>empty());
234 public void testSplit_success() {
235 Event mockEvent = Mockito.mock(Event.class);
236 List<Event> mockEvents = Arrays.asList(mockEvent,mockEvent);
237 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
238 MeasSplitter mockSplitter = Mockito.mock(MeasSplitter.class);
239 Mockito.when(mockSplitter.split(mockEvent)).thenReturn(mockEvents);
241 Flux<List<Event>> splitResult = App.split(mockSplitter, mockEvent, mockConfig);
243 splitResult.equals(Flux.just(mockEvents));
247 public void testMapping_empty_success() {
248 Event mockEvent = Mockito.mock(Event.class);
249 MeasConverter mockMeasConverter = Mockito.mock(MeasConverter.class);
250 List<Event> mockEvents = Arrays.asList(mockEvent);
251 MapperConfig mockConfig = Mockito.mock(MapperConfig.class);
252 Path mappingTemplate = Paths.get("src/main/resources/mapping.ftl");
253 Flux<List<Event>> mappingResult = App.map(new Mapper(mappingTemplate,mockMeasConverter), mockEvents, mockConfig);
254 mappingResult.equals(Flux.<List<Event>>empty());