package com.hubspot.baragon; import java.util.concurrent.atomic.AtomicLong; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.guava.GuavaModule; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.Scopes; import com.google.inject.Singleton; import com.google.inject.name.Named; import com.hubspot.baragon.config.HttpClientConfiguration; import com.hubspot.baragon.data.BaragonLoadBalancerDatastore; import com.hubspot.baragon.service.BaragonLoadBalancerTestDatastore; import com.hubspot.baragon.service.BaragonServiceModule; import com.ning.http.client.AsyncHttpClient; import com.ning.http.client.AsyncHttpClientConfig; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.retry.RetryOneTime; import org.apache.curator.test.TestingServer; import org.slf4j.LoggerFactory; public class BaragonServiceTestModule extends AbstractModule { @Override protected void configure() { bind(TestingServer.class).in(Scopes.SINGLETON); bind(BaragonLoadBalancerDatastore.class).to(BaragonLoadBalancerTestDatastore.class).in(Scopes.SINGLETON); LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); Logger rootLogger = context.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); rootLogger.setLevel(Level.ERROR); } @Singleton @Provides public CuratorFramework provideCurator(TestingServer testingServer) throws InterruptedException { final CuratorFramework client = CuratorFrameworkFactory.newClient(testingServer.getConnectString(), new RetryOneTime(1)); client.start(); return client; } @Singleton @Provides @Named(BaragonDataModule.BARAGON_SERVICE_WORKER_LAST_START) public AtomicLong providesLastStart() { return new AtomicLong(); } @Provides @Singleton @Named(BaragonServiceModule.BARAGON_SERVICE_HTTP_CLIENT) public AsyncHttpClient providesHttpClient(HttpClientConfiguration config) { AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder(); builder.setMaxRequestRetry(config.getMaxRequestRetry()); builder.setRequestTimeoutInMs(config.getRequestTimeoutInMs()); builder.setFollowRedirects(true); builder.setConnectionTimeoutInMs(config.getConnectionTimeoutInMs()); builder.setUserAgent(config.getUserAgent()); return new AsyncHttpClient(builder.build()); } @Singleton @Provides public ObjectMapper provideObjectMapper() { final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new GuavaModule()); return objectMapper; } }