blob: e4848d9128d28c7417ec56c092652f0c6f8f808d [file] [log] [blame]
package de.ids_mannheim.korap.server;
import de.ids_mannheim.korap.response.MatchCollector;
import de.ids_mannheim.korap.response.collector.MatchCollectorDB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import com.mchange.v2.c3p0.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.*;
public class TestDatabase {
private Connection conn;
private Statement stat;
@Before
public void setUp () throws Exception {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite::memory:");
this.stat = conn.createStatement();
stat.executeUpdate(
"CREATE TABLE IF NOT EXISTS people (name TEXT, age INTEGER);");
conn.setAutoCommit(false);
};
@Test
public void TestDatabase () throws Exception {
PreparedStatement prep = this.conn
.prepareStatement("INSERT INTO people VALUES (?, ?);");
prep.setString(1, "Peter");
prep.setString(2, "24");
prep.addBatch();
prep.setString(1, "Klaus");
prep.setString(2, "31");
prep.addBatch();
prep.executeBatch();
conn.setAutoCommit(true);
ResultSet rs = stat.executeQuery("SELECT * FROM people;");
rs.next();
assertEquals(rs.getString("name"), "Peter");
assertEquals(rs.getInt("age"), 24);
rs.next();
assertEquals(rs.getString("name"), "Klaus");
assertEquals(rs.getInt("age"), 31);
rs.close();
};
/*
* The following tests don't work well with in-memory dbs and
* temporary dbs - should be improved
*/
@Test
public void TestDatabasePool () throws Exception {
ComboPooledDataSource cpds = new ComboPooledDataSource();
// Connect to a temporary file instead of a in-memory file
cpds.setDriverClass("org.sqlite.JDBC");
cpds.setJdbcUrl("jdbc:sqlite:");
cpds.setMaxStatements(100);
// This is part of the match collector
this.conn = cpds.getConnection();
conn.setAutoCommit(false);
this.stat = conn.createStatement();
stat.executeUpdate(
"CREATE TABLE IF NOT EXISTS result_a (text_id INTEGER, match_count INTEGER);");
// conn.setAutoCommit(false);
PreparedStatement prep = this.conn
.prepareStatement("INSERT INTO result_a VALUES (?, ?);");
prep.setInt(1, 5);
prep.setInt(2, 8000);
prep.addBatch();
prep.executeBatch();
ResultSet rs = stat.executeQuery("SELECT * FROM result_a;");
rs.next();
assertEquals(rs.getInt("text_id"), 5);
assertEquals(rs.getInt("match_count"), 8000);
rs.close();
MatchCollectorDB mc = new MatchCollectorDB(2000, "result_a");
mc.setDBPool("sqlite", cpds, this.conn);
mc.add(9, 5000);
mc.add(12, 6785);
mc.add(39, 56576);
mc.close(false);
rs = stat.executeQuery("SELECT * FROM result_a;");
assertTrue(rs.next());
assertEquals(rs.getInt("text_id"), 5);
assertEquals(rs.getInt("match_count"), 8000);
rs.next();
assertEquals(rs.getInt("text_id"), 9);
assertEquals(rs.getInt("match_count"), 5000);
rs.next();
assertEquals(rs.getInt("text_id"), 12);
assertEquals(rs.getInt("match_count"), 6785);
rs.next();
assertEquals(rs.getInt("text_id"), 39);
assertEquals(rs.getInt("match_count"), 56576);
rs.close();
};
@Test
public void TestDatabasePoolCollector () throws Exception {
ComboPooledDataSource cpds = new ComboPooledDataSource();
// Connect to a temporary file instead of a in-memory file
cpds.setDriverClass("org.sqlite.JDBC");
cpds.setJdbcUrl("jdbc:sqlite:");
cpds.setMaxStatements(100);
// This is part of the match collector
conn = cpds.getConnection();
conn.setAutoCommit(false);
Statement stat = conn.createStatement();
stat.executeUpdate(
"CREATE TABLE IF NOT EXISTS matchXYZ (text_id INTEGER, match_count INTEGER);");
conn.commit();
stat.close();
MatchCollectorDB mc = new MatchCollectorDB(3, "matchXYZ");
mc.setDBPool("sqlite", cpds, conn);
mc.add(9, 5000);
mc.add(12, 6785);
mc.add(39, 56576);
// First commit
mc.add(45, 5000);
mc.add(67, 6785);
mc.add(81, 56576);
// Second commit
mc.add(94, 456);
mc.close(false);
// Final commit
// conn = cpds.getConnection();
stat = conn.createStatement();
ResultSet rs = stat
.executeQuery("SELECT count('*') AS num FROM matchXYZ;");
assertEquals(7, rs.getInt("num"));
rs = stat.executeQuery("SELECT text_id, match_count FROM matchXYZ;");
assertTrue(rs.next());
assertEquals(rs.getInt("text_id"), 9);
assertEquals(rs.getInt("match_count"), 5000);
assertTrue(rs.next());
assertEquals(rs.getInt("text_id"), 12);
assertEquals(rs.getInt("match_count"), 6785);
assertTrue(rs.next());
assertEquals(rs.getInt("text_id"), 39);
assertEquals(rs.getInt("match_count"), 56576);
assertTrue(rs.next());
assertEquals(rs.getInt("text_id"), 45);
assertEquals(rs.getInt("match_count"), 5000);
assertTrue(rs.next());
assertEquals(rs.getInt("text_id"), 67);
assertEquals(rs.getInt("match_count"), 6785);
assertTrue(rs.next());
assertEquals(rs.getInt("text_id"), 81);
assertEquals(rs.getInt("match_count"), 56576);
assertTrue(rs.next());
assertEquals(rs.getInt("text_id"), 94);
assertEquals(rs.getInt("match_count"), 456);
assertFalse(rs.next());
stat.close();
};
@Test
public void TestMatchCollectorDB () throws Exception {
MatchCollector mc = new MatchCollectorDB(2000, "matchXYZ");
mc.add(5, 7);
mc.add(8, 2);
mc.add(9, 10);
mc.add(16, 90);
mc.commit();
assertEquals(mc.getTotalResults(), 109);
assertEquals(mc.getTotalResultDocs(), 4);
};
@After
public void shutDown () throws Exception {
this.conn.close();
};
};