package com.netflix.governator;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Module;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;
import com.google.inject.util.Types;
import com.netflix.governator.guice.serviceloader.MyServiceLoadedModule;
import com.netflix.governator.guice.serviceloader.ServiceLoaderTest.BoundServiceImpl;
import com.netflix.governator.guice.serviceloader.TestService;
import org.junit.Assert;
import org.junit.Test;
import java.util.Set;
public class ServiceLoaderModuleBuilderTest {
@Test
public void testMultibindings() {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Boolean.class).toInstance(true);
Multibinder
.newSetBinder(binder(), TestService.class)
.addBinding()
.to(BoundServiceImpl.class);
install(new ServiceLoaderModuleBuilder().loadServices(TestService.class));
}
});
Set<TestService> services = (Set<TestService>) injector.getInstance(Key.get(Types.setOf(TestService.class)));
Assert.assertEquals(2, services.size());
for (TestService service : services) {
Assert.assertTrue(service.isInjected());
System.out.println(" " + service.getClass().getName());
}
}
@Test
public void testServiceLoadedModules() {
Injector injector = Guice.createInjector(
new ServiceLoaderModuleBuilder().loadModules(Module.class));
Assert.assertEquals("loaded", injector.getInstance(Key.get(String.class, Names.named(MyServiceLoadedModule.class.getSimpleName()))));
}
}