@Test(expected = SQLException.class) public void testReleaseConnectionBeforeInitialize() throws Exception { JdbcConnectionSource sds = new JdbcConnectionSource(); sds.releaseConnection(null); sds.close(); }
@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 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 testFileSystem() throws Exception { File dbDir = new File(DB_DIRECTORY); TestUtils.deleteDirectory(dbDir); dbDir.mkdirs(); assertEquals(0, dbDir.list().length); closeConnectionSource(); String dbUrl = "jdbc:h2:" + dbDir.getPath() + "/" + DATABASE_NAME; connectionSource = new JdbcConnectionSource(dbUrl); DatabaseConnection conn = connectionSource.getReadWriteConnection(null); try { databaseType = DatabaseTypeUtils.createDatabaseType(dbUrl); assertTrue(dbDir.list().length != 0); } finally { connectionSource.releaseConnection(conn); } }
@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(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 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 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 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); } }