aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/rendering
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-07-04 15:32:33 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-07-04 15:32:33 +0200
commit629b0329fbedf764e938c892a0a6ef29ed2a125f (patch)
tree92049c09a91ee1344583387209ddea6e206d23e1 /container-search/src/main/java/com/yahoo/search/rendering
parent1cd8287f435ae60afdbc4178bcc585836183dcb8 (diff)
Don't use separate renderer threads in unit tests
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/rendering')
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java14
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java10
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java22
3 files changed, 44 insertions, 2 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
index de817d95393..3cf5d2cb3e5 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
@@ -1,6 +1,7 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.rendering;
+import com.fasterxml.jackson.core.JsonFactory;
import com.yahoo.concurrent.CopyOnWriteHashMap;
import com.yahoo.io.ByteWriter;
import com.yahoo.net.URI;
@@ -29,6 +30,7 @@ import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.util.Iterator;
import java.util.Map;
+import java.util.concurrent.Executor;
// TODO: Rename to XmlRenderer and make this a deprecated empty subclass.
@@ -73,6 +75,18 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
private XMLWriter writer;
+ public DefaultRenderer() {
+ this(null);
+ }
+
+ /**
+ * Creates a json renderer using a custom executor.
+ * Using a custom executor is useful for tests to avoid creating new threads for each renderer registry.
+ */
+ public DefaultRenderer(Executor executor) {
+ super(executor);
+ }
+
@Override
public void init() {
super.init();
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
index 94fe5dd446d..3111074b1fc 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
@@ -13,6 +13,7 @@ import java.util.Collections;
import java.util.Deque;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.Executor;
import java.util.function.LongSupplier;
import org.json.JSONArray;
@@ -269,6 +270,15 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
}
public JsonRenderer() {
+ this(null);
+ }
+
+ /**
+ * Creates a json renderer using a custom executor.
+ * Using a custom executor is useful for tests to avoid creating new threads for each renderer registry.
+ */
+ public JsonRenderer(Executor executor) {
+ super(executor);
generatorFactory = new JsonFactory();
generatorFactory.setCodec(createJsonCodec());
}
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java b/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
index b60c58fd90f..c1b15ecbbc2 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
@@ -13,6 +13,7 @@ import com.yahoo.search.Result;
import java.util.Collection;
import java.util.Collections;
+import java.util.concurrent.Executor;
/**
* Holds all configured and built-in renderers.
@@ -31,15 +32,32 @@ public final class RendererRegistry extends ComponentRegistry<com.yahoo.processi
this(Collections.emptyList());
}
+ /**
+ * Creates a registry containing the built-in renderers only, using a custom executor.
+ * Using a custom executor is useful for tests to avoid creating new threads for each renderer registry:
+ * Use MoreExecutors.directExecutor().
+ */
+ public RendererRegistry(Executor executor) {
+ this(Collections.emptyList(), executor);
+ }
+
/** Creates a registry of the given renderers plus the built-in ones */
public RendererRegistry(Collection<Renderer> renderers) {
+ this(renderers, null);
+ }
+
+ /**
+ * Creates a registry of the given renderers plus the built-in ones, using a custom executor.
+ * Using a custom executor is useful for tests to avoid creating new threads for each renderer registry.
+ */
+ public RendererRegistry(Collection<Renderer> renderers, Executor executor) {
// add json renderer
- Renderer jsonRenderer = new JsonRenderer();
+ Renderer jsonRenderer = new JsonRenderer(executor);
jsonRenderer.initId(RendererRegistry.jsonRendererId);
register(jsonRenderer.getId(), jsonRenderer);
// Add xml renderer
- Renderer xmlRenderer = new DefaultRenderer();
+ Renderer xmlRenderer = new DefaultRenderer(executor);
xmlRenderer.initId(xmlRendererId);
register(xmlRenderer.getId(), xmlRenderer);