From 72231250ed81e10d66bfe70701e64fa5fe50f712 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Wed, 15 Jun 2016 23:09:44 +0200 Subject: Publish --- .../context/test/ConcurrentTraceTestCase.java | 56 ++++++++++++ .../search/query/context/test/LoggingTestCase.java | 59 ++++++++++++ .../query/context/test/PropertiesTestCase.java | 43 +++++++++ .../search/query/context/test/TraceTestCase.java | 101 +++++++++++++++++++++ 4 files changed, 259 insertions(+) create mode 100644 container-search/src/test/java/com/yahoo/search/query/context/test/ConcurrentTraceTestCase.java create mode 100644 container-search/src/test/java/com/yahoo/search/query/context/test/LoggingTestCase.java create mode 100644 container-search/src/test/java/com/yahoo/search/query/context/test/PropertiesTestCase.java create mode 100644 container-search/src/test/java/com/yahoo/search/query/context/test/TraceTestCase.java (limited to 'container-search/src/test/java/com/yahoo/search/query/context') 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 Arne Bergene Fossaa + */ +@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 chain = new Chain<>(new TraceSearcher()); + + Result result = new Result(query); + List 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 Jon Bratseth + */ +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 logValues=new HashSet<>(); + for (Iterator 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 Jon Bratseth + */ +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 Steinar Knutsen + */ +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 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); + } + +} -- cgit v1.2.3