KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > scriptella > driver > hsqldb > ShutdownOnExitTest


1 /*
2  * Copyright 2006-2007 The Scriptella Project Team.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
26 import java.sql.DriverManager JavaDoc;
27 import java.sql.SQLException JavaDoc;
28 import java.sql.Statement JavaDoc;
29 import java.util.HashMap JavaDoc;
30 import java.util.Map JavaDoc;
31 import java.util.Properties JavaDoc;
32
33 /**
34  * Tests shutdown on exit functionality.
35  *
36  * @author Fyodor Kupolov
37  * @version 1.0
38  */

39 public class ShutdownOnExitTest extends AbstractTestCase {
40     public void test() throws SQLException JavaDoc {
41         Driver drv = new Driver();
42         Map JavaDoc<String JavaDoc, String JavaDoc> props = new HashMap JavaDoc<String JavaDoc, String JavaDoc>();
43
44         final String JavaDoc 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 JavaDoc st = nc.createStatement();
51
52         st.execute(" CREATE TABLE Test (ID INT);");
53         props.put("ifexists", "true"); //do not create new database if not exists
54
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(); //emulates shutdown hook
62
assertDatabaseShutdown(url);
63     }
64
65     private void assertDatabaseShutdown(String JavaDoc url) {
66         Properties JavaDoc props = new Properties JavaDoc();
67         props.put("ifexists", "true"); //do not create new database if not exists
68
props.put("user", "sa");
69         try {
70             final Connection con = DriverManager.getConnection(url, props);
71             JdbcUtils.closeSilent(con);
72         } catch (SQLException JavaDoc e) {
73             assertTrue("Driver.HOOK must shutdown the database " + url, e.getErrorCode() == -94);
74             return; //OK
75
} catch (Exception JavaDoc e) {
76             e.printStackTrace();
77         }
78         fail("Driver.HOOK must shutdown the database");
79     }
80
81
82     /**
83      * Tests if no failures occurs on attempt to close connection for shutdown database
84      *
85      * @throws SQLException
86      */

87     public void testAlreadyClosed() throws SQLException JavaDoc {
88         Driver drv = new Driver();
89         Map JavaDoc<String JavaDoc, String JavaDoc> props = new HashMap JavaDoc<String JavaDoc, String JavaDoc>();
90
91         final String JavaDoc 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(); //emulates shutdown hook
100
}
101
102     /**
103      * Tests if different databases are independently shutdown, i.e. closing one db
104      * does not affect other.
105      *
106      * @throws SQLException
107      */

108     public void testDifferentDbs() throws SQLException JavaDoc {
109         Driver drv = new Driver();
110         Map JavaDoc<String JavaDoc, String JavaDoc> props = new HashMap JavaDoc<String JavaDoc, String JavaDoc>();
111
112         //Create first db and obtain 2 connections
113
String JavaDoc 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         //Create second db and obtain 2 connections
120
String JavaDoc 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         //close everything
127
con1.close();
128         con2.close();
129         con11.close();
130         con22.close();
131         Driver.HOOK.run(); //emulates shutdown hook
132
//all databases should be correctly shutdown
133
assertDatabaseShutdown(url1);
134         assertDatabaseShutdown(url2);
135     }
136
137
138 }
139
140
141
Popular Tags