package com.netflix.schlep.eventbus;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.Version;
import org.codehaus.jackson.map.BeanProperty;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.Module;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.SerializerFactory;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.TypeSerializer;
import org.codehaus.jackson.map.module.SimpleModule;
import org.codehaus.jackson.map.ser.CustomSerializerFactory;
import org.codehaus.jackson.node.ObjectNode;
import org.codehaus.jackson.type.JavaType;
import org.junit.Test;
import com.google.inject.AbstractModule;
import com.google.inject.Binding;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.netflix.eventbus.impl.EventBusImpl;
import com.netflix.eventbus.spi.EventBus;
import com.netflix.governator.guice.LifecycleInjector;
import com.netflix.governator.lifecycle.LifecycleManager;
import com.netflix.schlep.config.PolymorphicModule;
import com.netflix.schlep.eventbus.events.SimpleEvent;
import com.netflix.schlep.eventbus.jersey.BridgeAdminResource;
import com.netflix.schlep.eventbus.jersey.BridgeEntity;
import com.netflix.schlep.guice.SchlepModule;
import com.netflix.schlep.log.LoggingSchlepModule;
import com.netflix.schlep.sim.SimSchlepModule;
import com.netflix.schlep.sqs.FakeSqsClient;
import com.netflix.schlep.sqs.SimpleSqsClientConfiguration;
import com.netflix.schlep.sqs.SqsClient;
import com.netflix.schlep.sqs.SqsClientFactory;
import com.netflix.schlep.sqs.SqsSchlepModule;
import com.netflix.util.batch.BatchingPolicy;
import com.netflix.util.retry.CountingRetryPolicy;
import com.netflix.util.retry.RetryPolicy;
public class EventBusManagerTest {
@Test
public void test1() throws Exception {
// Boostrap
Injector injector = LifecycleInjector.builder()
.withModules(
new SimSchlepModule(),
new SqsSchlepModule(),
new LoggingSchlepModule(),
new SchlepModule(),
new EventBusModule(),
new AbstractModule() {
@Override
protected void configure() {
install(new FactoryModuleBuilder()
.implement(SqsClient.class, FakeSqsClient.class)
.build(SqsClientFactory.class));
bind(EventBus.class).to(EventBusImpl.class).asEagerSingleton();
bind(BridgeAdminResource.class);
}
}
)
.createInjector();
LifecycleManager manager = injector.getInstance(LifecycleManager.class);
manager.start();
try {
// Dummy config object
SimpleSqsClientConfiguration config = new SimpleSqsClientConfiguration();
config.setRetryPolicy(new CountingRetryPolicy(5));
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
mapper.registerModule(new PolymorphicModule());
// mapper.setSerializerFactory(new CustomSerializerFactory() {
// public JsonSerializer<Object> createSerializer(SerializationConfig config, JavaType type,
// BeanProperty property) throws JsonMappingException {
// if (!type.isPrimitive()) {
// System.out.println(type.getRawClass());
//
// Class<?> clazz = type.getRawClass();
// for (Type i : clazz.getGenericInterfaces()) {
// System.out.println(" " + i);
// }
// }
// return super.createSerializer(config, type, property);
// }
// });
String str = mapper.writeValueAsString(config);
System.out.println(str);
SimpleSqsClientConfiguration config2 = mapper.readValue(str.getBytes(), SimpleSqsClientConfiguration.class);
String str2 = mapper.writeValueAsString(config2);
System.out.println(str2);
BridgeAdminResource admin = injector.getInstance(BridgeAdminResource.class);
admin.addBridge(new BridgeEntity()
.withId("foo")
.withAutoStart(true)
.withEventType(SimpleEvent.class.getCanonicalName())
.withProducerType("sqs")
.withConfiguration(null));
System.out.println(admin.listBridges());
EventBus eventBus = injector.getInstance(EventBus.class);
eventBus.publish(new SimpleEvent(0));
Thread.sleep(TimeUnit.MINUTES.toMillis(2));
}
finally {
manager.close();
}
}
}