@Test(expectedExceptions = RuntimeException.class, expectedExceptionsMessageRegExp = ".*\\Q" + SPILLER_SPILL_PATH + " must be configured when " + SPILL_ENABLED + " is set to true\\E.*") public void testValidateSpillConfiguredIfEnabled() { new ConfigurationFactory(ImmutableMap.of(SPILL_ENABLED, "true")) .build(FeaturesConfig.class); } }
protected synchronized String getConfig(String config) { String value = configurationFactory.getProperties().get(config); configurationFactory.consumeProperty(config); return value; }
ConfigurationFactory otherConfigurationFactory = new ConfigurationFactory(ImmutableMap.of()); otherConfigurationFactory.validateRegisteredConfigurationProvider();
private static FileBasedAccessControlConfig newInstance(Map<String, String> properties) { ConfigurationFactory configurationFactory = new ConfigurationFactory(properties); return configurationFactory.build(FileBasedAccessControlConfig.class); } }
@Test public void testHttpsSelector() { Injector injector = Guice.createInjector( new ConfigurationModule(new ConfigurationFactory(ImmutableMap.<String, String>of())), new TestingNodeModule(), new TestingDiscoveryModule(), binder -> discoveryBinder(binder).bindHttpSelector("apple")); InMemoryDiscoveryClient discoveryClient = injector.getInstance(InMemoryDiscoveryClient.class); discoveryClient.announce(ImmutableSet.of(serviceAnnouncement("apple").addProperty("https", "fake://server-https").build())); HttpServiceSelector selector = injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("apple"))); assertEquals(getOnlyElement(selector.selectHttpService()), URI.create("fake://server-https")); }
@Test public void testHttpServerUri() throws Exception .build(); ConfigurationFactory configFactory = new ConfigurationFactory(properties); Injector injector = Guice.createInjector(new HttpServerModule(), new TestingNodeModule(), new ConfigurationModule(configFactory), new EventModule(), binder -> binder.bind(Servlet.class).annotatedWith(TheServlet.class).to(DummyServlet.class)); NodeInfo nodeInfo = injector.getInstance(NodeInfo.class); HttpServer server = injector.getInstance(HttpServer.class); assertNotNull(server); server.start(); try { HttpServerInfo httpServerInfo = injector.getInstance(HttpServerInfo.class); assertNotNull(httpServerInfo); assertNotNull(httpServerInfo.getHttpUri()); assertEquals(httpServerInfo.getHttpUri().getScheme(), "http"); assertEquals(httpServerInfo.getHttpUri().getHost(), nodeInfo.getInternalAddress());
@Test public void testWithoutFilters() { Injector injector = Guice.createInjector( new Module() { @Override public void configure(Binder binder) { httpClientBinder(binder).bindHttpClient("foo", FooClient.class); } }, new ConfigurationModule(new ConfigurationFactory(Collections.<String, String>emptyMap()))); assertNotNull(injector.getInstance(Key.get(HttpClient.class, FooClient.class))); }
@Test public void testFullConfig() String configSpec = "config"; String publicAddress = "public"; ConfigurationFactory configFactory = new ConfigurationFactory(ImmutableMap.<String, String>builder() .put("node.environment", environment) .put("node.pool", pool) .build()); Injector injector = Guice.createInjector(new NodeModule(), new ConfigurationModule(configFactory)); NodeInfo nodeInfo = injector.getInstance(NodeInfo.class); assertNotNull(nodeInfo); assertEquals(nodeInfo.getEnvironment(), environment); assertEquals(nodeInfo.getPool(), pool); assertEquals(nodeInfo.getNodeId(), nodeId); assertEquals(nodeInfo.getLocation(), location);
@Test public void testMerging() throws Exception null); Injector injector = Guice.createInjector( new ConfigurationModule(new ConfigurationFactory(config)), new JsonModule(), new TestingNodeModule(), }); HttpServiceSelector selector = injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("apple"))); assertEquals(getOnlyElement(selector.selectHttpService()), URI.create("http://127.0.0.1:4444")); selector = injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("banana"))); assertEquals(getOnlyElement(selector.selectHttpService()), URI.create("http://127.0.0.1:4444")); selector = injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("carrot"))); assertTrue(selector.selectHttpService().isEmpty()); selector = injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("grape")));
@BeforeClass public void startServer() throws Exception { tempDir = createTempDir("agent"); Map<String, String> properties = ImmutableMap.<String, String>builder() .put("agent.id", UUID.randomUUID().toString()) .put("agent.coordinator-uri", "http://localhost:9999/") .put("agent.slots-dir", tempDir.getAbsolutePath()) .put("discovery.uri", "fake://server") .build(); Injector injector = Guice.createInjector( new TestingDiscoveryModule(), new TestingNodeModule(), new JsonModule(), new TestingHttpServerModule(), new JaxrsModule(), new EventModule(), new AgentMainModule(), new ConfigurationModule(new ConfigurationFactory(properties))); server = injector.getInstance(TestingHttpServer.class); agent = injector.getInstance(Agent.class); server.start(); client = new ApacheHttpClient(); installationHelper = new InstallationHelper(); appleInstallation = installationHelper.getAppleInstallation(); bananaInstallation = installationHelper.getBananaInstallation(); }
@Test public void testConflictingMethodNames() Injector injector = Guice.createInjector( Stage.DEVELOPMENT, new ConfigurationModule(new ConfigurationFactory(ImmutableMap.<String, String>of())), new ThriftCodecModule(), new ThriftServerModule(), injector.getInstance(ThriftServiceProcessor.class); fail("Creating the processor should have thrown exception for conflicting method names");
properties = ImmutableSortedMap.copyOf(properties); configurationFactory = new ConfigurationFactory(properties, log::warn); LoggingConfiguration configuration = configurationFactory.build(LoggingConfiguration.class); logging.configure(configuration); configurationFactory.registerConfigurationClasses(modules); List<Message> messages = configurationFactory.validateRegisteredConfigurationProvider(); unusedProperties.keySet().removeAll(configurationFactory.getUsedProperties()); moduleList.add(new ConfigurationModule(configurationFactory)); if (!messages.isEmpty()) { moduleList.add(new ValidationErrorModule(messages)); Injector injector = Guice.createInjector(Stage.PRODUCTION, moduleList.build()); LifeCycleManager lifeCycleManager = injector.getInstance(LifeCycleManager.class);
properties = ImmutableSortedMap.copyOf(properties); configurationFactory = new ConfigurationFactory(properties); LoggingConfiguration configuration = configurationFactory.build(LoggingConfiguration.class); logging.configure(configuration); unusedProperties.keySet().removeAll(configurationFactory.getUsedProperties()); moduleList.add(new ConfigurationModule(configurationFactory)); if (!messages.isEmpty()) { moduleList.add(new ValidationErrorModule(messages)); Injector injector = Guice.createInjector(Stage.PRODUCTION, moduleList.build()); LifeCycleManager lifeCycleManager = injector.getInstance(LifeCycleManager.class);
private static Injector createInjector(Map<String, String> properties, TestMonitor monitor, Module module) { ConfigurationFactory configurationFactory = new ConfigurationFactory(properties, null, monitor); configurationFactory.registerConfigurationClasses(ImmutableList.of(module)); List<Message> messages = configurationFactory.validateRegisteredConfigurationProvider(); return Guice.createInjector(new ConfigurationModule(configurationFactory), module, new ValidationErrorModule(messages)); }
private static Injector createInjector(Map<String, String> properties, Module... modules) { ConfigurationFactory configurationFactory = new ConfigurationFactory(properties); // Required to bind a configuration module and an MBean server when binding an H2EmbeddedDataSourceModule List<Module> moduleList = ImmutableList.<Module>builder() .add(modules) .add(new ConfigurationModule(configurationFactory)) .add(binder -> { binder.bind(MBeanServer.class).to(TestingMBeanServer.class).in(Scopes.SINGLETON); binder.bind(ObjectHolder.class); }) .build(); return Guice.createInjector(moduleList); }
Map<String, String> optionalConfig = new TreeMap<>(configurationFactory.getProperties()); optionalConfig.put("node.id", nodeInfo.getNodeId()); this.optionalConfig = ImmutableMap.copyOf(optionalConfig);
@Override public void configure(Binder binder) { binder.install(new ConfigurationModule(new ConfigurationFactory(configProperties))); binder.install(new TestingNodeModule()); binder.install(new TestingDiscoveryModule()); } }
protected synchronized <T> T buildConfigObject(Class<T> configClass) { configBinder(binder).bindConfig(configClass); return configurationFactory.build(configClass); }
/** * This is used by the configuration provider */ <T> T build(ConfigurationProvider<T> configurationProvider) { requireNonNull(configurationProvider, "configurationProvider"); registerConfigurationProvider(configurationProvider, Optional.empty()); // check for a prebuilt instance T instance = getCachedInstance(configurationProvider); if (instance != null) { return instance; } ConfigurationBinding<T> configurationBinding = configurationProvider.getConfigurationBinding(); ConfigurationHolder<T> holder = build(configurationBinding.getConfigClass(), configurationBinding.getPrefix(), getConfigDefaults(configurationBinding.getKey())); instance = holder.getInstance(); // inform caller about warnings if (warningsMonitor != null) { for (Message message : holder.getProblems().getWarnings()) { warningsMonitor.onWarning(message.toString()); } } // add to instance cache T existingValue = putCachedInstance(configurationProvider, instance); // if key was already associated with a value, there was a // creation race and we lost. Just use the winners' instance; if (existingValue != null) { return existingValue; } return instance; }
public void registerConfigurationClasses(Collection<? extends Module> modules) { // some modules need access to configuration factory so they can lazy register additional config classes // initialize configuration factory modules.stream() .filter(ConfigurationAwareModule.class::isInstance) .map(ConfigurationAwareModule.class::cast) .forEach(module -> module.setConfigurationFactory(this)); for (Element element : Elements.getElements(modules)) { element.acceptVisitor(new DefaultElementVisitor<Void>() { @Override public <T> Void visit(Binding<T> binding) { if (binding instanceof InstanceBinding) { InstanceBinding<T> instanceBinding = (InstanceBinding<T>) binding; // configuration listener if (instanceBinding.getInstance() instanceof ConfigurationBindingListenerHolder) { addConfigurationBindingListener(((ConfigurationBindingListenerHolder) instanceBinding.getInstance()).getConfigurationBindingListener()); } // config defaults if (instanceBinding.getInstance() instanceof ConfigDefaultsHolder) { registerConfigDefaults((ConfigDefaultsHolder<?>) instanceBinding.getInstance()); } } // configuration provider