From: <mro...@us...> - 2014-04-13 07:58:53
|
Revision: 59434 http://sourceforge.net/p/firebird/code/59434 Author: mrotteveel Date: 2014-04-13 07:58:50 +0000 (Sun, 13 Apr 2014) Log Message: ----------- Convert TestFBMaintenanceManager test to JUnit 4, removed unused code Modified Paths: -------------- client-java/trunk/src/test/org/firebirdsql/management/TestFBMaintenanceManager.java Modified: client-java/trunk/src/test/org/firebirdsql/management/TestFBMaintenanceManager.java =================================================================== --- client-java/trunk/src/test/org/firebirdsql/management/TestFBMaintenanceManager.java 2014-04-13 01:46:10 UTC (rev 59433) +++ client-java/trunk/src/test/org/firebirdsql/management/TestFBMaintenanceManager.java 2014-04-13 07:58:50 UTC (rev 59434) @@ -1,73 +1,54 @@ package org.firebirdsql.management; +import org.firebirdsql.common.FBJUnit4TestBase; +import org.firebirdsql.gds.*; +import org.firebirdsql.gds.impl.GDSType; +import org.firebirdsql.jdbc.FBConnection; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import java.io.ByteArrayOutputStream; import java.sql.Connection; +import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.sql.ResultSet; - -import java.io.ByteArrayOutputStream; import java.util.List; import java.util.StringTokenizer; -import org.firebirdsql.common.FBTestBase; -import org.firebirdsql.jdbc.FBConnection; - -import org.firebirdsql.gds.GDS; -import org.firebirdsql.gds.IscDbHandle; -import org.firebirdsql.gds.IscTrHandle; -import org.firebirdsql.gds.DatabaseParameterBuffer; -import org.firebirdsql.gds.TransactionParameterBuffer; -import org.firebirdsql.gds.impl.GDSType; - import static org.firebirdsql.common.FBTestProperties.*; +import static org.firebirdsql.common.JdbcResourceHelper.closeQuietly; +import static org.junit.Assert.*; -/** +/** * Test the FBMaintenanceManager class */ -public class TestFBMaintenanceManager extends FBTestBase { +public class TestFBMaintenanceManager extends FBJUnit4TestBase { -// private FBManager fbManager; + @Rule + public final ExpectedException expectedException = ExpectedException.none(); private FBMaintenanceManager maintenanceManager; - public static final String DEFAULT_TABLE = "" - + "CREATE TABLE TEST (" - + " TESTVAL INTEGER NOT NULL" - + ")"; + public static final String DEFAULT_TABLE = + "CREATE TABLE TEST (" + + " TESTVAL INTEGER NOT NULL" + + ")"; - public static final String DIALECT3_TABLE = "" - + "CREATE TABLE DIALECTTHREE (" - + " TESTVAL TIME NOT NULL" - + ")"; + public static final String DIALECT3_TABLE = + "CREATE TABLE DIALECTTHREE (" + + " TESTVAL TIME NOT NULL" + + ")"; - public TestFBMaintenanceManager(String name) throws Exception { - super(name); - Class.forName("org.firebirdsql.jdbc.FBDriver"); - } - - protected void setUp() throws Exception { - super.setUp(); - -// fbManager = createFBManager(); -// -// String gdsType = getProperty("test.gds_type", "PURE_JAVA"); -// -// if (!"EMBEDDED".equalsIgnoreCase(gdsType) && !"LOCAL".equalsIgnoreCase(gdsType)) { -// fbManager.setServer(DB_SERVER_URL); -// fbManager.setPort(DB_SERVER_PORT); -// } -// -// fbManager.start(); -// -// fbManager.setForceCreate(true); -// fbManager.createDatabase(getDatabasePath(), DB_USER, DB_PASSWORD); - + @Before + public void setUp() throws Exception { maintenanceManager = new FBMaintenanceManager(getGdsType()); if (getGdsType() == GDSType.getType("PURE_JAVA") || getGdsType() == GDSType.getType("NATIVE")) { maintenanceManager.setHost(DB_SERVER_URL); maintenanceManager.setPort(DB_SERVER_PORT); } - + maintenanceManager.setUser(DB_USER); maintenanceManager.setPassword(DB_PASSWORD); maintenanceManager.setDatabase(getDatabasePath()); @@ -88,11 +69,7 @@ } } - protected void tearDown() throws Exception { -// fbManager.stop(); - super.tearDown(); - } - + @Test public void testSetModeReadOnly() throws Exception { createTestTable(); Connection conn = getConnectionViaDriverManager(); @@ -106,26 +83,25 @@ // Try read-only mode maintenanceManager.setDatabaseAccessMode( MaintenanceManager.ACCESS_MODE_READ_ONLY); - + conn = getConnectionViaDriverManager(); stmt = conn.createStatement(); ResultSet resultSet = stmt.executeQuery("SELECT * FROM TEST"); - assertTrue("SELECT should succeed while in read-only mode", + assertTrue("SELECT should succeed while in read-only mode", resultSet.next()); - try { - stmt.executeUpdate("INSERT INTO TEST VALUES (2)"); - fail("INSERT should fail when database is in read-only mode"); - } catch (SQLException e1){ - // Ignore - } + + expectedException.expect(SQLException.class); + + stmt.executeUpdate("INSERT INTO TEST VALUES (2)"); } finally { - conn.close(); + closeQuietly(conn); } } + @Test public void testSetModeReadWrite() throws Exception { createTestTable(); - + Connection conn = null; try { maintenanceManager.setDatabaseAccessMode( @@ -139,36 +115,34 @@ // This has to fail unless the db is read-write stmt.executeUpdate("INSERT INTO TEST VALUES (3)"); - } finally { - if (conn != null){ - conn.close(); - } + closeQuietly(conn); } } + @Test public void testSetAccessModeWithBadMode() throws Exception { - try { - maintenanceManager.setDatabaseAccessMode( - MaintenanceManager.ACCESS_MODE_READ_ONLY - | MaintenanceManager.ACCESS_MODE_READ_WRITE); - fail("Access mode must be either read-only or read-write"); - } catch (IllegalArgumentException e){ - // Ignore - } + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.setDatabaseAccessMode( + MaintenanceManager.ACCESS_MODE_READ_ONLY + | MaintenanceManager.ACCESS_MODE_READ_WRITE); } - + + /** + * Dialect-3 table must fail if the dialect is 1 + */ + @Test public void testSetDialectOne() throws Exception { createTestTable(); maintenanceManager.setDatabaseDialect(1); - try { - createTestTable(DIALECT3_TABLE); - fail("Dialect-3 table must fail if the dialect is 1"); - } catch (SQLException e){ - // Ignore - } + + expectedException.expect(SQLException.class); + + createTestTable(DIALECT3_TABLE); } + @Test public void testSetDialectThree() throws Exception { maintenanceManager.setDatabaseDialect(1); maintenanceManager.setDatabaseDialect(3); @@ -177,43 +151,42 @@ createTestTable(DIALECT3_TABLE); } + /** + * Database dialect must be either 1 or 3 + */ + @Test public void testSetBadDialect() throws Exception { - try { - maintenanceManager.setDatabaseDialect(5); - fail("Database dialect must be either 1 or 3"); - } catch (IllegalArgumentException e){ - // Ignore - } + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.setDatabaseDialect(5); } + /** + * Query must fail on an offline database + */ + @Test public void testForcedShutdown() throws Exception { Connection conn = getConnectionViaDriverManager(); - String sql = "SELECT * FROM TEST"; - createTestTable(); try { + String sql = "SELECT * FROM TEST"; + createTestTable(); + Statement stmt = conn.createStatement(); stmt.executeQuery(sql); - maintenanceManager.shutdownDatabase( - MaintenanceManager.SHUTDOWN_FORCE, 0); - try { - stmt.executeQuery(sql); - fail("Query must fail on an offline database"); - } catch (SQLException e){ - // Ignore - } + maintenanceManager.shutdownDatabase(MaintenanceManager.SHUTDOWN_FORCE, 0); + + expectedException.expect(SQLException.class); + + stmt.executeQuery(sql); } finally { - try { - conn.close(); - } catch (SQLException e2){ - // Ignore this exception, which will always be thrown due - // to the database being shutdown - } catch(IllegalStateException e2) { - // Ignore this exception, which will always be thrown due - // to the database being shutdown - } + closeQuietly(conn); } } + /** + * A transaction shutdown fails with open transactions at the end of the timeout + */ + @Test public void testTransactionalShutdown() throws Exception { Connection conn = getConnectionViaDriverManager(); String sql = "UPDATE TEST SET TESTVAL = 5"; @@ -226,112 +199,113 @@ conn.close(); // Shutting down when no transactions are active should work - maintenanceManager.shutdownDatabase( - MaintenanceManager.SHUTDOWN_TRANSACTIONAL, 0); + maintenanceManager.shutdownDatabase(MaintenanceManager.SHUTDOWN_TRANSACTIONAL, 0); Thread.sleep(100); maintenanceManager.bringDatabaseOnline(); Thread.sleep(100); conn = getConnectionViaDriverManager(); conn.setAutoCommit(false); - try { - stmt = conn.createStatement(); - stmt.executeUpdate(sql); - maintenanceManager.shutdownDatabase( - MaintenanceManager.SHUTDOWN_TRANSACTIONAL, 0); - fail("A transaction shutdown fails with open transactions " - + "at the end of the timeout"); - } catch (SQLException se){ - // Ignore - } + stmt = conn.createStatement(); + stmt.executeUpdate(sql); + + expectedException.expect(SQLException.class); + + maintenanceManager.shutdownDatabase(MaintenanceManager.SHUTDOWN_TRANSACTIONAL, 0); } finally { - try { - conn.close(); - } catch(SQLException ex) { - // empty - } + closeQuietly(conn); } } - public void testShutdownWithBadMode() throws Exception { - try { - maintenanceManager.shutdownDatabase( - MaintenanceManager.SHUTDOWN_ATTACH - | MaintenanceManager.SHUTDOWN_TRANSACTIONAL - | MaintenanceManager.SHUTDOWN_FORCE, - 0); - fail("Shutdown mode must be one of: SHUTDOWN_ATTACH, " - + "SHUTDOWN_TRANSACTIONAL, SHUTDOWN_FORCE"); - } catch (IllegalArgumentException e1){ - // Ignore - } + /** + * Shutdown mode must be one of: SHUTDOWN_ATTACH, SHUTDOWN_TRANSACTIONAL, SHUTDOWN_FORCE + */ + @Test + public void testShutdownWithBadMode_1() throws Exception { + expectedException.expect(IllegalArgumentException.class); - try { - maintenanceManager.shutdownDatabase(0, 0); - fail("Shutdown mode must be one of: SHUTDOWN_ATTACH, " - + "SHUTDOWN_TRANSACTIONAL, SHUTDOWN_FORCE"); - } catch (IllegalArgumentException e2){ - // Ignore - } + maintenanceManager.shutdownDatabase( + MaintenanceManager.SHUTDOWN_ATTACH + | MaintenanceManager.SHUTDOWN_TRANSACTIONAL + | MaintenanceManager.SHUTDOWN_FORCE, + 0); } + /** + * Shutdown mode must be one of: SHUTDOWN_ATTACH, SHUTDOWN_TRANSACTIONAL, SHUTDOWN_FORCE + */ + @Test + public void testShutdownWithBadMode_2() throws Exception { + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.shutdownDatabase(0, 0); + } + + /** + * Shutdown timeout must be >= 0 + */ + @Test public void testShutdownWithBadTimeout() throws Exception { - try { - maintenanceManager.shutdownDatabase( - MaintenanceManager.SHUTDOWN_FORCE, -1); - fail("Shutdown timeout must be >= 0"); - } catch (IllegalArgumentException e){ - // Ignore - } + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.shutdownDatabase(MaintenanceManager.SHUTDOWN_FORCE, -1); } + /** + * Default cache buffer must be a positive integer + */ + @Test public void testSetDefaultCacheBufferBadCount() throws Exception { - try { - maintenanceManager.setDefaultCacheBuffer(-1); - fail("Default cache buffer must be a positive integer"); - } catch (IllegalArgumentException e){ - // Ignore - } + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.setDefaultCacheBuffer(-1); } - + @Test public void testSetDefaultCacheBuffer() throws Exception { // Unfortunately, we can really just run it and see if it fails... maintenanceManager.setDefaultCacheBuffer(2000); } + @Test public void testSetForcedWrites() throws Exception { // No test we can really do other than make sure it doesn't just fail maintenanceManager.setForcedWrites(true); maintenanceManager.setForcedWrites(false); } - public void testSetPageFillBadParam() throws Exception { - try { - maintenanceManager.setPageFill( - MaintenanceManager.PAGE_FILL_FULL + /** + * page fill must be PAGE_FILL_FULL or PAGE_FILL_RESERVE + */ + @Test + public void testSetPageFillBadParam_1() throws Exception { + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.setPageFill( + MaintenanceManager.PAGE_FILL_FULL | MaintenanceManager.PAGE_FILL_RESERVE); - fail("page fill must be PAGE_FILL_FULL or PAGE_FILL_RESERVE"); - } catch (IllegalArgumentException e1){ - // Ignore - } + } - try { - maintenanceManager.setPageFill( - Math.min(MaintenanceManager.PAGE_FILL_FULL, + /** + * page fill must be PAGE_FILL_FULL or PAGE_FILL_RESERVE + */ + @Test + public void testSetPageFillBadParam_2() throws Exception { + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.setPageFill( + Math.min(MaintenanceManager.PAGE_FILL_FULL, MaintenanceManager.PAGE_FILL_RESERVE) - 1); - fail("page fill must be PAGE_FILL_FULL or PAGE_FILL_RESERVE"); - } catch (IllegalArgumentException e2){ - // Ignore - } } + @Test public void testSetPageFill() throws Exception { // Just make sure it runs without an exception maintenanceManager.setPageFill(MaintenanceManager.PAGE_FILL_FULL); maintenanceManager.setPageFill(MaintenanceManager.PAGE_FILL_RESERVE); } + @Test public void testMarkCorruptRecords() throws Exception { // ensure that our maintenance manager has exclusive connection fbManager.stop(); @@ -343,6 +317,7 @@ } } + @Test public void testValidateDatabase() throws Exception { // ensure that our maintenance manager has exclusive connection fbManager.stop(); @@ -354,43 +329,52 @@ } } - public void testValidateDatabaseBadParam() throws Exception { - try { - maintenanceManager.validateDatabase( - (MaintenanceManager.VALIDATE_READ_ONLY + /** + * Validation must be either 0, read-only, or full + */ + @Test + public void testValidateDatabaseBadParam_1() throws Exception { + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.validateDatabase( + (MaintenanceManager.VALIDATE_READ_ONLY | MaintenanceManager.VALIDATE_FULL | MaintenanceManager.VALIDATE_IGNORE_CHECKSUM) * 2); - fail("Validation options must be either 0, read-only, or full"); - } catch (IllegalArgumentException e1){ - // Ignore - } + } - try { - maintenanceManager.validateDatabase( - MaintenanceManager.VALIDATE_READ_ONLY + /** + * Validation must be either 0, read-only, or full + */ + @Test + public void testValidateDatabaseBadParam_2() throws Exception { + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.validateDatabase( + MaintenanceManager.VALIDATE_READ_ONLY | MaintenanceManager.VALIDATE_FULL); - fail("Validation must be either 0, read-only, or full"); + } - } catch (IllegalArgumentException e2){ - // Ignore - } + /** + * Validation must be either 0, read-only, or full + */ + @Test + public void testValidateDatabaseBadParam_3() throws Exception { + expectedException.expect(IllegalArgumentException.class); - try { - maintenanceManager.validateDatabase( - MaintenanceManager.VALIDATE_FULL / 2); - fail("Validation must be either 0, read-only, or full"); - } catch (IllegalArgumentException e3){ - // Ignore - } + maintenanceManager.validateDatabase(MaintenanceManager.VALIDATE_FULL / 2); + } - try { - maintenanceManager.validateDatabase(-1); - fail("Validation must be either 0, read-only, or full"); - } catch (IllegalArgumentException e4){ - // Ignore - } + /** + * Validation must be either 0, read-only, or full + */ + @Test + public void testValidateDatabaseBadParam_4() throws Exception { + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.validateDatabase(-1); } + @Test public void testValidateDatabaseFull() throws Exception { // ensure that our maintenance manager has exclusive connection fbManager.stop(); @@ -402,79 +386,89 @@ } } + /** + * Sweep threshold must be positive + */ + @Test public void testSetSweepThresholdBadParams() throws Exception { - try { - maintenanceManager.setSweepThreshold(-1); - fail("Sweep threshold must be positive"); - } catch (IllegalArgumentException e){ - // Ignore - } + expectedException.expect(IllegalArgumentException.class); + + maintenanceManager.setSweepThreshold(-1); } + + @Test public void testSetSweepThreshold() throws Exception { // Just run it to see if it throws an exception maintenanceManager.setSweepThreshold(0); maintenanceManager.setSweepThreshold(2000); } + @Test public void testSweepDatabase() throws Exception { // Just run it to see if it throws an exception maintenanceManager.sweepDatabase(); } + @Test public void testActivateShadowFile() throws Exception { // Just run it to see if it throws an exception maintenanceManager.activateShadowFile(); } + @Test public void testKillUnavailableShadows() throws Exception { // Just run it to see if it throws an exception maintenanceManager.killUnavailableShadows(); } + @Test public void testListLimboTransactions() throws Exception { final int COUNT_LIMBO = 5; createLimboTransaction(COUNT_LIMBO); ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); maintenanceManager.setLogger(byteOut); maintenanceManager.listLimboTransactions(); - - StringTokenizer limboTransactions = new StringTokenizer(byteOut.toString(),"\n"); + + StringTokenizer limboTransactions = new StringTokenizer(byteOut.toString(), "\n"); assertEquals(COUNT_LIMBO, limboTransactions.countTokens()); } + @Test public void testGetLimboTransactions() throws Exception { final int COUNT_LIMBO = 5; createLimboTransaction(COUNT_LIMBO); int[] limboTransactions = maintenanceManager.getLimboTransactions(); assertEquals(COUNT_LIMBO, limboTransactions.length); } - + + @Test public void testRollbackLimboTransaction() throws Exception { List<Integer> limboTransactions = maintenanceManager.limboTransactionsAsList(); assertEquals(0, limboTransactions.size()); - + createLimboTransaction(3); - + limboTransactions = maintenanceManager.limboTransactionsAsList(); assertEquals(3, limboTransactions.size()); - - int trId = limboTransactions.get(0).intValue(); + + int trId = limboTransactions.get(0); maintenanceManager.rollbackTransaction(trId); - + limboTransactions = maintenanceManager.limboTransactionsAsList(); assertEquals(2, limboTransactions.size()); } + @Test public void testCommitLimboTransaction() throws Exception { List<Integer> limboTransactions = maintenanceManager.limboTransactionsAsList(); assertEquals(0, limboTransactions.size()); - + createLimboTransaction(3); - + limboTransactions = maintenanceManager.limboTransactionsAsList(); assertEquals(3, limboTransactions.size()); - - int trId = limboTransactions.get(0).intValue(); + + int trId = limboTransactions.get(0); maintenanceManager.commitTransaction(trId); limboTransactions = maintenanceManager.limboTransactionsAsList(); @@ -482,7 +476,7 @@ } private void createLimboTransaction(int count) throws Exception { - FBConnection conn = (FBConnection)getConnectionViaDriverManager(); + FBConnection conn = (FBConnection) getConnectionViaDriverManager(); try { GDS gds = conn.getInternalAPIHandler(); DatabaseParameterBuffer dpb = gds.createDatabaseParameterBuffer(); @@ -490,9 +484,8 @@ dpb.addArgument(DatabaseParameterBuffer.PASSWORD, DB_PASSWORD); IscDbHandle dbh = gds.createIscDbHandle(); gds.iscAttachDatabase(getdbpath(DB_NAME), dbh, dpb); - for (int i = 0; i < count; i++){ - TransactionParameterBuffer tpBuf = - gds.newTransactionParameterBuffer(); + for (int i = 0; i < count; i++) { + TransactionParameterBuffer tpBuf = gds.newTransactionParameterBuffer(); IscTrHandle trh = gds.createIscTrHandle(); gds.iscStartTransaction(trh, dbh, tpBuf); gds.iscPrepareTransaction(trh); @@ -502,5 +495,4 @@ conn.close(); } } - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |