You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by vr...@apache.org on 2016/06/21 23:48:55 UTC
[09/50] [abbrv] hadoop git commit: YARN-4447. Provide a mechanism to
represent complex filters and parse them at the REST layer (Varun Saxena via
sjlee)
http://git-wip-us.apache.org/repos/asf/hadoop/blob/8c00fef2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServicesUtils.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServicesUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServicesUtils.java
new file mode 100644
index 0000000..e991d27
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServicesUtils.java
@@ -0,0 +1,923 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.hadoop.yarn.server.timelineservice.reader;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineCompareFilter;
+import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineCompareOp;
+import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineExistsFilter;
+import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineFilterList;
+import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineFilterList.Operator;
+import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineKeyValueFilter;
+import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelineKeyValuesFilter;
+import org.apache.hadoop.yarn.server.timelineservice.reader.filter.TimelinePrefixFilter;
+import org.junit.Test;
+
+import com.google.common.collect.Sets;
+
+public class TestTimelineReaderWebServicesUtils {
+ private static void verifyFilterList(String expr, TimelineFilterList list,
+ TimelineFilterList expectedList) throws Exception {
+ assertNotNull(list);
+ assertTrue("Unexpected List received after parsing expression " + expr +
+ ". Expected=" + expectedList + " but Actual=" + list,
+ list.equals(expectedList));
+ }
+
+ @Test
+ public void testMetricFiltersParsing() throws Exception {
+ String expr = "(((key11 ne 234 AND key12 gt 23) AND " +
+ "(key13 lt 34 OR key14 ge 567)) OR (key21 lt 24 OR key22 le 45))";
+ TimelineFilterList expectedList = new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ Operator.AND,
+ new TimelineFilterList(
+ Operator.AND,
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "key11", 234, false),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_THAN,
+ "key12", 23, true)
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "key13", 34, true),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_OR_EQUAL,
+ "key14", 567, true)
+ )
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "key21", 24, true),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_OR_EQUAL,
+ "key22", 45, true)
+ )
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "abc ene 234";
+ expectedList = new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, true)
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "abc ne 234";
+ expectedList = new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false)
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "abc ne 234 AND def gt 23";
+ expectedList = new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_THAN,
+ "def", 23, true)
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "(abc ne 234 AND def gt 23)";
+ expectedList = new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_THAN,
+ "def", 23, true)
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "abc ne 234 AND def gt 23 OR rst lt 24";
+ expectedList = new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_THAN,
+ "def", 23, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "rst", 24, true)
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "abc ne 234 AND def gt 23 OR rst lt 24 OR xyz le 456";
+ expectedList = new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_THAN,
+ "def", 23, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "rst", 24, true),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_OR_EQUAL,
+ "xyz", 456, true)
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "abc ne 234 AND def gt 23 OR rst lt 24 OR xyz le 456 AND pqr ge 2";
+ expectedList = new TimelineFilterList(
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_THAN,
+ "def", 23, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "rst", 24, true),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_OR_EQUAL,
+ "xyz", 456, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_OR_EQUAL,
+ "pqr", 2, true)
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ // Test with unnecessary spaces.
+ expr = " abc ne 234 AND def gt 23 OR rst lt "+
+ " 24 OR xyz le 456 AND pqr ge 2 ";
+ expectedList = new TimelineFilterList(
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_THAN,
+ "def", 23, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "rst", 24, true),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_OR_EQUAL,
+ "xyz", 456, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_OR_EQUAL,
+ "pqr", 2, true)
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "(((key11 ne 234 AND key12 gt 23 OR key13 lt 24 OR key14 le 456 " +
+ "AND key15 ge 2) AND (key16 lt 34 OR key17 ge 567)) OR (key21 lt 24 " +
+ "OR key22 le 45))";
+ expectedList = new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ Operator.AND,
+ new TimelineFilterList(
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "key11", 234, false),
+ new TimelineCompareFilter(
+ TimelineCompareOp.GREATER_THAN, "key12", 23, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "key13", 24, true),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_OR_EQUAL,
+ "key14", 456, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_OR_EQUAL,
+ "key15", 2, true)
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "key16", 34, true),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_OR_EQUAL,
+ "key17", 567, true)
+ )
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "key21", 24, true),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_OR_EQUAL,
+ "key22", 45, true)
+ )
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = " ( ( ( key11 ne 234 AND key12 gt " +
+ "23 OR key13 lt 24 OR key14 le 456 AND key15 ge 2" +
+ " ) AND ( key16 lt 34 OR key17 ge 567 ) ) OR " +
+ "( key21 lt 24 OR key22 le 45 ) ) ";
+ expectedList = new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ Operator.AND,
+ new TimelineFilterList(
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineCompareFilter(TimelineCompareOp.NOT_EQUAL,
+ "key11", 234, false),
+ new TimelineCompareFilter(
+ TimelineCompareOp.GREATER_THAN, "key12", 23, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "key13", 24, true),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_OR_EQUAL,
+ "key14", 456, true)
+ ),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_OR_EQUAL,
+ "key15", 2, true)
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "key16", 34, true),
+ new TimelineCompareFilter(TimelineCompareOp.GREATER_OR_EQUAL,
+ "key17", 567, true)
+ )
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineCompareFilter(TimelineCompareOp.LESS_THAN,
+ "key21", 24, true),
+ new TimelineCompareFilter(TimelineCompareOp.LESS_OR_EQUAL,
+ "key22", 45, true)
+ )
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr), expectedList);
+
+ expr = "(((key11 ne 234 AND key12 gt 23 OR key13 lt 24 OR key14 le 456 " +
+ "AND key15 ge 2) AND (key16 lt 34 OR key17 ge 567)) OR (key21 lt 24 " +
+ "OR key22 le 45)";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Improper brackers. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(((key11 ne 234 AND key12 gt v3 OR key13 lt 24 OR key14 le 456 " +
+ "AND key15 ge 2) AND (key16 lt 34 OR key17 ge 567)) OR (key21 lt 24 " +
+ "OR key22 le 45))";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Non Numeric value. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(((key11 ne (234 AND key12 gt 3 OR key13 lt 24 OR key14 le 456 " +
+ "AND key15 ge 2) AND (key16 lt 34 OR key17 ge 567)) OR (key21 lt 24 " +
+ "OR key22 le 45))";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Unexpected opening bracket. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(((k)ey11 ne 234 AND key12 gt 3 OR key13 lt 24 OR key14 le 456 " +
+ "AND key15 ge 2) AND (key16 lt 34 OR key17 ge 567)) OR (key21 lt 24 " +
+ "OR key22 le 45))";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Unexpected closing bracket. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(((key11 rs 234 AND key12 gt 3 OR key13 lt 24 OR key14 le 456 " +
+ "AND key15 ge 2) AND (key16 lt 34 OR key17 ge 567)) OR (key21 lt 24 " +
+ "OR key22 le 45))";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Improper compare op. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(((key11 ne 234 PI key12 gt 3 OR key13 lt 24 OR key14 le 456 " +
+ "AND key15 ge 2) AND (key16 lt 34 OR key17 ge 567)) OR (key21 lt 24 " +
+ "OR key22 le 45))";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Improper op. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(((key11 ne 234 PI key12 gt 3 OR key13 lt 24 OR key14 le 456 " +
+ "AND key15 ge 2) AND (key16 lt 34 OR key17 ge 567)) OR (key21 lt 24 " +
+ "OR key22 le 45))";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Improper op. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(key11 ne 234 AND key12 gt 3)) OR (key13 lt 24 OR key14 le 456)";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Unbalanced brackets. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(key11 rne 234 AND key12 gt 3) OR (key13 lt 24 OR key14 le 456)";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Invalid compareop. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ expr = "(key11 ne 234 AND key12 gt 3) OR (key13 lt 24 OR key14 le";
+ try {
+ TimelineReaderWebServicesUtils.parseMetricFilters(expr);
+ fail("Compareop cant be parsed. Exception should have been thrown.");
+ } catch (TimelineParseException e) {}
+
+ assertNull(TimelineReaderWebServicesUtils.parseMetricFilters(null));
+ assertNull(TimelineReaderWebServicesUtils.parseMetricFilters(" "));
+ }
+
+ @Test
+ public void testConfigFiltersParsing() throws Exception {
+ String expr = "(((key11 ne 234 AND key12 eq val12) AND " +
+ "(key13 ene val13 OR key14 eq 567)) OR (key21 eq val_21 OR key22 eq " +
+ "val.22))";
+ TimelineFilterList expectedList = new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ Operator.AND,
+ new TimelineFilterList(
+ Operator.AND,
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "key11", "234", false),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "key12", "val12", true)
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "key13", "val13", true),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "key14", "567", true)
+ )
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "key21", "val_21", true),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "key22", "val.22", true)
+ )
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseKVFilters(expr, true), expectedList);
+
+ expr = "abc ne 234 AND def eq 23 OR rst ene 24 OR xyz eq 456 AND pqr eq 2";
+ expectedList = new TimelineFilterList(
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", "234", false),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "def", "23", true)
+ ),
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "rst", "24", true),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "xyz", "456", true)
+ ),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "pqr", "2", true)
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseKVFilters(expr, true), expectedList);
+
+ // Test with unnecessary spaces.
+ expr = " abc ne 234 AND def eq 23 OR rst ene "+
+ " 24 OR xyz eq 456 AND pqr eq 2 ";
+ expectedList = new TimelineFilterList(
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", "234", false),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "def", "23", true)
+ ),
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "rst", "24", true),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "xyz", "456", true)
+ ),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "pqr", "2", true)
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseKVFilters(expr, true), expectedList);
+
+ expr = "abc gt 234 AND def eq 23 OR rst ene 24 OR xyz eq 456 AND pqr eq 2";
+ try {
+ TimelineReaderWebServicesUtils.parseKVFilters(expr, true);
+ fail("Invalid compareop specified for config filters. Should be either" +
+ " eq,ne or ene and exception should have been thrown.");
+ } catch (TimelineParseException e){}
+ }
+ @Test
+ public void testInfoFiltersParsing() throws Exception {
+ String expr = "(((key11 ne 234 AND key12 eq val12) AND " +
+ "(key13 ene val13 OR key14 eq 567)) OR (key21 eq val_21 OR key22 eq " +
+ "5.0))";
+ TimelineFilterList expectedList = new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ Operator.AND,
+ new TimelineFilterList(
+ Operator.AND,
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "key11", 234, false),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "key12", "val12", true)
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "key13", "val13", true),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "key14", 567, true)
+ )
+ ),
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "key21", "val_21", true),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "key22", 5.0, true)
+ )
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseKVFilters(expr, false), expectedList);
+
+ expr = "abc ne 234 AND def eq 23 OR rst ene 24 OR xyz eq 456 AND pqr eq " +
+ "val.1234";
+ expectedList = new TimelineFilterList(
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "def", 23, true)
+ ),
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "rst", 24, true),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "xyz", 456, true)
+ ),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "pqr", "val.1234", true)
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseKVFilters(expr, false), expectedList);
+
+ // Test with unnecessary spaces.
+ expr = " abc ne 234 AND def eq 23 OR rst ene "+
+ " 24 OR xyz eq 456 AND pqr eq 2 ";
+ expectedList = new TimelineFilterList(
+ new TimelineFilterList(
+ Operator.OR,
+ new TimelineFilterList(
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "abc", 234, false),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "def", 23, true)
+ ),
+ new TimelineKeyValueFilter(TimelineCompareOp.NOT_EQUAL,
+ "rst", 24, true),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "xyz", 456, true)
+ ),
+ new TimelineKeyValueFilter(TimelineCompareOp.EQUAL,
+ "pqr", 2, true)
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseKVFilters(expr, false), expectedList);
+ }
+
+ @Test
+ public void testEventFiltersParsing() throws Exception {
+ String expr = "abc,def";
+ TimelineFilterList expectedList = new TimelineFilterList(
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "abc"),
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "def")
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseEventFilters(expr), expectedList);
+
+ expr = "(abc,def)";
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseEventFilters(expr), expectedList);
+
+ expr = "(abc,def) OR (rst, uvx)";
+ expectedList = new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "abc"),
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "def")
+ ),
+ new TimelineFilterList(
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "rst"),
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "uvx")
+ )
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseEventFilters(expr), expectedList);
+
+ expr = "!(abc,def,uvc) OR (rst, uvx)";
+ expectedList = new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineExistsFilter(TimelineCompareOp.NOT_EQUAL, "abc"),
+ new TimelineExistsFilter(TimelineCompareOp.NOT_EQUAL, "def"),
+ new TimelineExistsFilter(TimelineCompareOp.NOT_EQUAL, "uvc")
+ ),
+ new TimelineFilterList(
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "rst"),
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "uvx")
+ )
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseEventFilters(expr), expectedList);
+
+ expr = "(((!(abc,def,uvc) OR (rst, uvx)) AND (!(abcdefg) OR !(ghj,tyu)))" +
+ " OR ((bcd,tyu) AND uvb))";
+ expectedList = new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineExistsFilter(
+ TimelineCompareOp.NOT_EQUAL, "abc"),
+ new TimelineExistsFilter(
+ TimelineCompareOp.NOT_EQUAL, "def"),
+ new TimelineExistsFilter(TimelineCompareOp.NOT_EQUAL, "uvc")
+ ),
+ new TimelineFilterList(
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "rst"),
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "uvx")
+ )
+ ),
+ new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineExistsFilter(
+ TimelineCompareOp.NOT_EQUAL, "abcdefg")
+ ),
+ new TimelineFilterList(
+ new TimelineExistsFilter(
+ TimelineCompareOp.NOT_EQUAL, "ghj"),
+ new TimelineExistsFilter(
+ TimelineCompareOp.NOT_EQUAL, "tyu")
+ )
+ )
+ ),
+ new TimelineFilterList(
+ new TimelineFilterList(
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "bcd"),
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "tyu")
+ ),
+ new TimelineExistsFilter(TimelineCompareOp.EQUAL, "uvb")
+ )
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseEventFilters(expr), expectedList);
+
+ expr = " ( ( ( ! ( abc , def , uvc) OR ( rst , uvx ) )" +
+ " AND ( ! ( abcdefg ) OR ! ( ghj, tyu) ) ) OR ( (" +
+ " bcd , tyu ) AND uvb ) )";
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseEventFilters(expr), expectedList);
+
+ expr = "(((!(abc,def,uvc) OR (rst, uvx)) AND (!(abcdefg) OR !(ghj,tyu)))" +
+ " OR ((bcd,tyu) AND uvb)";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Improper brackets. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "(((!(abc,def,uvc) (OR (rst, uvx)) AND (!(abcdefg) OR !(ghj,tyu)))" +
+ " OR ((bcd,tyu) AND uvb))";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Unexpected opening bracket. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "(((!(abc,def,uvc) OR) (rst, uvx)) AND (!(abcdefg) OR !(ghj,tyu)))" +
+ " OR ((bcd,tyu) AND uvb))";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Unexpected closing bracket. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "(((!(abc,def,uvc) PI (rst, uvx)) AND (!(abcdefg) OR !(ghj,tyu)))" +
+ " OR ((bcd,tyu) AND uvb))";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Invalid op. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "(((!(abc,def,uvc) !OR (rst, uvx)) AND (!(abcdefg) OR !(ghj,tyu)))" +
+ " OR ((bcd,tyu) AND uvb))";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Unexpected ! char. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "abc,def,uvc) OR (rst, uvx)";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Unexpected closing bracket. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "abc,def,uvc OR )rst, uvx)";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Unexpected closing bracket. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "abc,def,uvc OR ,rst, uvx)";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Unexpected delimiter. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "abc,def,uvc OR ! ";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Unexpected not char. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "(abc,def,uvc)) OR (rst, uvx)";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("Unbalanced brackets. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "(((! ,(abc,def,uvc) OR (rst, uvx)) AND (!(abcdefg) OR !(ghj,tyu" +
+ "))) OR ((bcd,tyu) AND uvb))";
+ try {
+ TimelineReaderWebServicesUtils.parseEventFilters(expr);
+ fail("( should follow ! char. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ assertNull(TimelineReaderWebServicesUtils.parseEventFilters(null));
+ assertNull(TimelineReaderWebServicesUtils.parseEventFilters(" "));
+ }
+
+ @Test
+ public void testRelationFiltersParsing() throws Exception {
+ String expr = "type1:entity11,type2:entity21:entity22";
+ TimelineFilterList expectedList = new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type1", Sets.newHashSet((Object)"entity11")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type2", Sets.newHashSet((Object)"entity21", "entity22"))
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseRelationFilters(expr), expectedList);
+
+ expr = "(type1:entity11,type2:entity21:entity22)";
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseRelationFilters(expr), expectedList);
+
+ expr = "(type1:entity11,type2:entity21:entity22) OR (type3:entity31:" +
+ "entity32:entity33,type1:entity11:entity12)";
+ expectedList = new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type1", Sets.newHashSet((Object)"entity11")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type2", Sets.newHashSet((Object)"entity21", "entity22"))
+ ),
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type3", Sets.newHashSet(
+ (Object)"entity31", "entity32", "entity33")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type1", Sets.newHashSet((Object)"entity11", "entity12"))
+ )
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseRelationFilters(expr), expectedList);
+
+ expr = "!(type1:entity11,type2:entity21:entity22,type5:entity51) OR " +
+ "(type3:entity31:entity32:entity33,type1:entity11:entity12)";
+
+ expectedList = new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type1", Sets.newHashSet((Object)"entity11")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type2", Sets.newHashSet((Object)"entity21", "entity22")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type5", Sets.newHashSet((Object)"entity51"))
+ ),
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type3", Sets.newHashSet(
+ (Object)"entity31", "entity32", "entity33")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type1", Sets.newHashSet((Object)"entity11", "entity12"))
+ )
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseRelationFilters(expr), expectedList);
+
+ expr = "(((!(type1:entity11,type2:entity21:entity22,type5:entity51) OR " +
+ "(type3:entity31:entity32:entity33,type1:entity11:entity12)) AND "+
+ "(!(type11:entity111) OR !(type4:entity43:entity44:entity47:entity49," +
+ "type7:entity71))) OR ((type2:entity2,type8:entity88) AND t9:e:e1))";
+ expectedList = new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type1", Sets.newHashSet((Object)"entity11")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type2", Sets.newHashSet(
+ (Object)"entity21", "entity22")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type5", Sets.newHashSet((Object)"entity51"))
+ ),
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type3", Sets.newHashSet(
+ (Object)"entity31", "entity32", "entity33")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type1", Sets.newHashSet(
+ (Object)"entity11", "entity12"))
+ )
+ ),
+ new TimelineFilterList(Operator.OR,
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type11", Sets.newHashSet((Object)"entity111"))
+ ),
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type4", Sets.newHashSet((Object)"entity43","entity44",
+ "entity47","entity49")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.NOT_EQUAL,
+ "type7", Sets.newHashSet((Object)"entity71"))
+ )
+ )
+ ),
+ new TimelineFilterList(
+ new TimelineFilterList(
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type2", Sets.newHashSet((Object)"entity2")),
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL,
+ "type8", Sets.newHashSet((Object)"entity88"))
+ ),
+ new TimelineKeyValuesFilter(TimelineCompareOp.EQUAL, "t9",
+ Sets.newHashSet((Object)"e", "e1"))
+ )
+ );
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseRelationFilters(expr), expectedList);
+
+ expr = " ( ( ( ! ( type1:entity11 , type2:entity21:entity22" +
+ " , type5:entity51 ) OR ( type3:entity31:entity32:entity33 " +
+ " , type1:entity11:entity12)) AND (!( type11:entity111 ) OR " +
+ " ! ( type4:entity43:entity44:entity47:entity49 , " +
+ "type7:entity71 ) ) ) OR ( ( type2:entity2 , type8:entity88) " +
+ "AND t9:e:e1 ) ) ";
+ verifyFilterList(expr, TimelineReaderWebServicesUtils.
+ parseRelationFilters(expr), expectedList);
+
+ expr = "(((!(type1 : entity11,type2:entity21:entity22,type5:entity51) OR " +
+ "(type3:entity31:entity32:entity33,type1:entity11:entity12)) AND "+
+ "(!(type11:entity111) OR !(type4:entity43:entity44:entity47:entity49," +
+ "type7:entity71))) OR ((type2:entity2,type8:entity88) AND t9:e:e1))";
+ try {
+ TimelineReaderWebServicesUtils.parseRelationFilters(expr);
+ fail("Space not allowed in relation expression. Exception should have " +
+ "been thrown");
+ } catch (TimelineParseException e){}
+ }
+
+ @Test
+ public void testDataToRetrieve() throws Exception {
+ String expr = "abc,def";
+ TimelineFilterList expectedList = new TimelineFilterList(Operator.OR,
+ new TimelinePrefixFilter(TimelineCompareOp.EQUAL, "abc"),
+ new TimelinePrefixFilter(TimelineCompareOp.EQUAL, "def")
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = "(abc,def)";
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = " ( abc , def ) ";
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = " abc , def ";
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = "!(abc,def)";
+ expectedList = new TimelineFilterList(
+ new TimelinePrefixFilter(TimelineCompareOp.NOT_EQUAL, "abc"),
+ new TimelinePrefixFilter(TimelineCompareOp.NOT_EQUAL, "def")
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = " ! ( abc , def ) ";
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = "!(abc)";
+ expectedList = new TimelineFilterList(
+ new TimelinePrefixFilter(TimelineCompareOp.NOT_EQUAL, "abc")
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = "(abc)";
+ expectedList = new TimelineFilterList(Operator.OR,
+ new TimelinePrefixFilter(TimelineCompareOp.EQUAL, "abc")
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = "abc";
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = " ! ( abc , def , xyz) ";
+ expectedList = new TimelineFilterList(
+ new TimelinePrefixFilter(TimelineCompareOp.NOT_EQUAL, "abc"),
+ new TimelinePrefixFilter(TimelineCompareOp.NOT_EQUAL, "def"),
+ new TimelinePrefixFilter(TimelineCompareOp.NOT_EQUAL, "xyz")
+ );
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = "!(abc,def,xyz)";
+ verifyFilterList(expr,
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr), expectedList);
+
+ expr = "!(abc,def,xyz";
+ try {
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr);
+ fail("No closing bracket. Exception should have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "!abc,def,xyz";
+ try {
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr);
+ fail("NOT(!) should be followed by opening bracket. Exception should " +
+ "have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "!abc,def,xyz";
+ try {
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr);
+ fail("NOT(!) should be followed by opening bracket. Exception should " +
+ "have been thrown");
+ } catch (TimelineParseException e){}
+
+ expr = "! r( abc,def,xyz)";
+ try {
+ TimelineReaderWebServicesUtils.parseDataToRetrieve(expr);
+ fail("NOT(!) should be followed by opening bracket. Exception should " +
+ "have been thrown");
+ } catch (TimelineParseException e){}
+
+ assertNull(TimelineReaderWebServicesUtils.parseDataToRetrieve(null));
+ assertNull(TimelineReaderWebServicesUtils.parseDataToRetrieve(" "));
+ assertNull(TimelineReaderWebServicesUtils.parseDataToRetrieve("()"));
+ assertNull(TimelineReaderWebServicesUtils.parseDataToRetrieve("!()"));
+ assertNull(TimelineReaderWebServicesUtils.parseDataToRetrieve("( )"));
+ assertNull(TimelineReaderWebServicesUtils.parseDataToRetrieve("!( )"));
+ assertNull(TimelineReaderWebServicesUtils.parseDataToRetrieve("! ( )"));
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org