1 16 package scriptella.driver.hsqldb; 17 18 import scriptella.AbstractTestCase; 19 import scriptella.configuration.MockConnectionEl; 20 import scriptella.jdbc.JdbcConnection; 21 import scriptella.jdbc.JdbcUtils; 22 import scriptella.spi.ConnectionParameters; 23 import scriptella.spi.MockDriverContext; 24 25 import java.sql.Connection ; 26 import java.sql.DriverManager ; 27 import java.sql.SQLException ; 28 import java.sql.Statement ; 29 import java.util.HashMap ; 30 import java.util.Map ; 31 import java.util.Properties ; 32 33 39 public class ShutdownOnExitTest extends AbstractTestCase { 40 public void test() throws SQLException { 41 Driver drv = new Driver(); 42 Map <String , String > props = new HashMap <String , String >(); 43 44 final String url = "jdbc:hsqldb:mem:shutdowntest"; 45 MockConnectionEl conf = new MockConnectionEl(props, url); 46 conf.setUser("sa"); 47 ConnectionParameters params = new ConnectionParameters(conf, MockDriverContext.INSTANCE); 48 JdbcConnection con = drv.connect(params); 49 Connection nc = con.getNativeConnection(); 50 Statement st = nc.createStatement(); 51 52 st.execute(" CREATE TABLE Test (ID INT);"); 53 props.put("ifexists", "true"); MockConnectionEl conf2 = new MockConnectionEl(props, url); 55 conf.setUser("sa"); 56 ConnectionParameters params2 = new ConnectionParameters(conf2, MockDriverContext.INSTANCE); 57 58 JdbcConnection con2 = drv.connect(params2); 59 con2.close(); 60 con.close(); 61 Driver.HOOK.run(); assertDatabaseShutdown(url); 63 } 64 65 private void assertDatabaseShutdown(String url) { 66 Properties props = new Properties (); 67 props.put("ifexists", "true"); props.put("user", "sa"); 69 try { 70 final Connection con = DriverManager.getConnection(url, props); 71 JdbcUtils.closeSilent(con); 72 } catch (SQLException e) { 73 assertTrue("Driver.HOOK must shutdown the database " + url, e.getErrorCode() == -94); 74 return; } catch (Exception e) { 76 e.printStackTrace(); 77 } 78 fail("Driver.HOOK must shutdown the database"); 79 } 80 81 82 87 public void testAlreadyClosed() throws SQLException { 88 Driver drv = new Driver(); 89 Map <String , String > props = new HashMap <String , String >(); 90 91 final String url = "jdbc:hsqldb:mem:alreadyClosed"; 92 MockConnectionEl conf = new MockConnectionEl(props, url); 93 conf.setUser("sa"); 94 ConnectionParameters params = new ConnectionParameters(conf, MockDriverContext.INSTANCE); 95 JdbcConnection con = drv.connect(params); 96 Connection nc = con.getNativeConnection(); 97 nc.createStatement().execute("SHUTDOWN;"); 98 con.close(); 99 Driver.HOOK.run(); } 101 102 108 public void testDifferentDbs() throws SQLException { 109 Driver drv = new Driver(); 110 Map <String , String > props = new HashMap <String , String >(); 111 112 String url1 = "jdbc:hsqldb:mem:DifferentDbs1"; 114 MockConnectionEl conf = new MockConnectionEl(props, url1); 115 conf.setUser("sa"); 116 ConnectionParameters params = new ConnectionParameters(conf, MockDriverContext.INSTANCE); 117 JdbcConnection con1 = drv.connect(params); 118 JdbcConnection con11 = drv.connect(params); 119 String url2 = "jdbc:hsqldb:mem:DifferentDbs2"; 121 conf = new MockConnectionEl(props, url2); 122 conf.setUser("sa"); 123 params = new ConnectionParameters(conf, MockDriverContext.INSTANCE); 124 JdbcConnection con2 = drv.connect(params); 125 JdbcConnection con22 = drv.connect(params); 126 con1.close(); 128 con2.close(); 129 con11.close(); 130 con22.close(); 131 Driver.HOOK.run(); assertDatabaseShutdown(url1); 134 assertDatabaseShutdown(url2); 135 } 136 137 138 } 139 140 141 | Popular Tags |