Package com.netflix.suro.server

Source Code of com.netflix.suro.server.SuroServerExternalResource

package com.netflix.suro.server;

import com.google.inject.Injector;
import com.netflix.governator.lifecycle.LifecycleManager;
import com.netflix.suro.SuroPlugin;
import com.netflix.suro.SuroServer;
import com.netflix.suro.TestUtils;
import com.netflix.suro.input.DynamicPropertyInputConfigurator;
import com.netflix.suro.routing.DynamicPropertyRoutingMapConfigurator;
import com.netflix.suro.routing.TestMessageRouter;
import com.netflix.suro.sink.DynamicPropertySinkConfigurator;
import org.junit.rules.ExternalResource;

import java.util.Properties;
import java.util.concurrent.atomic.AtomicReference;

public class SuroServerExternalResource extends ExternalResource {
    private int statusPort;
    private int serverPort;
    private AtomicReference<Injector> injector = new AtomicReference<Injector>();

    private String sinkDesc = "{\n" +
            "    \"default\": {\n" +
            "        \"type\": \"TestSink\",\n" +
            "        \"message\": \"default\"\n" +
            "    },\n" +
            "    \"sink1\": {\n" +
            "        \"type\": \"TestSink\",\n" +
            "        \"message\": \"sink1\"\n" +
            "    }\n" +
            "}";

    private String mapDesc="{}";
    private String inputConfig = "[\n" +
            "    {\n" +
            "        \"type\": \"thrift\"\n" +
            "    }\n" +
            "]";

    public SuroServerExternalResource() {}
    public SuroServerExternalResource(String inputConfig, String sinkDesc, String mapDesc) {
        this.inputConfig = inputConfig;
        this.sinkDesc = sinkDesc;
        this.mapDesc = mapDesc;
    }

    @Override
    protected void before() throws Exception {
        statusPort = TestUtils.pickPort();
        serverPort = TestUtils.pickPort();

        Properties props = new Properties();
        props.put("SuroServer.statusServerPort", Integer.toString(statusPort));
        props.put("SuroServer.port", Integer.toString(serverPort));
        props.put(DynamicPropertySinkConfigurator.SINK_PROPERTY, sinkDesc);
        props.put(DynamicPropertyInputConfigurator.INPUT_CONFIG_PROPERTY, inputConfig);
        if (mapDesc != null) {
            props.put(DynamicPropertyRoutingMapConfigurator.ROUTING_MAP_PROPERTY, mapDesc);
        }

        SuroServer.create(injector, props, new SuroPlugin() {
            @Override
            protected void configure() {
                this.addSinkType("TestSink", TestMessageRouter.TestMessageRouterSink.class);
            }
        });
        injector.get().getInstance(LifecycleManager.class).start();
        injector.get().getInstance(StatusServer.class).waitUntilStarted();
    }

    @Override
    protected void after() {
        injector.get().getInstance(LifecycleManager.class).close();
    }

    public int getServerPort() {
        return serverPort;
    }
    public int getStatusPort() { return statusPort; }
    public Injector getInjector() { return injector.get(); }
}
TOP

Related Classes of com.netflix.suro.server.SuroServerExternalResource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.