diff options
Diffstat (limited to 'container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java')
-rw-r--r-- | container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java b/container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java new file mode 100644 index 00000000000..b02c0fcccdb --- /dev/null +++ b/container-core/src/main/java/com/yahoo/processing/handler/ProcessingTestDriver.java @@ -0,0 +1,92 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.processing.handler; + +import com.google.common.annotations.Beta; +import com.yahoo.component.ComponentId; +import com.yahoo.component.chain.Chain; +import com.yahoo.component.provider.ComponentRegistry; +import com.yahoo.container.jdisc.RequestHandlerTestDriver; +import com.yahoo.container.logging.AccessLog; +import com.yahoo.container.logging.AccessLogInterface; +import com.yahoo.processing.Processor; +import com.yahoo.processing.execution.chain.ChainRegistry; +import com.yahoo.processing.rendering.Renderer; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +/** + * A helper for making processing requests and rendering their responses. + * Create an instance of this to test making processing requests and get the response or response data. + * + * @author <a href="mailto:bratseth@yahoo-inc.com">Jon Bratseth</a> + * @since 5.21 + */ +@Beta +public class ProcessingTestDriver extends RequestHandlerTestDriver { + + private final ProcessingHandler processingHandler; + + public ProcessingTestDriver(Collection<Chain<Processor>> chains) { + this(chains, new ComponentRegistry<Renderer>()); + } + public ProcessingTestDriver(String binding, Collection<Chain<Processor>> chains) { + this(chains, new ComponentRegistry<Renderer>()); + } + @SafeVarargs + public ProcessingTestDriver(Chain<Processor> ... chains) { + this(Arrays.asList(chains), new ComponentRegistry<Renderer>()); + } + @SafeVarargs + public ProcessingTestDriver(String binding, Chain<Processor> ... chains) { + this(binding, Arrays.asList(chains), new ComponentRegistry<Renderer>()); + } + public ProcessingTestDriver(Collection<Chain<Processor>> chains, ComponentRegistry<Renderer> renderers) { + this(createProcessingHandler(chains, renderers, AccessLog.voidAccessLog())); + } + public ProcessingTestDriver(String binding, Collection<Chain<Processor>> chains, ComponentRegistry<Renderer> renderers) { + this(binding, createProcessingHandler(chains, renderers, AccessLog.voidAccessLog())); + } + public ProcessingTestDriver(ProcessingHandler processingHandler) { + super(processingHandler); + this.processingHandler = processingHandler; + } + public ProcessingTestDriver(String binding, ProcessingHandler processingHandler) { + super(binding, processingHandler); + this.processingHandler = processingHandler; + } + + public ProcessingTestDriver(Chain<Processor> chain, AccessLogInterface accessLogInterface) { + this(createProcessingHandler( + Collections.singleton(chain), + new ComponentRegistry<Renderer>(), + createAccessLog(accessLogInterface))); + } + + private static AccessLog createAccessLog(AccessLogInterface accessLogInterface) { + ComponentRegistry<AccessLogInterface> componentRegistry = new ComponentRegistry<>(); + componentRegistry.register(ComponentId.createAnonymousComponentId("access-log"), accessLogInterface); + componentRegistry.freeze(); + + return new AccessLog(componentRegistry); + } + + private static ProcessingHandler createProcessingHandler( + Collection<Chain<Processor>> chains, + ComponentRegistry<Renderer> renderers, + AccessLog accessLog) { + Executor executor = Executors.newSingleThreadExecutor(); + + ChainRegistry<Processor> registry = new ChainRegistry<>(); + for (Chain<Processor> chain : chains) + registry.register(chain.getId(), chain); + return new ProcessingHandler(registry, renderers, executor, accessLog); + } + + /** Returns the processing handler of this */ + public ProcessingHandler processingHandler() { return processingHandler; } + +} |