summaryrefslogtreecommitdiffstats
path: root/policy-management/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'policy-management/src/test/java')
-rw-r--r--policy-management/src/test/java/org/onap/policy/drools/protocol/coders/JsonProtocolFilterTest.java317
-rw-r--r--policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java45
2 files changed, 141 insertions, 221 deletions
diff --git a/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/JsonProtocolFilterTest.java b/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/JsonProtocolFilterTest.java
index e83e5880..e0baeb6d 100644
--- a/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/JsonProtocolFilterTest.java
+++ b/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/JsonProtocolFilterTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP
* ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 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.
@@ -24,205 +24,140 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import java.util.ArrayList;
-import java.util.List;
-
import org.junit.Test;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter.FilterRule;
-import org.onap.policy.drools.utils.Pair;
-
public class JsonProtocolFilterTest {
- private static final String NAME1 = "name1";
- private static final String REGEX1 = "regex1";
+ private static final String JSON =
+ "{\"requestID\":\"38adde30-cc22-11e8-a8d5-f2801f1b9fd1\",\"entity\":\"controller\","
+ + "\"controllers\":[{\"name\":\"test-controller\","
+ + "\"drools\":{\"groupId\":\"org.onap.policy.drools.test\","
+ + "\"artifactId\":\"test\",\"version\":\"0.0.1\"},\"operation\":\"update\"}]}";
+
+ /**
+ * Tests getting the rule expression of the filter.
+ */
+ @Test
+ public void getRuleTest() {
+ assertEquals("$.test", new JsonProtocolFilter("$.test").getRule());
+ }
+
+ /**
+ * Tests setting the rule expression of the filter.
+ */
+ @Test
+ public void setRuleTest() {
+ JsonProtocolFilter filter = new JsonProtocolFilter();
+ assertEquals(JsonProtocolFilter.MATCH_ANY, filter.getRule());
+ filter.setRule("$.test");
+ assertEquals("$.test", filter.getRule());
+ }
+
+ /**
+ * Tests that the rule expression will be set to match anything if an empty string is passed.
+ */
+ @Test
+ public void setRuleEmptyTest() {
+ assertEquals(JsonProtocolFilter.MATCH_ANY, new JsonProtocolFilter("").getRule());
+ }
+
+ /**
+ * Tests that the rule expression will be set to match anything if a null string is passed.
+ */
+ @Test
+ public void setRuleNullTest() {
+ assertEquals(JsonProtocolFilter.MATCH_ANY, new JsonProtocolFilter(null).getRule());
+ }
+
+ /**
+ * Tests accepting a message if all filter rules pass.
+ */
+ @Test
+ public void acceptPassTest() {
+ assertTrue(new JsonProtocolFilter(
+ "$.controllers[?(@.drools.version =~ /\\d\\.\\d\\.\\d/ && @.operation == 'update')]")
+ .accept(JSON));
+ }
+
+ /**
+ * Tests accepting a message without having to filter if the rule is set to match anything.
+ */
+ @Test
+ public void acceptAnyTest() {
+ assertTrue(new JsonProtocolFilter(null).accept(JSON));
+ }
- private static final String NAME2 = "name2";
- private static final String REGEX2 = "regex2";
+ /**
+ * Tests rejecting a message if one or more of the filter rules fail.
+ */
+ @Test
+ public void acceptFailTest() {
+ assertFalse(
+ new JsonProtocolFilter("$.controllers[?(@.drools.version =~ /\\\\d\\\\.\\\\d\\\\.2/)]")
+ .accept(JSON));
+ }
- private static final String NAME3 = "name3";
- private static final String REGEX3 = "regex3";
+ /**
+ * Tests finding field matches for a filter rule corresponding to a topic.
+ */
+ @Test
+ public void filterPassTest() {
+ assertEquals("38adde30-cc22-11e8-a8d5-f2801f1b9fd1", new JsonProtocolFilter("$.requestID").filter(JSON).get(0));
+ }
+
+ /**
+ * Tests that an empty list is returned when no matches are found.
+ */
+ @Test
+ public void filterFailTest() {
+ assertTrue(new JsonProtocolFilter("$.test").filter(JSON).isEmpty());
+ }
- private static final String NAME4 = "name4";
- private static final String REGEX4a = "^regex4a.*";
- private static final String REGEX4b = ".*regex4b$";
-
+ /**
+ * Tests static method for filtering a JSON string with an arbitrary expression.
+ */
+ @Test
+ public void staticFilterPassTest() {
+ assertEquals("controller", JsonProtocolFilter.filter(JSON, "$.entity").get(0));
+ }
+ /**
+ * Tests that an empty list is returned when the static filter() method does not find any matches.
+ */
@Test
- public void test() {
-
- // ******************** D E F I N E f i l t e r R u l e O b j e c t s ***************************
- // DEFINE one (1) filterRule object (using constructor without parms passed; instead use set methods
- FilterRule filterRule1 = new FilterRule();
- filterRule1.setName(NAME1);
- filterRule1.setRegex(REGEX1);
- assertEquals(filterRule1.getName(), NAME1);
- assertEquals(filterRule1.getRegex(), REGEX1);
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // DEFINE four (4) filterRule objects (using constructor passing the field values
- FilterRule filterRule2 = new FilterRule(NAME2, REGEX2);
- assertEquals(filterRule2.getName(), NAME2);
- assertEquals(filterRule2.getRegex(), REGEX2);
-
- FilterRule filterRule3 = new FilterRule(NAME3, REGEX3);
- assertEquals(filterRule3.getName(), NAME3);
- assertEquals(filterRule3.getRegex(), REGEX3);
-
- FilterRule filterRule4a = new FilterRule(NAME4, REGEX4a);
- assertEquals(filterRule4a.getName(), NAME4);
- assertEquals(filterRule4a.getRegex(), REGEX4a);
-
- FilterRule filterRule4b = new FilterRule(NAME4, REGEX4b);
- assertEquals(filterRule4b.getName(), NAME4);
- assertEquals(filterRule4b.getRegex(), REGEX4b);
-
-
-
- // ************************ D E F I N E f i l t e r L i s t s ************************************
- // DEFINE rawFiltersA
- List<Pair<String,String>> rawFiltersA = new ArrayList<>();
- rawFiltersA.add(new Pair<String,String>(filterRule1.getName(), filterRule1.getRegex()));
- rawFiltersA.add(new Pair<String,String>(filterRule2.getName(), filterRule2.getRegex()));
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // DEFINE filtersA
- List<FilterRule> filtersA = new ArrayList<>();
- for (Pair<String, String> filterPair: rawFiltersA) {
- if (filterPair.first() == null || filterPair.first().isEmpty()) {
- continue;
- }
- filtersA.add(new FilterRule(filterPair.first(), filterPair.second()));
- }
-
-
-
- // *********** I N S T A N T I A T E J s o n P r o t o c o l F i l t e r O b j e c t s **********
- // INSTANTIATE protocolFilterA (passing raw filters to the 'fromRawFilters' constructor)
- JsonProtocolFilter protocolFilterA = JsonProtocolFilter.fromRawFilters(rawFiltersA);
- assertTrue(protocolFilterA.isRules());
- assertEquals(protocolFilterA.getRules().toString(), filtersA.toString());
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // INSTANTIATE protocolFilterB (passing filters list to constructor which accepts such)
- JsonProtocolFilter protocolFilterB = new JsonProtocolFilter(filtersA);
- assertTrue(protocolFilterB.isRules());
- assertEquals(protocolFilterB.getRules(), filtersA);
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // INSTANTIATE protocolFilterC (using constructor without parms; add instead using setRules() method
- JsonProtocolFilter protocolFilterC = new JsonProtocolFilter();
- protocolFilterC.setRules(filtersA);
- assertTrue(protocolFilterC.isRules());
- assertEquals(protocolFilterC.getRules(), filtersA);
-
-
-
- // *** D E F I N E o t h e r f i l t e r L i s t s f o r v a l i d a t i o n s ************
- // DEFINE rawFiltersB
- List<Pair<String,String>> rawFiltersB = new ArrayList<>();
- rawFiltersB.add(new Pair<String,String>(filterRule1.getName(), filterRule1.getRegex()));
- rawFiltersB.add(new Pair<String,String>(filterRule2.getName(), filterRule2.getRegex()));
- rawFiltersB.add(new Pair<String,String>(filterRule3.getName(), filterRule3.getRegex()));
- rawFiltersB.add(new Pair<String,String>(filterRule4a.getName(), filterRule4a.getRegex()));
- rawFiltersB.add(new Pair<String,String>(filterRule4b.getName(), filterRule4b.getRegex()));
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // DEFINE filtersB
- List<FilterRule> filtersB = new ArrayList<>();
- for (Pair<String, String> filterPair: rawFiltersB) {
- filtersB.add(new FilterRule(filterPair.first(), filterPair.second()));
- }
-
-
-
- // *********** A D D T O p r o t o c o l F i l t e r B 3 m o r e f i l t e r s ************
- protocolFilterB.addRule(filterRule3.getName(), filterRule3.getRegex());
- protocolFilterB.addRule(filterRule4a.getName(), filterRule4a.getRegex());
- protocolFilterB.addRule(filterRule4b.getName(), filterRule4b.getRegex());
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // VALIDATE that protocolFilterB now contains filters passed using filtersA and the new ones just added
- assertEquals(protocolFilterB.getRules().toString(), filtersB.toString());
-
-
-
- // ************ D E L E T E f i l t e r s f r o m p r o t o c o l F i l t e r B ***********
- // DELETE specific filter from protocolFilterB by passing both the name & regex values
-
- assertTrue(protocolFilterB.getRules(NAME3).size() == 1);
- assertTrue(protocolFilterB.getRules(NAME3).get(0).getName().equals(NAME3));
- assertTrue(protocolFilterB.getRules(NAME3).get(0).getRegex().equals(REGEX3));
-
- assertTrue(protocolFilterB.getRules(NAME4).size() == 2);
- assertTrue(protocolFilterB.getRules(NAME4).get(0).getName().equals(NAME4));
- assertTrue(protocolFilterB.getRules(NAME4).get(0).getRegex().equals(REGEX4a));
- assertTrue(protocolFilterB.getRules(NAME4).get(1).getName().equals(NAME4));
- assertTrue(protocolFilterB.getRules(NAME4).get(1).getRegex().equals(REGEX4b));
-
- final String jsonA = "{ \"name1\":\"regex1\",\"name2\":\"regex2\","
- + "\"name3\":\"regex3\",\"name4\":\"regex4a\",\"name4\":\"regex4b\"}";
- final String jsonB = "{ \"name1\":\"regex1\",\"name2\":\"regex2\","
- + "\"name3\":\"regex3\",\"name4\":\"regex4a-regex4b\"}";
- final String jsonC = "{ \"name1\":\"regex1\",\"name2\":\"regex2\","
- + "\"name3\":\"regex3\",\"name4\":\"regex4a\"}";
- final String jsonD = "{ \"name1\":\"regex1\",\"name2\":\"regex2\","
- + "\"name3\":\"regex3\",\"name4\":\"regex4b\"}";
-
- assertFalse(protocolFilterB.accept(jsonA));
- assertTrue(protocolFilterB.accept(jsonB));
- assertFalse(protocolFilterB.accept(jsonC));
- assertFalse(protocolFilterB.accept(jsonD));
-
- protocolFilterB.deleteRule(NAME4, REGEX4a);
-
- assertTrue(protocolFilterB.accept(jsonA));
- assertTrue(protocolFilterB.accept(jsonB));
- assertFalse(protocolFilterB.accept(jsonC));
- assertTrue(protocolFilterB.accept(jsonD));
-
- protocolFilterB.addRule(NAME4, REGEX4a);
-
- assertTrue(protocolFilterB.getRules(NAME4).size() == 2);
- assertTrue(protocolFilterB.getRules(NAME4).get(0).getName().equals(NAME4));
- assertTrue(protocolFilterB.getRules(NAME4).get(0).getRegex().equals(REGEX4b));
- assertTrue(protocolFilterB.getRules(NAME4).get(1).getName().equals(NAME4));
- assertTrue(protocolFilterB.getRules(NAME4).get(1).getRegex().equals(REGEX4a));
-
- assertFalse(protocolFilterB.accept(jsonA));
- assertTrue(protocolFilterB.accept(jsonB));
- assertFalse(protocolFilterB.accept(jsonC));
- assertFalse(protocolFilterB.accept(jsonD));
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // DELETE all filters from protocolFilterB that have a match to the same name value
- protocolFilterB.deleteRules(NAME4);
-
- assertTrue(protocolFilterB.getRules(NAME4).isEmpty());
- assertTrue(protocolFilterB.accept(jsonA));
- assertTrue(protocolFilterB.accept(jsonB));
- assertTrue(protocolFilterB.accept(jsonC));
- assertTrue(protocolFilterB.accept(jsonD));
-
- assertTrue(protocolFilterB.getRules(NAME3).size() == 1);
- protocolFilterB.addRule(NAME3, REGEX3);
- assertTrue(protocolFilterB.getRules(NAME3).size() == 1);
- protocolFilterB.deleteRule(NAME3, REGEX3);
- assertTrue(protocolFilterB.getRules(NAME3).isEmpty());
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // VALIDATE that protocolFilterB now only contains the filters that were originally passed using filtersA
- assertEquals(protocolFilterB.getRules(), filtersA);
-
- // ************ A C C E P T J S O N I F I T P A S S E S A L L F I L T E R S ***********
- // ACCEPT TRUE a JSON that passes all filters
- String jsonE = "{ \"name1\":\"regex1\",\"name2\":\"regex2\"}";
- assertTrue(protocolFilterA.accept(jsonE));
-
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // ACCEPT FALSE a JSON that does NOT pass all filters
- String jsonF = "{ \"name1\":\"regex1\"}";
- assertFalse(protocolFilterA.accept(jsonF));
+ public void staticFilterFailTest() {
+ assertTrue(JsonProtocolFilter.filter(JSON, "$.test").isEmpty());
}
+ /**
+ * Tests that an exception is thrown if a null JSON string is passed.
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void staticFilterNullJsonTest() {
+ JsonProtocolFilter.filter(null, "[?($ =~ /.*/");
+ }
+
+ /**
+ * Tests that an exception is thrown if an empty JSON string is passed.
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void staticFilterEmptyJsonTest() {
+ JsonProtocolFilter.filter("", "[?($ =~ /.*/");
+ }
+
+ /**
+ * Tests that an exception is thrown if a null expression string is passed.
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void staticFilterNullExpressionTest() {
+ JsonProtocolFilter.filter("{\"hello\":\"world\"}", null);
+ }
+
+ /**
+ * Tests that an exception is thrown if an empty expression string is passed.
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void staticFilterEmptyExpressionTest() {
+ JsonProtocolFilter.filter("{\"hello\":\"world\"}", "");
+ }
} \ No newline at end of file
diff --git a/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java b/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java
index da491261..b7d72f31 100644
--- a/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java
+++ b/policy-management/src/test/java/org/onap/policy/drools/protocol/coders/ProtocolCoderToolsetTest.java
@@ -25,7 +25,6 @@ import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.junit.Assert;
@@ -39,7 +38,6 @@ import org.onap.policy.drools.controller.DroolsController;
import org.onap.policy.drools.controller.internal.MavenDroolsControllerTest;
import org.onap.policy.drools.properties.DroolsProperties;
import org.onap.policy.drools.protocol.coders.EventProtocolCoder.CoderFilters;
-import org.onap.policy.drools.protocol.coders.JsonProtocolFilter.FilterRule;
import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomGsonCoder;
import org.onap.policy.drools.util.KieUtils;
import org.onap.policy.drools.utils.Triple;
@@ -64,7 +62,7 @@ public class ProtocolCoderToolsetTest {
/**
* Setup.
- *
+ *
* @throws IOException throws IO Exception
*/
@Before
@@ -96,7 +94,7 @@ public class ProtocolCoderToolsetTest {
/**
* Test the Gson toolset.
- *
+ *
* @param protocolFilter protocol filter
*/
public void testGsonToolset(JsonProtocolFilter protocolFilter) {
@@ -157,11 +155,9 @@ public class ProtocolCoderToolsetTest {
CoderFilters coderFilters = coderToolset.getCoder(Triple.class.getCanonicalName());
Assert.assertTrue(coderFilters.getCodedClass() == Triple.class.getCanonicalName());
Assert.assertTrue(coderFilters.getFilter() == protocolFilter);
- Assert.assertTrue(coderFilters.getFilter().getRules("second").size() == 1);
- Assert.assertTrue(coderFilters.getFilter().getRules("third").size() == 1);
+ Assert.assertTrue(coderFilters.getFilter().getRule() != null);
- coderFilters.getFilter().getRules("second").get(0).setRegex("^v2$");
- coderFilters.getFilter().getRules("third").get(0).setRegex(".*v3.*");
+ coderFilters.getFilter().setRule("[?($.second =~ /^v2$/ && $.third =~ /.*v3.*/)]");
tripleDecoded = (Triple<String, String, String>) coderToolset.decode(tripleEncoded);
@@ -169,8 +165,8 @@ public class ProtocolCoderToolsetTest {
Assert.assertTrue(tripleDecoded.second().equals(triple.second()));
Assert.assertTrue(tripleDecoded.third().equals(triple.third()));
- coderFilters.getFilter().deleteRules("third");
- Assert.assertTrue(coderFilters.getFilter().getRules("third").isEmpty());
+ coderFilters.getFilter().setRule(null);
+ Assert.assertEquals("[?($ =~ /.*/)]", coderFilters.getFilter().getRule());
tripleDecoded = (Triple<String, String, String>) coderToolset.decode(tripleEncoded);
@@ -178,7 +174,7 @@ public class ProtocolCoderToolsetTest {
Assert.assertTrue(tripleDecoded.second().equals(triple.second()));
Assert.assertTrue(tripleDecoded.third().equals(triple.third()));
- coderFilters.getFilter().addRule("third", ".*v3.*");
+ coderFilters.getFilter().setRule("[?($.third =~ /.*v3.*/)]");
}
private String encode(ProtocolCoderToolset coderToolset, Triple<String, String, String> triple) {
@@ -188,10 +184,8 @@ public class ProtocolCoderToolsetTest {
}
private void addRemoveCoder(ProtocolCoderToolset coderToolset) {
- List<FilterRule> filters = new ArrayList<>();
- filters.add(new FilterRule("second", ".*"));
-
- coderToolset.addCoder(this.getClass().getCanonicalName(), new JsonProtocolFilter(filters), 654321);
+ coderToolset.addCoder(this.getClass().getCanonicalName(),
+ new JsonProtocolFilter("[?($.second =~ /.*/)]"), 654321);
Assert.assertTrue(coderToolset.getCoders().size() == 2);
coderToolset.removeCoders(this.getClass().getCanonicalName());
@@ -199,22 +193,18 @@ public class ProtocolCoderToolsetTest {
}
private void updateCoderFilterRule(ProtocolCoderToolset coderToolset) {
- List<FilterRule> filters = new ArrayList<>();
- filters.add(new FilterRule("third", ".*"));
- coderToolset.addCoder(Triple.class.getCanonicalName(), new JsonProtocolFilter(filters), 654321);
+ coderToolset.addCoder(Triple.class.getCanonicalName(), new JsonProtocolFilter("[?($.third =~ /.*/)]"), 654321);
Assert.assertTrue(coderToolset.getCoders().size() == 1);
Assert.assertTrue(coderToolset.getCoder(Triple.class.getCanonicalName()).getModelClassLoaderHash() == 654321);
Assert.assertTrue(
- coderToolset.getCoder(Triple.class.getCanonicalName()).getFilter().getRules("third").size() == 1);
-
- Assert.assertTrue(
- coderToolset.getCoder(Triple.class.getCanonicalName()).getFilter().getRules("third").size() == 1);
+ coderToolset.getCoder(
+ Triple.class.getCanonicalName()).getFilter().getRule() != null);
- Assert.assertTrue(".*".equals(coderToolset.getCoder(Triple.class.getCanonicalName()).getFilter()
- .getRules("third").get(0).getRegex()));
+ Assert.assertTrue("[?($.third =~ /.*/)]".equals(coderToolset.getCoder(Triple.class.getCanonicalName())
+ .getFilter().getRule()));
}
private void validateInitialization(JsonProtocolFilter protocolFilter, ProtocolCoderToolset coderToolset) {
@@ -254,11 +244,6 @@ public class ProtocolCoderToolsetTest {
}
private JsonProtocolFilter createFilterSet() {
- List<FilterRule> filters = new ArrayList<>();
- filters.add(new FilterRule("first", ".*"));
- filters.add(new FilterRule("second", "^blah.*"));
- filters.add(new FilterRule("third", "^hello$"));
-
- return new JsonProtocolFilter(filters);
+ return new JsonProtocolFilter("[?($.first =~ /.*/ && $.second =~ /^blah.*/ && $.third =~ /^hello$/)]");
}
}