diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-07-04 15:32:33 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-07-04 15:32:33 +0200 |
commit | 629b0329fbedf764e938c892a0a6ef29ed2a125f (patch) | |
tree | 92049c09a91ee1344583387209ddea6e206d23e1 /container-search/src/main/java/com/yahoo/search/rendering | |
parent | 1cd8287f435ae60afdbc4178bcc585836183dcb8 (diff) |
Don't use separate renderer threads in unit tests
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/rendering')
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); |