@Test(expectedExceptions = NullPointerException.class) public void testNullAnnotationInConstructionThrows() { H2EmbeddedDataSourceModule notActuallyConstructed = new H2EmbeddedDataSourceModule("test", null); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testEmptyPrefixStringInConstructionThrows() { H2EmbeddedDataSourceModule notActuallyConstructed = new H2EmbeddedDataSourceModule("", MainBinding.class); }
@Test(expectedExceptions = NullPointerException.class) public void testNullPrefixInConstructionThrows() { H2EmbeddedDataSourceModule notActuallyConstructed = new H2EmbeddedDataSourceModule(null, MainBinding.class); }
@Test(expectedExceptions = NullPointerException.class) public void testNullAnnotationInConstructionThrows() { H2EmbeddedDataSourceModule notActuallyConstructed = new H2EmbeddedDataSourceModule("test", null); }
@Test(expectedExceptions = NullPointerException.class) public void testNullPrefixInConstructionThrows() { H2EmbeddedDataSourceModule notActuallyConstructed = new H2EmbeddedDataSourceModule(null, MainBinding.class); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testEmptyPrefixStringInConstructionThrows() { H2EmbeddedDataSourceModule notActuallyConstructed = new H2EmbeddedDataSourceModule("", MainBinding.class); }
@Test(groups = "requiresTempFile", expectedExceptions = CreationException.class) public void testIncorrectConfigurationPrefixThrows() { final String configurationPrefix = "configuration"; final String constructionPrefix = "differentFromConfiguration"; Map<String, String> properties = createDefaultConfigurationProperties(configurationPrefix, temporaryFile.getAbsolutePath()); // Will throw because construction will fail due to the incorrect prefixing. createInjector(properties, new H2EmbeddedDataSourceModule(constructionPrefix, MainBinding.class)); }
@Test(groups = "requiresTempFile", expectedExceptions = CreationException.class) public void testIncorrectConfigurationPrefixThrows() { final String configurationPrefix = "configuration"; final String constructionPrefix = "differentFromConfiguration"; Map<String, String> properties = createDefaultConfigurationProperties(configurationPrefix, temporaryFile.getAbsolutePath()); // Will throw because construction will fail due to the incorrect prefixing. createInjector(properties, new H2EmbeddedDataSourceModule(constructionPrefix, MainBinding.class)); }
@Test(groups = "requiresTempFile") public void testObjectBindingFromInjector() { final String prefix = "test"; Map<String, String> properties = createDefaultConfigurationProperties(prefix, temporaryFile.getAbsolutePath()); Injector injector = createInjector(properties, new H2EmbeddedDataSourceModule(prefix, MainBinding.class)); ObjectHolder objectHolder = injector.getInstance(ObjectHolder.class); assertInstanceOf(objectHolder.dataSource, H2EmbeddedDataSource.class); }
@Test(groups = "requiresTempFile") public void testObjectBindingFromInjector() { final String prefix = "test"; Map<String, String> properties = createDefaultConfigurationProperties(prefix, temporaryFile.getAbsolutePath()); Injector injector = createInjector(properties, new H2EmbeddedDataSourceModule(prefix, MainBinding.class)); ObjectHolder objectHolder = injector.getInstance(ObjectHolder.class); assertInstanceOf(objectHolder.dataSource, H2EmbeddedDataSource.class); }
@Test(groups = "requiresTempFile") public void testBoundObjectIsASingleton() { final String prefix = "test"; Map<String, String> properties = createDefaultConfigurationProperties(prefix, temporaryFile.getAbsolutePath()); Injector injector = createInjector(properties, new H2EmbeddedDataSourceModule(prefix, MainBinding.class)); ObjectHolder objectHolder1 = injector.getInstance(ObjectHolder.class); ObjectHolder objectHolder2 = injector.getInstance(ObjectHolder.class); // Holding objects should be different assertNotSame(objectHolder1, objectHolder2, "Expected holding objects to be different"); // But held data source objects should be the same assertSame(objectHolder1.dataSource, objectHolder2.dataSource); }
@Test(groups = "requiresTempFile") public void testBoundObjectIsASingleton() { final String prefix = "test"; Map<String, String> properties = createDefaultConfigurationProperties(prefix, temporaryFile.getAbsolutePath()); Injector injector = createInjector(properties, new H2EmbeddedDataSourceModule(prefix, MainBinding.class)); ObjectHolder objectHolder1 = injector.getInstance(ObjectHolder.class); ObjectHolder objectHolder2 = injector.getInstance(ObjectHolder.class); // Holding objects should be different assertNotSame(objectHolder1, objectHolder2, "Expected holding objects to be different"); // But held data source objects should be the same assertSame(objectHolder1.dataSource, objectHolder2.dataSource); }
@Test(groups = "requiresTempFile") public void testCorrectConfigurationPrefix() { final String expectedPrefix = "expected"; final String otherPrefix = "additional"; final String propertySuffixToTest = ".db.connections.max"; final int expectedValue = 1234; // Required properties for construction Map<String, String> properties = createDefaultConfigurationProperties(expectedPrefix, temporaryFile.getAbsolutePath()); // Optional property added with two different prefixes, two different values properties.put(otherPrefix + propertySuffixToTest, Integer.toString(expectedValue + 5678)); properties.put(expectedPrefix + propertySuffixToTest, Integer.toString(expectedValue)); Injector injector = createInjector(properties, new H2EmbeddedDataSourceModule(expectedPrefix, MainBinding.class)); ObjectHolder objectHolder = injector.getInstance(ObjectHolder.class); // Make sure we picked up the value with the expected prefix assertInstanceOf(objectHolder.dataSource, H2EmbeddedDataSource.class); H2EmbeddedDataSource created = (H2EmbeddedDataSource) objectHolder.dataSource; assertEquals(created.getMaxConnections(), expectedValue, "Property value not loaded from correct prefix"); }
@Test(groups = "requiresTempFile") public void testCorrectConfigurationPrefix() { final String expectedPrefix = "expected"; final String otherPrefix = "additional"; final String propertySuffixToTest = ".db.connections.max"; final int expectedValue = 1234; // Required properties for construction Map<String, String> properties = createDefaultConfigurationProperties(expectedPrefix, temporaryFile.getAbsolutePath()); // Optional property added with two different prefixes, two different values properties.put(otherPrefix + propertySuffixToTest, Integer.toString(expectedValue + 5678)); properties.put(expectedPrefix + propertySuffixToTest, Integer.toString(expectedValue)); Injector injector = createInjector(properties, new H2EmbeddedDataSourceModule(expectedPrefix, MainBinding.class)); ObjectHolder objectHolder = injector.getInstance(ObjectHolder.class); // Make sure we picked up the value with the expected prefix assertInstanceOf(objectHolder.dataSource, H2EmbeddedDataSource.class); H2EmbeddedDataSource created = (H2EmbeddedDataSource) objectHolder.dataSource; assertEquals(created.getMaxConnections(), expectedValue, "Property value not loaded from correct prefix"); }
@Test(groups = "requiresTempFile") public void testAliasedBindingBindsCorrectly() { final String prefix = "test"; Map<String, String> properties = createDefaultConfigurationProperties(prefix, temporaryFile.getAbsolutePath()); Injector injector = createInjector(properties, new H2EmbeddedDataSourceModule(prefix, MainBinding.class, AliasBinding.class), binder -> binder.bind(TwoObjectsHolder.class)); ObjectHolder objectHolder = injector.getInstance(ObjectHolder.class); TwoObjectsHolder twoObjectsHolder = injector.getInstance(TwoObjectsHolder.class); // Held data source objects should all be of the correct type assertInstanceOf(twoObjectsHolder.mainDataSource, H2EmbeddedDataSource.class); assertInstanceOf(twoObjectsHolder.aliasedDataSource, H2EmbeddedDataSource.class); // And should all be references to the same object assertSame(objectHolder.dataSource, twoObjectsHolder.mainDataSource); assertSame(objectHolder.dataSource, twoObjectsHolder.aliasedDataSource); }
@Test(groups = "requiresTempFile") public void testAliasedBindingBindsCorrectly() { final String prefix = "test"; Map<String, String> properties = createDefaultConfigurationProperties(prefix, temporaryFile.getAbsolutePath()); Injector injector = createInjector(properties, new H2EmbeddedDataSourceModule(prefix, MainBinding.class, AliasBinding.class), binder -> binder.bind(TwoObjectsHolder.class)); ObjectHolder objectHolder = injector.getInstance(ObjectHolder.class); TwoObjectsHolder twoObjectsHolder = injector.getInstance(TwoObjectsHolder.class); // Held data source objects should all be of the correct type assertInstanceOf(twoObjectsHolder.mainDataSource, H2EmbeddedDataSource.class); assertInstanceOf(twoObjectsHolder.aliasedDataSource, H2EmbeddedDataSource.class); // And should all be references to the same object assertSame(objectHolder.dataSource, twoObjectsHolder.mainDataSource); assertSame(objectHolder.dataSource, twoObjectsHolder.aliasedDataSource); }
@Override protected void setup(Binder ignored) { install(installModuleIf( DatabaseConfig.class, config -> "mysql".equals(config.getDatabaseType()), binder -> { binder.install(new MySqlDataSourceModule()); bindDaoSupplier(binder, ShardDao.class, MySqlShardDao.class); })); install(installModuleIf( DatabaseConfig.class, config -> "h2".equals(config.getDatabaseType()), binder -> { binder.install(new H2EmbeddedDataSourceModule("metadata", ForMetadata.class)); bindDaoSupplier(binder, ShardDao.class, H2ShardDao.class); })); }
@Override protected void setup(Binder ignored) { install(installModuleIf( DatabaseConfig.class, config -> "mysql".equals(config.getDatabaseType()), binder -> { binder.install(new MySqlDataSourceModule()); bindDaoSupplier(binder, ShardDao.class, MySqlShardDao.class); })); install(installModuleIf( DatabaseConfig.class, config -> "h2".equals(config.getDatabaseType()), binder -> { binder.install(new H2EmbeddedDataSourceModule("metadata", ForMetadata.class)); bindDaoSupplier(binder, ShardDao.class, H2ShardDao.class); })); }