aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/test/java/com/yahoo/search/query/context
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /container-search/src/test/java/com/yahoo/search/query/context
Publish
Diffstat (limited to 'container-search/src/test/java/com/yahoo/search/query/context')
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/context/test/ConcurrentTraceTestCase.java56
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/context/test/LoggingTestCase.java59
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/context/test/PropertiesTestCase.java43
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/context/test/TraceTestCase.java101
4 files changed, 259 insertions, 0 deletions
diff --git a/container-search/src/test/java/com/yahoo/search/query/context/test/ConcurrentTraceTestCase.java b/container-search/src/test/java/com/yahoo/search/query/context/test/ConcurrentTraceTestCase.java
new file mode 100644
index 00000000000..98ed684af17
--- /dev/null
+++ b/container-search/src/test/java/com/yahoo/search/query/context/test/ConcurrentTraceTestCase.java
@@ -0,0 +1,56 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.query.context.test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.yahoo.component.chain.Chain;
+
+import com.yahoo.search.Query;
+import com.yahoo.search.Result;
+import com.yahoo.search.Searcher;
+import com.yahoo.search.searchchain.AsyncExecution;
+import com.yahoo.search.searchchain.Execution;
+import com.yahoo.search.searchchain.FutureResult;
+
+/**
+ * Checks it's OK adding more traces to an instance which is being rendered.
+ *
+ * @author <a href="arnebef@yahoo-inc.com">Arne Bergene Fossaa</a>
+ */
+@SuppressWarnings("deprecation")
+public class ConcurrentTraceTestCase {
+ class TraceSearcher extends Searcher {
+
+ @Override
+ public Result search(Query query, Execution execution) {
+ for(int i = 0;i<1000;i++) {
+ query.trace("Trace", false, 1);
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+ }
+ return execution.search(query);
+ }
+ }
+
+ class AsyncSearcher extends Searcher {
+
+ @Override
+ public Result search(Query query, Execution execution) {
+ Chain<Searcher> chain = new Chain<>(new TraceSearcher());
+
+ Result result = new Result(query);
+ List<FutureResult> futures = new ArrayList<>();
+ for(int i = 0; i < 100; i++) {
+ futures.add(new AsyncExecution(chain, execution).searchAndFill(query));
+ }
+ AsyncExecution.waitForAll(futures, 10);
+ return result;
+ }
+
+ }
+
+}
diff --git a/container-search/src/test/java/com/yahoo/search/query/context/test/LoggingTestCase.java b/container-search/src/test/java/com/yahoo/search/query/context/test/LoggingTestCase.java
new file mode 100644
index 00000000000..bbddae0f7f0
--- /dev/null
+++ b/container-search/src/test/java/com/yahoo/search/query/context/test/LoggingTestCase.java
@@ -0,0 +1,59 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.query.context.test;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import com.yahoo.processing.execution.Execution;
+import com.yahoo.search.Query;
+import com.yahoo.search.query.context.QueryContext;
+
+/**
+ * @author <a href="mailto:bratseth@yahoo-inc.com">Jon Bratseth</a>
+ */
+public class LoggingTestCase extends junit.framework.TestCase {
+
+ public void testLogging() {
+ Query query=new Query();
+ QueryContext queryContext = query.getContext(true);
+ queryContext.logValue("a","a1");
+ queryContext.trace("first message", 2);
+ queryContext.logValue("a","a2");
+ queryContext.logValue("b","b1");
+ QueryContext h2 = query.clone().getContext(true);
+ h2.logValue("b","b2");
+ h2.trace("second message", 2);
+ h2.logValue("b","b3");
+ queryContext.logValue("b","b4");
+ QueryContext h3 = query.clone().getContext(true);
+ h3.logValue("b","b5");
+ h3.logValue("c","c1");
+ h3.trace("third message", 2);
+ h2.logValue("c","c2");
+ queryContext.trace("fourth message", 2);
+ queryContext.logValue("d","d1");
+ h2.trace("fifth message", 2);
+ h2.logValue("c","c3");
+ queryContext.logValue("c","c4");
+
+ // Assert that all of the above is in the log, in some undefined order
+ Set<String> logValues=new HashSet<>();
+ for (Iterator<Execution.Trace.LogValue> logValueIterator=queryContext.logValueIterator(); logValueIterator.hasNext(); )
+ logValues.add(logValueIterator.next().toString());
+ assertEquals(12,logValues.size());
+ assertTrue(logValues.contains("a=a1"));
+ assertTrue(logValues.contains("a=a2"));
+ assertTrue(logValues.contains("b=b1"));
+ assertTrue(logValues.contains("b=b2"));
+ assertTrue(logValues.contains("b=b3"));
+ assertTrue(logValues.contains("b=b4"));
+ assertTrue(logValues.contains("b=b5"));
+ assertTrue(logValues.contains("c=c1"));
+ assertTrue(logValues.contains("c=c2"));
+ assertTrue(logValues.contains("d=d1"));
+ assertTrue(logValues.contains("c=c3"));
+ assertTrue(logValues.contains("c=c4"));
+ }
+
+}
diff --git a/container-search/src/test/java/com/yahoo/search/query/context/test/PropertiesTestCase.java b/container-search/src/test/java/com/yahoo/search/query/context/test/PropertiesTestCase.java
new file mode 100644
index 00000000000..e9bdb6f60f5
--- /dev/null
+++ b/container-search/src/test/java/com/yahoo/search/query/context/test/PropertiesTestCase.java
@@ -0,0 +1,43 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.query.context.test;
+
+import com.yahoo.search.Query;
+import com.yahoo.search.query.context.QueryContext;
+
+/**
+ * @author <a href="mailto:bratseth@yahoo-inc.com">Jon Bratseth</a>
+ */
+public class PropertiesTestCase extends junit.framework.TestCase {
+
+ public void testProperties() {
+ Query query=new Query();
+ QueryContext h = query.getContext(true);
+ h.setProperty("a","a1");
+ h.trace("first message", 2);
+ h.setProperty("a","a2");
+ h.setProperty("b","b1");
+ query.clone();
+ QueryContext h2 = query.clone().getContext(true);
+ h2.setProperty("b","b2");
+ h2.trace("second message", 2);
+ h2.setProperty("b","b3");
+ h.setProperty("b","b4");
+ QueryContext h3 = query.clone().getContext(true);
+ h3.setProperty("b","b5");
+ h3.setProperty("c","c1");
+ h3.trace("third message", 2);
+ h2.setProperty("c","c2");
+ h.trace("fourth message", 2);
+ h.setProperty("d","d1");
+ h2.trace("fifth message", 2);
+ h2.setProperty("c","c3");
+ h.setProperty("c","c4");
+
+ assertEquals("a2",h.getProperty("a"));
+ assertEquals("b5",h.getProperty("b"));
+ assertEquals("c4",h.getProperty("c"));
+ assertEquals("d1",h.getProperty("d"));
+ assertNull(h.getProperty("e"));
+ }
+
+}
diff --git a/container-search/src/test/java/com/yahoo/search/query/context/test/TraceTestCase.java b/container-search/src/test/java/com/yahoo/search/query/context/test/TraceTestCase.java
new file mode 100644
index 00000000000..7cc3d939b01
--- /dev/null
+++ b/container-search/src/test/java/com/yahoo/search/query/context/test/TraceTestCase.java
@@ -0,0 +1,101 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.query.context.test;
+
+import com.yahoo.search.Query;
+import com.yahoo.search.query.context.QueryContext;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Iterator;
+
+/**
+ * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ */
+public class TraceTestCase extends junit.framework.TestCase {
+
+ public void testBasicTracing() {
+ Query query=new Query();
+ QueryContext h = query.getContext(true);
+ h.trace("first message", 0);
+ h.trace("second message", 0);
+ assertEquals("trace: [ [ first message second message ] ]", h.toString());
+ }
+
+ public void testCloning() throws IOException {
+ Query query=new Query();
+ QueryContext h = query.getContext(true);
+ h.trace("first message", 0);
+ QueryContext h2 = query.clone().getContext(true);
+ h2.trace("second message", 0);
+ QueryContext h3 = query.clone().getContext(true);
+ h3.trace("third message", 0);
+ h.trace("fourth message", 0);
+ h2.trace("fifth message", 0);
+ Writer w = new StringWriter();
+ Writer w2 = new StringWriter();
+ h2.render(w2);
+ String finishedBelow = w2.toString();
+ h.render(w);
+ String toplevel = w.toString();
+ // check no matter which QueryContext ends up in the final Result,
+ // all context info is rendered
+ assertEquals(toplevel, finishedBelow);
+ // basic sanity test
+ assertEquals("trace: [ [ " +
+ "first message second message third message " +
+ "fourth message fifth message ] ]",h.toString());
+ Iterator<String> i = h.getTrace().traceNode().root().descendants(String.class).iterator();
+ assertEquals("first message",i.next());
+ assertEquals("second message",i.next());
+ assertEquals("third message",i.next());
+ assertEquals("fourth message",i.next());
+ assertEquals("fifth message",i.next());
+ }
+
+ public void testEmpty() throws IOException {
+ Query query=new Query();
+ QueryContext h = query.getContext(true);
+ Writer w = new StringWriter();
+ h.render(w);
+ assertEquals("", w.toString());
+ }
+
+ public void testEmptySubSequence() {
+ Query query=new Query();
+ QueryContext h = query.getContext(true);
+ query.clone().getContext(true);
+ Writer w = new StringWriter();
+ try {
+ h.render(w);
+ } catch (IOException e) {
+ assertTrue("rendering empty subsequence crashed", false);
+ }
+ }
+
+ public void testAttachedTraces() throws IOException {
+ String needle0 = "nalle";
+ String needle1 = "tralle";
+ String needle2 = "trolle";
+ String needle3 = "bamse";
+ Query q = new Query("/?tracelevel=1");
+ q.trace(needle0, false, 1);
+ Query q2 = new Query();
+ q.attachContext(q2);
+ q2.trace(needle1, false, 1);
+ q2.trace(needle2, false, 1);
+ q.trace(needle3, false, 1);
+ Writer w = new StringWriter();
+ q.getContext(false).render(w);
+ String trace = w.toString();
+ int nalle = trace.indexOf(needle0);
+ int tralle = trace.indexOf(needle1);
+ int trolle = trace.indexOf(needle2);
+ int bamse = trace.indexOf(needle3);
+ assertTrue("Could not find first manual context to main query.", nalle > 0);
+ assertTrue("Could not find second manual context to main query.", bamse > 0);
+ assertTrue("Could not find first manual context to attached query.", tralle > 0);
+ assertTrue("Could not find second manual context to attached query.", trolle > 0);
+ }
+
+}