blob: e4848d9128d28c7417ec56c092652f0c6f8f808d [file] [log] [blame]
Nils Diewald14b3aa42015-02-26 22:26:20 +00001package de.ids_mannheim.korap.server;
Nils Diewald6aa929e2014-09-17 13:30:34 +00002
Nils Diewald50e90e92015-02-26 21:25:25 +00003import de.ids_mannheim.korap.response.MatchCollector;
4import de.ids_mannheim.korap.response.collector.MatchCollectorDB;
Nils Diewald6aa929e2014-09-17 13:30:34 +00005
6import java.sql.Connection;
7import java.sql.DriverManager;
8import java.sql.PreparedStatement;
9import java.sql.ResultSet;
10import java.sql.Statement;
11import java.sql.SQLException;
12
Nils Diewaldad3f3032014-09-24 01:42:47 +000013import com.mchange.v2.c3p0.*;
Nils Diewald6aa929e2014-09-17 13:30:34 +000014
15import org.junit.After;
16import org.junit.Before;
17import org.junit.Test;
Nils Diewaldf04e1002014-09-24 22:52:59 +000018import org.junit.Ignore;
Nils Diewald8d8641b2014-09-28 17:37:53 +000019import static org.junit.Assert.*;
Nils Diewald6aa929e2014-09-17 13:30:34 +000020
Nils Diewaldd723d812014-09-23 18:50:52 +000021public class TestDatabase {
Nils Diewald6aa929e2014-09-17 13:30:34 +000022
23 private Connection conn;
24 private Statement stat;
25
Nils Diewaldbb33da22015-03-04 16:24:25 +000026
Nils Diewald6aa929e2014-09-17 13:30:34 +000027 @Before
Nils Diewaldbb33da22015-03-04 16:24:25 +000028 public void setUp () throws Exception {
Nils Diewald14b3aa42015-02-26 22:26:20 +000029 Class.forName("org.sqlite.JDBC");
30 conn = DriverManager.getConnection("jdbc:sqlite::memory:");
31 this.stat = conn.createStatement();
Eliza Margaretha6f989202016-10-14 21:48:29 +020032 stat.executeUpdate(
33 "CREATE TABLE IF NOT EXISTS people (name TEXT, age INTEGER);");
Nils Diewald14b3aa42015-02-26 22:26:20 +000034 conn.setAutoCommit(false);
Nils Diewald6aa929e2014-09-17 13:30:34 +000035 };
36
Nils Diewaldbb33da22015-03-04 16:24:25 +000037
Nils Diewald6aa929e2014-09-17 13:30:34 +000038 @Test
39 public void TestDatabase () throws Exception {
Nils Diewaldbb33da22015-03-04 16:24:25 +000040 PreparedStatement prep = this.conn
41 .prepareStatement("INSERT INTO people VALUES (?, ?);");
Nils Diewald6aa929e2014-09-17 13:30:34 +000042
Nils Diewaldbb33da22015-03-04 16:24:25 +000043 prep.setString(1, "Peter");
44 prep.setString(2, "24");
45 prep.addBatch();
Nils Diewald6aa929e2014-09-17 13:30:34 +000046
Nils Diewaldbb33da22015-03-04 16:24:25 +000047 prep.setString(1, "Klaus");
48 prep.setString(2, "31");
49 prep.addBatch();
Nils Diewald6aa929e2014-09-17 13:30:34 +000050
Nils Diewaldbb33da22015-03-04 16:24:25 +000051 prep.executeBatch();
52 conn.setAutoCommit(true);
Nils Diewald6aa929e2014-09-17 13:30:34 +000053
Nils Diewaldbb33da22015-03-04 16:24:25 +000054 ResultSet rs = stat.executeQuery("SELECT * FROM people;");
Nils Diewald6aa929e2014-09-17 13:30:34 +000055
Nils Diewaldbb33da22015-03-04 16:24:25 +000056 rs.next();
Nils Diewald6aa929e2014-09-17 13:30:34 +000057
Nils Diewaldbb33da22015-03-04 16:24:25 +000058 assertEquals(rs.getString("name"), "Peter");
59 assertEquals(rs.getInt("age"), 24);
Nils Diewald6aa929e2014-09-17 13:30:34 +000060
Nils Diewaldbb33da22015-03-04 16:24:25 +000061 rs.next();
Nils Diewald6aa929e2014-09-17 13:30:34 +000062
Nils Diewaldbb33da22015-03-04 16:24:25 +000063 assertEquals(rs.getString("name"), "Klaus");
64 assertEquals(rs.getInt("age"), 31);
65
66 rs.close();
Nils Diewald6aa929e2014-09-17 13:30:34 +000067 };
68
Nils Diewaldbb33da22015-03-04 16:24:25 +000069
Nils Diewaldf04e1002014-09-24 22:52:59 +000070 /*
71 * The following tests don't work well with in-memory dbs and
72 * temporary dbs - should be improved
73 */
74
Nils Diewald8d8641b2014-09-28 17:37:53 +000075 @Test
Nils Diewaldad3f3032014-09-24 01:42:47 +000076 public void TestDatabasePool () throws Exception {
Nils Diewaldbb33da22015-03-04 16:24:25 +000077 ComboPooledDataSource cpds = new ComboPooledDataSource();
78 // Connect to a temporary file instead of a in-memory file
79 cpds.setDriverClass("org.sqlite.JDBC");
80 cpds.setJdbcUrl("jdbc:sqlite:");
81 cpds.setMaxStatements(100);
Nils Diewaldad3f3032014-09-24 01:42:47 +000082
Nils Diewaldbb33da22015-03-04 16:24:25 +000083 // This is part of the match collector
84 this.conn = cpds.getConnection();
85 conn.setAutoCommit(false);
86 this.stat = conn.createStatement();
Eliza Margaretha6f989202016-10-14 21:48:29 +020087 stat.executeUpdate(
88 "CREATE TABLE IF NOT EXISTS result_a (text_id INTEGER, match_count INTEGER);");
Nils Diewaldbb33da22015-03-04 16:24:25 +000089 // conn.setAutoCommit(false);
90 PreparedStatement prep = this.conn
91 .prepareStatement("INSERT INTO result_a VALUES (?, ?);");
92 prep.setInt(1, 5);
93 prep.setInt(2, 8000);
94 prep.addBatch();
95 prep.executeBatch();
Nils Diewaldad3f3032014-09-24 01:42:47 +000096
Nils Diewaldbb33da22015-03-04 16:24:25 +000097 ResultSet rs = stat.executeQuery("SELECT * FROM result_a;");
98 rs.next();
99 assertEquals(rs.getInt("text_id"), 5);
100 assertEquals(rs.getInt("match_count"), 8000);
101 rs.close();
Nils Diewaldad3f3032014-09-24 01:42:47 +0000102
Nils Diewaldbb33da22015-03-04 16:24:25 +0000103 MatchCollectorDB mc = new MatchCollectorDB(2000, "result_a");
104 mc.setDBPool("sqlite", cpds, this.conn);
Nils Diewaldad3f3032014-09-24 01:42:47 +0000105
Nils Diewaldbb33da22015-03-04 16:24:25 +0000106 mc.add(9, 5000);
107 mc.add(12, 6785);
108 mc.add(39, 56576);
Nils Diewaldad3f3032014-09-24 01:42:47 +0000109
Nils Diewaldbb33da22015-03-04 16:24:25 +0000110 mc.close(false);
Nils Diewaldad3f3032014-09-24 01:42:47 +0000111
Nils Diewaldbb33da22015-03-04 16:24:25 +0000112 rs = stat.executeQuery("SELECT * FROM result_a;");
113 assertTrue(rs.next());
114 assertEquals(rs.getInt("text_id"), 5);
115 assertEquals(rs.getInt("match_count"), 8000);
116 rs.next();
117 assertEquals(rs.getInt("text_id"), 9);
118 assertEquals(rs.getInt("match_count"), 5000);
119 rs.next();
120 assertEquals(rs.getInt("text_id"), 12);
121 assertEquals(rs.getInt("match_count"), 6785);
122 rs.next();
123 assertEquals(rs.getInt("text_id"), 39);
124 assertEquals(rs.getInt("match_count"), 56576);
125
126 rs.close();
Nils Diewaldad3f3032014-09-24 01:42:47 +0000127 };
128
Nils Diewaldbb33da22015-03-04 16:24:25 +0000129
Nils Diewald8d8641b2014-09-28 17:37:53 +0000130 @Test
131 public void TestDatabasePoolCollector () throws Exception {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000132 ComboPooledDataSource cpds = new ComboPooledDataSource();
133 // Connect to a temporary file instead of a in-memory file
134 cpds.setDriverClass("org.sqlite.JDBC");
135 cpds.setJdbcUrl("jdbc:sqlite:");
136 cpds.setMaxStatements(100);
Nils Diewaldf04e1002014-09-24 22:52:59 +0000137
Nils Diewaldbb33da22015-03-04 16:24:25 +0000138 // This is part of the match collector
139 conn = cpds.getConnection();
140 conn.setAutoCommit(false);
141 Statement stat = conn.createStatement();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200142 stat.executeUpdate(
143 "CREATE TABLE IF NOT EXISTS matchXYZ (text_id INTEGER, match_count INTEGER);");
Nils Diewaldbb33da22015-03-04 16:24:25 +0000144 conn.commit();
145 stat.close();
Nils Diewaldf04e1002014-09-24 22:52:59 +0000146
Nils Diewaldbb33da22015-03-04 16:24:25 +0000147 MatchCollectorDB mc = new MatchCollectorDB(3, "matchXYZ");
148 mc.setDBPool("sqlite", cpds, conn);
Nils Diewaldf04e1002014-09-24 22:52:59 +0000149
Nils Diewaldbb33da22015-03-04 16:24:25 +0000150 mc.add(9, 5000);
151 mc.add(12, 6785);
152 mc.add(39, 56576);
153 // First commit
Nils Diewaldf04e1002014-09-24 22:52:59 +0000154
Nils Diewaldbb33da22015-03-04 16:24:25 +0000155 mc.add(45, 5000);
156 mc.add(67, 6785);
157 mc.add(81, 56576);
158 // Second commit
Nils Diewaldf04e1002014-09-24 22:52:59 +0000159
Nils Diewaldbb33da22015-03-04 16:24:25 +0000160 mc.add(94, 456);
161 mc.close(false);
162 // Final commit
Nils Diewaldf04e1002014-09-24 22:52:59 +0000163
Nils Diewaldbb33da22015-03-04 16:24:25 +0000164 // conn = cpds.getConnection();
165 stat = conn.createStatement();
166 ResultSet rs = stat
167 .executeQuery("SELECT count('*') AS num FROM matchXYZ;");
Nils Diewald8d8641b2014-09-28 17:37:53 +0000168
Nils Diewaldbb33da22015-03-04 16:24:25 +0000169 assertEquals(7, rs.getInt("num"));
Nils Diewald8d8641b2014-09-28 17:37:53 +0000170
Nils Diewaldbb33da22015-03-04 16:24:25 +0000171 rs = stat.executeQuery("SELECT text_id, match_count FROM matchXYZ;");
172 assertTrue(rs.next());
Nils Diewald8d8641b2014-09-28 17:37:53 +0000173
Nils Diewaldbb33da22015-03-04 16:24:25 +0000174 assertEquals(rs.getInt("text_id"), 9);
175 assertEquals(rs.getInt("match_count"), 5000);
176 assertTrue(rs.next());
177 assertEquals(rs.getInt("text_id"), 12);
178 assertEquals(rs.getInt("match_count"), 6785);
179 assertTrue(rs.next());
180 assertEquals(rs.getInt("text_id"), 39);
181 assertEquals(rs.getInt("match_count"), 56576);
182 assertTrue(rs.next());
183 assertEquals(rs.getInt("text_id"), 45);
184 assertEquals(rs.getInt("match_count"), 5000);
185 assertTrue(rs.next());
186 assertEquals(rs.getInt("text_id"), 67);
187 assertEquals(rs.getInt("match_count"), 6785);
188 assertTrue(rs.next());
189 assertEquals(rs.getInt("text_id"), 81);
190 assertEquals(rs.getInt("match_count"), 56576);
191 assertTrue(rs.next());
192 assertEquals(rs.getInt("text_id"), 94);
193 assertEquals(rs.getInt("match_count"), 456);
194 assertFalse(rs.next());
Nils Diewald8d8641b2014-09-28 17:37:53 +0000195
Nils Diewaldbb33da22015-03-04 16:24:25 +0000196 stat.close();
Nils Diewaldf04e1002014-09-24 22:52:59 +0000197 };
Nils Diewaldad3f3032014-09-24 01:42:47 +0000198
Nils Diewaldbb33da22015-03-04 16:24:25 +0000199
Nils Diewaldad3f3032014-09-24 01:42:47 +0000200 @Test
Nils Diewald6aa929e2014-09-17 13:30:34 +0000201 public void TestMatchCollectorDB () throws Exception {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000202 MatchCollector mc = new MatchCollectorDB(2000, "matchXYZ");
203 mc.add(5, 7);
204 mc.add(8, 2);
205 mc.add(9, 10);
206 mc.add(16, 90);
207 mc.commit();
208 assertEquals(mc.getTotalResults(), 109);
209 assertEquals(mc.getTotalResultDocs(), 4);
Nils Diewald6aa929e2014-09-17 13:30:34 +0000210 };
211
Nils Diewaldbb33da22015-03-04 16:24:25 +0000212
Nils Diewald6aa929e2014-09-17 13:30:34 +0000213 @After
214 public void shutDown () throws Exception {
Nils Diewaldbb33da22015-03-04 16:24:25 +0000215 this.conn.close();
Nils Diewald6aa929e2014-09-17 13:30:34 +0000216 };
217};