/** * @return WrongNumberOfQueriesError or null if there are no errors * @since 2.1 */ @Deprecated public WrongNumberOfQueriesError getWrongNumberOfQueriesError() { WrongNumberOfQueriesError wrongNumberOfQueriesError = null; Throwable throwable = getSniffyAssertionError(); while (null != throwable) { if (throwable instanceof WrongNumberOfQueriesError) { if (null != wrongNumberOfQueriesError) { wrongNumberOfQueriesError.initCause(throwable); } wrongNumberOfQueriesError = (WrongNumberOfQueriesError) throwable; } throwable = throwable.getCause(); } return wrongNumberOfQueriesError; }
@Test public void testStatementBatchIsLogged() throws Exception { try (Connection connection = DriverManager.getConnection("sniffer:jdbc:h2:mem:", "sa", "sa")) { connection.createStatement().execute("CREATE TEMPORARY TABLE TEMPORARY_TABLE (BAZ VARCHAR(255))"); try (@SuppressWarnings("unused") Spy spy = Sniffer.expectNever(); Statement statement = connection.createStatement()) { statement.addBatch("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES ('foo')"); statement.addBatch("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES (LOWER('bar'))"); statement.executeBatch(); } } catch (WrongNumberOfQueriesError e) { assertNotNull(e); assertEquals(0, e.getMinimumQueries()); assertEquals(0, e.getMaximumQueries()); assertEquals(1, e.getNumQueries()); assertEquals(1, e.getExecutedStatements().size()); assertEquals(1, e.getExecutedSqls().size()); assertEquals(Threads.CURRENT, e.getThreadMatcher()); assertTrue(e.getMessage().contains("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES ('foo')")); assertTrue(e.getMessage().contains("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES (LOWER('bar'))")); } }
@Test public void testQueryFromOtherThread() { try (@SuppressWarnings("unused") Spy spy = Sniffer.expect(1)) { executeStatement(); executeStatement(Query.INSERT); executeStatementInOtherThread(); } catch (WrongNumberOfQueriesError e) { assertNotNull(e); assertEquals(1, e.getMinimumQueries()); assertEquals(1, e.getMaximumQueries()); assertEquals(2, e.getNumQueries()); assertEquals(2, e.getExecutedStatements().size()); assertEquals(2, e.getExecutedSqls().size()); } }
@Test public void testVerifyMultipleFailures() throws Exception { try { Sniffer.expectAtLeast(1, Threads.CURRENT).expectAtLeast(1, Threads.OTHERS).verify(); } catch (WrongNumberOfQueriesError e) { assertNotNull(e); assertNotNull(e.getCause()); assertTrue(WrongNumberOfQueriesError.class.isAssignableFrom(e.getCause().getClass())); assertNull(e.getCause().getCause()); } }
@Test public void testQueryType() throws Exception { try (Connection connection = DriverManager.getConnection("sniffer:jdbc:h2:mem:", "sa", "sa")) { connection.createStatement().execute("CREATE TEMPORARY TABLE TEMPORARY_TABLE (BAZ VARCHAR(255))"); try (@SuppressWarnings("unused") Spy spy = Sniffer.expectAtMostOnce(Query.INSERT)) { connection.createStatement().execute("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES ('foo')"); connection.createStatement().execute("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES (LOWER('bar'))"); connection.createStatement().execute("UPDATE TEMPORARY_TABLE SET BAZ = UPPER(BAZ)"); } } catch (WrongNumberOfQueriesError e) { assertNotNull(e); assertEquals(0, e.getMinimumQueries()); assertEquals(1, e.getMaximumQueries()); assertEquals(2, e.getNumQueries()); assertEquals(3, e.getExecutedStatements().size()); assertEquals(3, e.getExecutedSqls().size()); assertEquals(Threads.CURRENT, e.getThreadMatcher()); assertEquals(SqlStatement.INSERT, e.getQuery()); assertTrue(e.getMessage().contains("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES ('foo')")); assertTrue(e.getMessage().contains("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES (LOWER('bar'))")); assertFalse(e.getMessage().contains("UPDATE TEMPORARY_TABLE SET BAZ = UPPER(BAZ)")); } }
assertEquals(0, e.getMinimumQueries()); assertEquals(0, e.getMaximumQueries()); assertEquals(1, e.getNumQueries()); assertEquals(1, e.getExecutedStatements().size()); assertEquals(1, e.getExecutedSqls().size()); Iterator<StatementMetaData> statementsIt = e.getExecutedStatements().iterator(); assertEquals("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES (?) /*2 times*/", statementsIt.next().sql); assertFalse(statementsIt.hasNext()); assertEquals(Threads.CURRENT, e.getThreadMatcher()); assertEquals(SqlStatement.ANY, e.getQuery()); assertTrue(e.getMessage().contains("INSERT INTO TEMPORARY_TABLE (BAZ) VALUES (?) /*2 times*/"));
/** * @return WrongNumberOfQueriesError or null if there are no errors * @since 2.1 */ @Deprecated public WrongNumberOfQueriesError getWrongNumberOfQueriesError() { WrongNumberOfQueriesError wrongNumberOfQueriesError = null; Throwable throwable = getSniffyAssertionError(); while (null != throwable) { if (throwable instanceof WrongNumberOfQueriesError) { if (null != wrongNumberOfQueriesError) { wrongNumberOfQueriesError.initCause(throwable); } wrongNumberOfQueriesError = (WrongNumberOfQueriesError) throwable; } throwable = throwable.getCause(); } return wrongNumberOfQueriesError; }