/*
* Copyright (c) 2004, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.test.jdbc2;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import org.postgresql.test.TestUtil;
import org.junit.Ignore;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;
/*
* Some simple tests based on problems reported by users. Hopefully these will help prevent previous
* problems from re-occurring ;-)
*
*/
public class MiscTest {
/*
* Some versions of the driver would return rs as a null?
*
* Sasha <ber0806@iperbole.bologna.it> was having this problem.
*
* Added Feb 13 2001
*/
@Test
public void testDatabaseSelectNullBug() throws Exception {
Connection con = TestUtil.openDB();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select datname from pg_database");
assertNotNull(rs);
while (rs.next()) {
rs.getString(1);
}
rs.close();
st.close();
TestUtil.closeDB(con);
}
/**
* Ensure the cancel call does not return before it has completed. Previously it did which
* cancelled future queries.
*/
@Test
public void testSingleThreadCancel() throws Exception {
Connection con = TestUtil.openDB();
Statement stmt = con.createStatement();
for (int i = 0; i < 100; i++) {
ResultSet rs = stmt.executeQuery("SELECT 1");
rs.close();
stmt.cancel();
}
TestUtil.closeDB(con);
}
@Test
public void testError() throws Exception {
Connection con = TestUtil.openDB();
try {
// transaction mode
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.execute("select 1/0");
fail("Should not execute this, as a SQLException s/b thrown");
con.commit();
} catch (SQLException ex) {
// Verify that the SQLException is serializable.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(ex);
oos.close();
}
con.commit();
con.close();
}
@Test
public void testWarning() throws Exception {
Connection con = TestUtil.openDB();
Statement stmt = con.createStatement();
stmt.execute("CREATE TEMP TABLE t(a int primary key)");
SQLWarning warning = stmt.getWarnings();
// We should get a warning about primary key index creation
// it's possible we won't depending on the server's
// client_min_messages setting.
while (warning != null) {
// Verify that the SQLWarning is serializable.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(warning);
oos.close();
warning = warning.getNextWarning();
}
stmt.close();
con.close();
}
@Ignore
@Test
public void xtestLocking() throws Exception {
Connection con = TestUtil.openDB();
Connection con2 = TestUtil.openDB();
TestUtil.createTable(con, "test_lock", "name text");
Statement st = con.createStatement();
Statement st2 = con2.createStatement();
con.setAutoCommit(false);
st.execute("lock table test_lock");
st2.executeUpdate("insert into test_lock ( name ) values ('hello')");
con.commit();
TestUtil.dropTable(con, "test_lock");
con.close();
con2.close();
}
}