Search in sources :

Example 26 with AssertThrows

use of org.h2.test.utils.AssertThrows in project h2database by h2database.

the class TestCluster method testCreateClusterAtRuntime.

private void testCreateClusterAtRuntime() throws SQLException {
    if (config.memory || config.networked || config.cipher != null) {
        return;
    }
    deleteFiles();
    org.h2.Driver.load();
    String user = getUser(), password = getPassword();
    Connection conn;
    Statement stat;
    int len = 10;
    // initialize the database
    Server n1 = org.h2.tools.Server.createTcpServer("-baseDir", getBaseDir() + "/node1").start();
    int port1 = n1.getPort();
    String url1 = getURL("jdbc:h2:tcp://localhost:" + port1 + "/test", false);
    conn = getConnection(url1, user, password);
    stat = conn.createStatement();
    stat.execute("create table test(id int primary key, name varchar) as " + "select x, 'Data' || x from system_range(0, " + (len - 1) + ")");
    stat.execute("create user test password 'test'");
    stat.execute("grant all on test to test");
    // start the second server
    Server n2 = org.h2.tools.Server.createTcpServer("-baseDir", getBaseDir() + "/node2").start();
    int port2 = n2.getPort();
    String url2 = getURL("jdbc:h2:tcp://localhost:" + port2 + "/test", false);
    // copy the database and initialize the cluster
    String serverList = "localhost:" + port1 + ",localhost:" + port2;
    CreateCluster.main("-urlSource", url1, "-urlTarget", url2, "-user", user, "-password", password, "-serverList", serverList);
    // check the original connection is closed
    assertThrows(ErrorCode.CONNECTION_BROKEN_1, stat).execute("select * from test");
    JdbcUtils.closeSilently(conn);
    // test the cluster connection
    String urlCluster = getURL("jdbc:h2:tcp://" + serverList + "/test", false);
    Connection connApp = getConnection(urlCluster + ";AUTO_RECONNECT=TRUE", user, password);
    check(connApp, len, "'" + serverList + "'");
    // delete the rows, but don't commit
    connApp.setAutoCommit(false);
    connApp.createStatement().execute("delete from test");
    // stop server 2, and test if only one server is available
    n2.stop();
    // rollback the transaction
    connApp.createStatement().executeQuery("select count(*) from test");
    connApp.rollback();
    check(connApp, len, "''");
    connApp.setAutoCommit(true);
    // re-create the cluster
    n2 = org.h2.tools.Server.createTcpServer("-tcpPort", "" + port2, "-baseDir", getBaseDir() + "/node2").start();
    CreateCluster.main("-urlSource", url1, "-urlTarget", url2, "-user", user, "-password", password, "-serverList", serverList);
    // test the cluster connection
    check(connApp, len, "'" + serverList + "'");
    connApp.close();
    // test a non-admin user
    String user2 = "test", password2 = getPassword("test");
    connApp = getConnection(urlCluster, user2, password2);
    check(connApp, len, "'" + serverList + "'");
    connApp.close();
    n1.stop();
    // test non-admin cluster connection if only one server runs
    Connection connApp2 = getConnection(urlCluster + ";AUTO_RECONNECT=TRUE", user2, password2);
    check(connApp2, len, "''");
    connApp2.close();
    // test non-admin cluster connection if only one server runs
    connApp2 = getConnection(urlCluster + ";AUTO_RECONNECT=TRUE", user2, password2);
    check(connApp2, len, "''");
    connApp2.close();
    n2.stop();
    deleteFiles();
}
Also used : Server(org.h2.tools.Server) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) Connection(java.sql.Connection)

Example 27 with AssertThrows

use of org.h2.test.utils.AssertThrows in project h2database by h2database.

the class TestCluster method testStartStopCluster.

private void testStartStopCluster() throws SQLException {
    if (config.memory || config.networked || config.cipher != null) {
        return;
    }
    int port1 = 9193, port2 = 9194;
    String serverList = "localhost:" + port1 + ",localhost:" + port2;
    deleteFiles();
    // initialize the database
    Connection conn;
    org.h2.Driver.load();
    String urlNode1 = getURL("node1/test", true);
    String urlNode2 = getURL("node2/test", true);
    String user = getUser(), password = getPassword();
    conn = getConnection(urlNode1, user, password);
    Statement stat;
    stat = conn.createStatement();
    stat.execute("DROP TABLE IF EXISTS TEST");
    stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255))");
    PreparedStatement prep = conn.prepareStatement("INSERT INTO TEST VALUES(?, ?)");
    int len = getSize(10, 1000);
    for (int i = 0; i < len; i++) {
        prep.setInt(1, i);
        prep.setString(2, "Data" + i);
        prep.executeUpdate();
    }
    check(conn, len, "''");
    conn.close();
    // copy the database and initialize the cluster
    CreateCluster.main("-urlSource", urlNode1, "-urlTarget", urlNode2, "-user", user, "-password", password, "-serverList", serverList);
    // start both servers
    Server n1 = org.h2.tools.Server.createTcpServer("-tcpPort", "" + port1, "-baseDir", getBaseDir() + "/node1").start();
    Server n2 = org.h2.tools.Server.createTcpServer("-tcpPort", "" + port2, "-baseDir", getBaseDir() + "/node2").start();
    // try to connect in standalone mode - should fail
    // should not be able to connect in standalone mode
    assertThrows(ErrorCode.CLUSTER_ERROR_DATABASE_RUNS_CLUSTERED_1, this).getConnection("jdbc:h2:tcp://localhost:" + port1 + "/test", user, password);
    assertThrows(ErrorCode.CLUSTER_ERROR_DATABASE_RUNS_CLUSTERED_1, this).getConnection("jdbc:h2:tcp://localhost:" + port2 + "/test", user, password);
    // test a cluster connection
    conn = getConnection("jdbc:h2:tcp://" + serverList + "/test", user, password);
    check(conn, len, "'" + serverList + "'");
    conn.close();
    // stop server 2, and test if only one server is available
    n2.stop();
    conn = getConnection("jdbc:h2:tcp://" + serverList + "/test", user, password);
    check(conn, len, "''");
    conn.close();
    conn = getConnection("jdbc:h2:tcp://" + serverList + "/test", user, password);
    check(conn, len, "''");
    conn.close();
    // disable the cluster
    conn = getConnection("jdbc:h2:tcp://localhost:" + port1 + "/test;CLUSTER=''", user, password);
    conn.close();
    n1.stop();
    // re-create the cluster
    DeleteDbFiles.main("-dir", getBaseDir() + "/node2", "-quiet");
    CreateCluster.main("-urlSource", urlNode1, "-urlTarget", urlNode2, "-user", user, "-password", password, "-serverList", serverList);
    n1 = org.h2.tools.Server.createTcpServer("-tcpPort", "" + port1, "-baseDir", getBaseDir() + "/node1").start();
    n2 = org.h2.tools.Server.createTcpServer("-tcpPort", "" + port2, "-baseDir", getBaseDir() + "/node2").start();
    conn = getConnection("jdbc:h2:tcp://" + serverList + "/test", user, password);
    stat = conn.createStatement();
    stat.execute("CREATE TABLE BOTH(ID INT)");
    n1.stop();
    stat.execute("CREATE TABLE A(ID INT)");
    conn.close();
    n2.stop();
    n1 = org.h2.tools.Server.createTcpServer("-tcpPort", "" + port1, "-baseDir", getBaseDir() + "/node1").start();
    conn = getConnection("jdbc:h2:tcp://localhost:" + port1 + "/test;CLUSTER=''", user, password);
    check(conn, len, "''");
    conn.close();
    n1.stop();
    n2 = org.h2.tools.Server.createTcpServer("-tcpPort", "" + port2, "-baseDir", getBaseDir() + "/node2").start();
    conn = getConnection("jdbc:h2:tcp://localhost:" + port2 + "/test;CLUSTER=''", user, password);
    check(conn, len, "''");
    conn.createStatement().execute("SELECT * FROM A");
    conn.close();
    n2.stop();
    deleteFiles();
}
Also used : Server(org.h2.tools.Server) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement)

Example 28 with AssertThrows

use of org.h2.test.utils.AssertThrows in project h2database by h2database.

the class TestLob method testUniqueIndex.

private void testUniqueIndex() throws Exception {
    deleteDb("lob");
    Connection conn;
    Statement stat;
    conn = getConnection("lob");
    stat = conn.createStatement();
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, stat).execute("create memory table test(x clob unique)");
    conn.close();
}
Also used : PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) Connection(java.sql.Connection) JdbcConnection(org.h2.jdbc.JdbcConnection)

Example 29 with AssertThrows

use of org.h2.test.utils.AssertThrows in project h2database by h2database.

the class TestCsv method testOptions.

private void testOptions() {
    Csv csv = new Csv();
    assertEquals(",", csv.getFieldSeparatorWrite());
    assertEquals(SysProperties.LINE_SEPARATOR, csv.getLineSeparator());
    assertEquals("", csv.getNullString());
    assertEquals('\"', csv.getEscapeCharacter());
    assertEquals('"', csv.getFieldDelimiter());
    assertEquals(',', csv.getFieldSeparatorRead());
    assertEquals(",", csv.getFieldSeparatorWrite());
    assertEquals(0, csv.getLineCommentCharacter());
    assertEquals(false, csv.getPreserveWhitespace());
    String charset;
    charset = csv.setOptions("escape=\\  fieldDelimiter=\\\\ fieldSeparator=\n " + "lineComment=\" lineSeparator=\\ \\\\\\ ");
    assertEquals(' ', csv.getEscapeCharacter());
    assertEquals('\\', csv.getFieldDelimiter());
    assertEquals('\n', csv.getFieldSeparatorRead());
    assertEquals("\n", csv.getFieldSeparatorWrite());
    assertEquals('"', csv.getLineCommentCharacter());
    assertEquals(" \\ ", csv.getLineSeparator());
    assertFalse(csv.getPreserveWhitespace());
    assertFalse(csv.getCaseSensitiveColumnNames());
    charset = csv.setOptions("escape=1x fieldDelimiter=2x " + "fieldSeparator=3x " + "lineComment=4x lineSeparator=5x " + "null=6x charset=7x " + "preserveWhitespace=true caseSensitiveColumnNames=true");
    assertEquals('1', csv.getEscapeCharacter());
    assertEquals('2', csv.getFieldDelimiter());
    assertEquals('3', csv.getFieldSeparatorRead());
    assertEquals("3x", csv.getFieldSeparatorWrite());
    assertEquals('4', csv.getLineCommentCharacter());
    assertEquals("5x", csv.getLineSeparator());
    assertEquals("6x", csv.getNullString());
    assertEquals("7x", charset);
    assertTrue(csv.getPreserveWhitespace());
    assertTrue(csv.getCaseSensitiveColumnNames());
    charset = csv.setOptions("escape= fieldDelimiter= " + "fieldSeparator= " + "lineComment= lineSeparator=\r\n " + "null=\0 charset=");
    assertEquals(0, csv.getEscapeCharacter());
    assertEquals(0, csv.getFieldDelimiter());
    assertEquals(0, csv.getFieldSeparatorRead());
    assertEquals("", csv.getFieldSeparatorWrite());
    assertEquals(0, csv.getLineCommentCharacter());
    assertEquals("\r\n", csv.getLineSeparator());
    assertEquals("\0", csv.getNullString());
    assertEquals("", charset);
    createClassProxy(Csv.class);
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, csv).setOptions("escape=a error=b");
    assertEquals('a', csv.getEscapeCharacter());
}
Also used : Csv(org.h2.tools.Csv)

Example 30 with AssertThrows

use of org.h2.test.utils.AssertThrows in project h2database by h2database.

the class TestLobApi method testUnsupportedOperations.

private void testUnsupportedOperations() throws Exception {
    Connection conn = getConnection(getTestName());
    stat = conn.createStatement();
    stat.execute("create table test(id int, c clob, b blob)");
    stat.execute("insert into test values(1, 'x', x'00')");
    ResultSet rs = stat.executeQuery("select * from test order by id");
    rs.next();
    Clob clob = rs.getClob(2);
    byte[] data = IOUtils.readBytesAndClose(clob.getAsciiStream(), -1);
    assertEquals("x", new String(data, StandardCharsets.UTF_8));
    assertTrue(clob.toString().endsWith("'x'"));
    clob.free();
    assertTrue(clob.toString().endsWith("null"));
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, clob).truncate(0);
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, clob).setAsciiStream(1);
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, clob).position("", 0);
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, clob).position((Clob) null, 0);
    Blob blob = rs.getBlob(3);
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, blob).truncate(0);
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, blob).position(new byte[1], 0);
    assertThrows(ErrorCode.FEATURE_NOT_SUPPORTED_1, blob).position((Blob) null, 0);
    assertTrue(blob.toString().endsWith("X'00'"));
    blob.free();
    assertTrue(blob.toString().endsWith("null"));
    stat.execute("drop table test");
    conn.close();
}
Also used : Blob(java.sql.Blob) Connection(java.sql.Connection) JdbcConnection(org.h2.jdbc.JdbcConnection) ResultSet(java.sql.ResultSet) NClob(java.sql.NClob) Clob(java.sql.Clob)

Aggregations

Connection (java.sql.Connection)40 Statement (java.sql.Statement)37 PreparedStatement (java.sql.PreparedStatement)35 ResultSet (java.sql.ResultSet)17 JdbcConnection (org.h2.jdbc.JdbcConnection)16 AssertThrows (org.h2.test.utils.AssertThrows)12 SQLException (java.sql.SQLException)8 JdbcSQLException (org.h2.jdbc.JdbcSQLException)8 SimpleResultSet (org.h2.tools.SimpleResultSet)8 CallableStatement (java.sql.CallableStatement)7 Server (org.h2.tools.Server)7 IOException (java.io.IOException)4 Clob (java.sql.Clob)4 Task (org.h2.util.Task)4 Reader (java.io.Reader)3 StringReader (java.io.StringReader)3 Method (java.lang.reflect.Method)3 BigDecimal (java.math.BigDecimal)3 FileChannel (java.nio.channels.FileChannel)3 Savepoint (java.sql.Savepoint)3