2 * ===============================LICENSE_START======================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============================LICENSE_END===========================================
21 package org.openecomp.dcae.apod.analytics.common.service.filter;
23 import com.google.common.collect.ImmutableList;
24 import org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.openecomp.dcae.apod.analytics.common.BaseAnalyticsCommonUnitTest;
28 import org.openecomp.dcae.apod.analytics.common.service.processor.GenericMessageChainProcessor;
30 import static org.junit.Assert.assertEquals;
33 * @author Rajiv Singla . Creation Date: 2/10/2017.
35 public class GenericJsonMessageFilterTest extends BaseAnalyticsCommonUnitTest {
37 private String jsonMessage;
40 public void before() throws Exception {
41 jsonMessage = fromStream(CEF_MESSAGE_FILE_PATH);
46 public void testJsonMessageFilterWhenAllFiltersPassed() throws Exception {
48 final JsonMessageFilterProcessorContext finalMessageProcessorContext =
49 processJsonMessageFilterChain(jsonMessage,
50 "domainFilter", "$.event.commonEventHeader.domain", "measurementsForVfScaling",
51 "functionalRoleFilter", "$.event.commonEventHeader.functionalRole", "vFirewall");
53 assertJsonMessageAssertions(jsonMessage, finalMessageProcessorContext, true, true, 2);
58 public void testJsonMessageFilterWhenJsonPathValueIsANumber() throws Exception {
60 final JsonMessageFilterProcessorContext finalMessageProcessorContext =
61 processJsonMessageFilterChain(jsonMessage,
62 "domainFilter", "$.event.commonEventHeader.sequence", "375",
63 "functionalRoleFilter", "$.event.commonEventHeader.functionalRole", "vFirewall");
65 assertJsonMessageAssertions(jsonMessage, finalMessageProcessorContext, true, true, 2);
69 public void testJsonMessageFilterWhenOneFilterDoesNotMatch() throws Exception {
71 final JsonMessageFilterProcessorContext finalMessageProcessorContext =
72 processJsonMessageFilterChain(jsonMessage,
73 "domainFilter", "$.event.commonEventHeader.domain", "xxxxxxxxxxx",
74 "functionalRoleFilter", "$.event.commonEventHeader.functionalRole", "vFirewall");
76 assertJsonMessageAssertions(jsonMessage, finalMessageProcessorContext, false, false, 1);
80 public void testJsonMessageFilterWhenJsonPathDoesNotExist() throws Exception {
82 final JsonMessageFilterProcessorContext finalMessageProcessorContext =
83 processJsonMessageFilterChain(jsonMessage,
84 "domainFilter", "$.event.commonEventHeader.xxxxxxx", "measurementsForVfScaling",
85 "functionalRoleFilter", "$.event.commonEventHeader.functionalRole", "vFirewall");
87 assertJsonMessageAssertions(jsonMessage, finalMessageProcessorContext, false, false, 1);
91 public void testJsonMessageFilterWhenIncomingMessageIsBlank() throws Exception {
93 final JsonMessageFilterProcessorContext finalMessageProcessorContext =
94 processJsonMessageFilterChain("",
95 "domainFilter", "$.event.commonEventHeader.domain", "measurementsForVfScaling",
96 "functionalRoleFilter", "$.event.commonEventHeader.functionalRole", "vFirewall");
98 assertJsonMessageAssertions("", finalMessageProcessorContext, false, null, 1);
103 public void testJsonMessageFilterWhenIncomingMessageIsNotValidJson() throws Exception {
105 final JsonMessageFilterProcessorContext finalMessageProcessorContext =
106 processJsonMessageFilterChain("invalidJson",
107 "domainFilter", "$.event.commonEventHeader.domain", "measurementsForVfScaling",
108 "functionalRoleFilter", "$.event.commonEventHeader.functionalRole", "vFirewall");
110 assertJsonMessageAssertions("invalidJson", finalMessageProcessorContext, false, null, 1);
115 private static void assertJsonMessageAssertions(
116 final String jsonMessage, final JsonMessageFilterProcessorContext finalMessageProcessorContext,
117 final Boolean canProcessingContinueFlag, final Boolean matchedFlag,
118 final int messageProcessorCount) throws Exception {
120 assertJson(jsonMessage, finalMessageProcessorContext.getMessage());
121 Assert.assertEquals(canProcessingContinueFlag, finalMessageProcessorContext.canProcessingContinue());
122 assertEquals(matchedFlag, finalMessageProcessorContext.getMatched());
123 Assert.assertEquals(finalMessageProcessorContext.getMessageProcessors().size(), messageProcessorCount);
128 private static JsonMessageFilterProcessorContext processJsonMessageFilterChain(
129 final String jsonMessage,
130 final String firstFilterName, final String firstFilterPath, final String firstFilterValue,
131 final String secondFilterName, final String secondFilterPath, final String secondFilterValue) {
134 final GenericJsonMessageFilter firstFilter = new GenericJsonMessageFilter(firstFilterName, firstFilterPath,
136 final GenericJsonMessageFilter secondFilter = new GenericJsonMessageFilter(secondFilterName,
137 secondFilterPath, secondFilterValue);
139 // create initial processor context containing the json message that need to be processed
140 final JsonMessageFilterProcessorContext initialProcessorContext =
141 new JsonMessageFilterProcessorContext(jsonMessage);
143 // create a generic message chain processor and feed it list of processors and initialProcessor context
144 final GenericMessageChainProcessor<JsonMessageFilterProcessorContext> messageChainProcessor =
145 new GenericMessageChainProcessor<>(ImmutableList.of(firstFilter, secondFilter),
146 initialProcessorContext);
148 // process the generic message chain
149 return messageChainProcessor.processChain();