@Test(expected = SQLException.class) public void testConnectionClosed() throws Exception { Connection conn = createMock(Connection.class); conn.setAutoCommit(true); expect(conn.isClosed()).andReturn(true); Driver driver = createMock(Driver.class); String url = "jdbc:bar:baz"; expect(driver.acceptsURL(url)).andReturn(true); expect(driver.connect(isA(String.class), isA(Properties.class))).andReturn(conn); replay(driver, conn); DriverManager.registerDriver(driver); try { JdbcConnectionSource sds = new JdbcConnectionSource(url, databaseType); assertNotNull(sds.getReadOnlyConnection(null)); sds.getReadOnlyConnection(null); sds.close(); fail("Should not get here"); } finally { DriverManager.deregisterDriver(driver); } }
@Test public void testClose() throws Exception { Connection conn = createMock(Connection.class); conn.setAutoCommit(true); conn.close(); Driver driver = createMock(Driver.class); String url = "jdbc:bar:baz"; expect(driver.acceptsURL(url)).andReturn(true); expect(driver.connect(isA(String.class), isA(Properties.class))).andReturn(conn); replay(driver, conn); DriverManager.registerDriver(driver); try { JdbcConnectionSource sds = new JdbcConnectionSource(url, databaseType); assertNotNull(sds.getReadOnlyConnection(null)); sds.close(); verify(driver, conn); } finally { DriverManager.deregisterDriver(driver); } }
@Test(expected = SQLException.class) public void testGetConnectionNull() throws Exception { Driver driver = createMock(Driver.class); Properties props = new Properties(); String url = "jdbc:bar:baz"; expect(driver.acceptsURL(url)).andReturn(true); expect(driver.connect(eq(url), eq(props))).andReturn(null); replay(driver); DriverManager.registerDriver(driver); try { JdbcConnectionSource sds = new JdbcConnectionSource(url, databaseType); sds.getReadOnlyConnection(null); sds.close(); } finally { DriverManager.deregisterDriver(driver); } }
@Test public void testGetConnection() throws Exception { Connection conn = createMock(Connection.class); Driver driver = createMock(Driver.class); String url = "jdbc:bar:mem:baz"; expect(driver.acceptsURL(url)).andReturn(true); expect(driver.connect(isA(String.class), isA(Properties.class))).andReturn(conn); replay(driver); DriverManager.registerDriver(driver); try { JdbcConnectionSource sds = new JdbcConnectionSource(url, databaseType); assertNotNull(sds.getReadOnlyConnection(null)); sds.close(); verify(driver); } finally { DriverManager.deregisterDriver(driver); } }
@Test public void testQueryKeyHolderNoKeys() throws Exception { DatabaseConnection databaseConnection = connectionSource.getReadOnlyConnection(FOO_TABLE_NAME); try { createDao(Foo.class, true); GeneratedKeyHolder keyHolder = createMock(GeneratedKeyHolder.class); keyHolder.addKey(0L); replay(keyHolder); databaseConnection.insert("insert into foo (id) values (2)", new Object[0], new FieldType[0], keyHolder); verify(keyHolder); } finally { connectionSource.releaseConnection(databaseConnection); } }
@Test(expected = SQLException.class) public void testGetReadOnlyConnectionBeforeInitialize() throws Exception { JdbcConnectionSource sds = new JdbcConnectionSource(); sds.getReadOnlyConnection(null); sds.close(); }
@Test public void testIdColumnInteger() throws Exception { // NOTE: this doesn't seem to generate an INTEGER type, oh well DatabaseConnection databaseConnection = connectionSource.getReadOnlyConnection(FOOINT_TABLE_NAME); try { createDao(FooInt.class, true); GeneratedKeyHolder keyHolder = createMock(GeneratedKeyHolder.class); keyHolder.addKey(1L); replay(keyHolder); databaseConnection.insert("insert into fooint (stuff) values (2)", new Object[0], new FieldType[0], keyHolder); verify(keyHolder); } finally { connectionSource.releaseConnection(databaseConnection); } }
@Test public void testIdColumnInvalid() throws Exception { // NOTE: this doesn't seem to generate an INTEGER type, oh well DatabaseConnection databaseConnection = connectionSource.getReadOnlyConnection(FOOINT_TABLE_NAME); try { createDao(FooInt.class, true); GeneratedKeyHolder keyHolder = createMock(GeneratedKeyHolder.class); keyHolder.addKey(1L); replay(keyHolder); databaseConnection.insert("insert into fooint (stuff) values ('zipper')", new Object[0], new FieldType[0], keyHolder); verify(keyHolder); } finally { connectionSource.releaseConnection(databaseConnection); } }
@Test public void testIdColumnChangedFromStringToNumber() throws Exception { // NOTE: trying to get the database to return a string as a result but could not figure it out DatabaseConnection databaseConnection = connectionSource.getReadOnlyConnection(FOOINT_TABLE_NAME); try { createDao(FooString.class, true); GeneratedKeyHolder keyHolder = createMock(GeneratedKeyHolder.class); keyHolder.addKey(0L); replay(keyHolder); databaseConnection.insert("insert into fooint (id, stuff) values ('12', 'zipper')", new Object[0], new FieldType[0], keyHolder); verify(keyHolder); } finally { connectionSource.releaseConnection(databaseConnection); } }
@Test public void testSaveAndClear() throws Exception { JdbcConnectionSource sds = new JdbcConnectionSource("jdbc:h2:mem:baz"); DatabaseConnection conn1 = sds.getReadOnlyConnection(null); DatabaseConnection conn2 = sds.getReadOnlyConnection(null); assertSame(conn1, conn2); sds.saveSpecialConnection(conn1); sds.clearSpecialConnection(conn1); sds.releaseConnection(conn1); sds.close(); }
@Test(expected = SQLException.class) public void testRemotePort() throws Exception { File dbDir = new File(DB_DIRECTORY); TestUtils.deleteDirectory(dbDir); dbDir.mkdirs(); // bad port int notTheRightPort = 12345; closeConnectionSource(); // try to disable the retry feature which delays this test failure System.setProperty("h2.socketConnectRetry", "0"); String dbUrl = "jdbc:h2:tcp://localhost:" + notTheRightPort + "/" + dbDir.getPath() + "/" + DATABASE_NAME; connectionSource = new JdbcConnectionSource(dbUrl); DatabaseConnection conn = connectionSource.getReadOnlyConnection(null); try { DatabaseTypeUtils.createDatabaseType(dbUrl); } finally { connectionSource.releaseConnection(conn); } } }
@Test public void testSimpleDataSourceStringStringString() throws Exception { String username = "user"; String password = "_secret"; String url = "jdbc:h2:mem:ormlite-up;USER=" + username + ";PASSWORD=" + password; JdbcConnectionSource sds = new JdbcConnectionSource(url, username, password); assertNotNull(sds.getReadOnlyConnection(null)); sds.close(); }
@Test(expected = SQLException.class) public void testQueryForLongNoResult() throws Exception { DatabaseConnection databaseConnection = connectionSource.getReadOnlyConnection(FOO_TABLE_NAME); try { createDao(Foo.class, true); databaseConnection.queryForLong("select id from foo"); } finally { connectionSource.releaseConnection(databaseConnection); } }
@Test public void testGetConnectionUserPassSetters() throws Exception { String username = "user"; String password = "_secret"; String url = "jdbc:h2:mem:ormlite-up;USER=" + username + ";PASSWORD=" + password; JdbcConnectionSource sds = new JdbcConnectionSource(url); sds.setUsername(username); sds.setPassword(password); assertNotNull(sds.getReadOnlyConnection(null)); sds.close(); }
@Test public void testDatabasePing() throws Exception { if (connectionSource == null) { return; } if (!isDriverClassExpected()) { return; } String ping = databaseType.getPingStatement(); DatabaseConnection conn = connectionSource.getReadOnlyConnection(null); try { testPingValue(conn.queryForLong(ping)); } finally { connectionSource.releaseConnection(conn); } }
@Test public void testQueryForLong() throws Exception { DatabaseConnection databaseConnection = connectionSource.getReadOnlyConnection(FOO_TABLE_NAME); try { Dao<Foo, Object> dao = createDao(Foo.class, true); Foo foo = new Foo(); long id = 21321321L; foo.id = id; assertEquals(1, dao.create(foo)); assertEquals(id, databaseConnection.queryForLong("select id from foo")); } finally { connectionSource.releaseConnection(databaseConnection); } }
@Test public void testIsOpen() throws Exception { JdbcConnectionSource sds = new JdbcConnectionSource("jdbc:h2:mem:baz"); // no get connection yet assertFalse(sds.isOpen(null)); sds.releaseConnection(sds.getReadOnlyConnection(null)); assertTrue(sds.isOpen(null)); sds.close(); assertFalse(sds.isOpen(null)); } }
@Test(expected = SQLException.class) public void testQueryForLongTooManyResults() throws Exception { DatabaseConnection databaseConnection = connectionSource.getReadOnlyConnection(FOO_TABLE_NAME); try { Dao<Foo, Object> dao = createDao(Foo.class, true); Foo foo = new Foo(); long id = 21321321L; foo.id = id; // insert twice assertEquals(1, dao.create(foo)); assertEquals(1, dao.create(foo)); databaseConnection.queryForLong("select id from foo"); } finally { connectionSource.releaseConnection(databaseConnection); } }