1 package ch.qos.logback.access.db; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 import org.hsqldb.Server; 9 10 public class DBAppenderTestFixture { 11 12 public static final String DRIVER_CLASS = "org.hsqldb.jdbcDriver"; 13 String serverProps; 14 String url; 15 String user = "sa"; 16 String password = ""; 17 Server server; 18 boolean isNetwork = true; 19 20 21 void setUp() throws SQLException { 22 if (isNetwork) { 23 if (url == null) { 24 url = "jdbc:hsqldb:hsql://localhost/test"; 25 } 26 27 server = new Server(); 28 29 server.setDatabaseName(0, "test"); 30 server.setDatabasePath(0, "mem:test;sql.enforce_strict_size=true"); 31 server.setLogWriter(null); 32 server.setErrWriter(null); 33 server.setTrace(false); 34 server.setSilent(true); 35 server.start(); 36 } else { 37 if (url == null) { 38 url = "jdbc:hsqldb:file:test;sql.enforce_strict_size=true"; 39 } 40 } 41 42 try { 43 Class.forName(DRIVER_CLASS); 44 } catch (Exception e) { 45 e.printStackTrace(); 46 System.out.println(this + ".setUp() error: " + e.getMessage()); 47 } 48 Thread.yield(); 49 50 createTables(); 51 } 52 53 void tearDown() throws SQLException { 54 dropTables(); 55 if (isNetwork) { 56 server.stop(); 57 server = null; 58 } 59 } 60 61 Connection newConnection() throws SQLException { 62 return DriverManager.getConnection(url, user, password); 63 } 64 65 private void createTables() throws SQLException { 66 Connection conn = newConnection(); 67 StringBuffer buf = new StringBuffer(); 68 buf.append("CREATE TABLE access_event ("); 69 buf.append("timestmp BIGINT NOT NULL,"); 70 buf.append("requestURI VARCHAR(254),"); 71 buf.append("requestURL VARCHAR(254),"); 72 buf.append("remoteHost VARCHAR(254),"); 73 buf.append("remoteUser VARCHAR(254),"); 74 buf.append("remoteAddr VARCHAR(254),"); 75 buf.append("protocol VARCHAR(254),"); 76 buf.append("method VARCHAR(254),"); 77 buf.append("serverName VARCHAR(254),"); 78 buf.append("postContent VARCHAR(254),"); 79 buf.append("event_id INT NOT NULL IDENTITY);"); 80 query(conn, buf.toString()); 81 82 buf = new StringBuffer(); 83 buf.append("CREATE TABLE access_event_header ("); 84 buf.append("event_id INT NOT NULL,"); 85 buf.append("header_key VARCHAR(254) NOT NULL,"); 86 buf.append("header_value LONGVARCHAR,"); 87 buf.append("PRIMARY KEY(event_id, header_key),"); 88 buf.append("FOREIGN KEY (event_id) REFERENCES access_event(event_id));"); 89 query(conn, buf.toString()); 90 } 91 92 private void dropTables() throws SQLException { 93 Connection conn = newConnection(); 94 95 StringBuffer buf = new StringBuffer(); 96 buf.append("DROP TABLE access_event_header IF EXISTS;"); 97 query(conn, buf.toString()); 98 99 buf = new StringBuffer(); 100 buf.append("DROP TABLE access_event IF EXISTS;"); 101 query(conn, buf.toString()); 102 } 103 104 private void query(Connection conn, String expression) throws SQLException { 105 Statement st = null; 106 st = conn.createStatement(); 107 108 int i = st.executeUpdate(expression); 109 if (i == -1) { 110 System.out.println("db error : " + expression); 111 } 112 113 st.close(); 114 } 115 }