/* * Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0, * and the EPL 1.0 (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.test.jdbc; import org.h2.api.ErrorCode; import org.h2.test.TestBase; import java.sql.Connection; import java.sql.SQLClientInfoException; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * Tests the client info */ public class TestConnection extends TestBase { /** * Run just this test. * * @param a ignored */ public static void main(String... a) throws Exception { TestBase.createCaller().init().test(); } @Override public void test() throws Exception { testSetSupportedClientInfo(); testSetUnsupportedClientInfo(); testGetUnsupportedClientInfo(); testSetSupportedClientInfoProperties(); testSetUnsupportedClientInfoProperties(); testSetInternalProperty(); testSetGetSchema(); } private void testSetInternalProperty() throws SQLException { // Use MySQL-mode since this allows all property names // (apart from h2 internal names). Connection conn = getConnection("clientInfoMySQL;MODE=MySQL"); assertThrows(SQLClientInfoException.class, conn).setClientInfo("numServers", "SomeValue"); assertThrows(SQLClientInfoException.class, conn).setClientInfo("server23", "SomeValue"); } private void testSetUnsupportedClientInfoProperties() throws SQLException { Connection conn = getConnection("clientInfo"); Properties properties = new Properties(); properties.put("ClientUser", "someUser"); assertThrows(SQLClientInfoException.class, conn).setClientInfo(properties); } private void testSetSupportedClientInfoProperties() throws SQLException { Connection conn = getConnection("clientInfoDB2;MODE=DB2"); conn.setClientInfo("ApplicationName", "Connection Test"); Properties properties = new Properties(); properties.put("ClientUser", "someUser"); conn.setClientInfo(properties); // old property should have been removed assertNull(conn.getClientInfo("ApplicationName")); // new property has been set assertEquals(conn.getClientInfo("ClientUser"), "someUser"); } private void testSetSupportedClientInfo() throws SQLException { Connection conn = getConnection("clientInfoDB2;MODE=DB2"); conn.setClientInfo("ApplicationName", "Connection Test"); assertEquals(conn.getClientInfo("ApplicationName"), "Connection Test"); } private void testSetUnsupportedClientInfo() throws SQLException { Connection conn = getConnection("clientInfoDB2;MODE=DB2"); assertThrows(SQLClientInfoException.class, conn).setClientInfo( "UnsupportedName", "SomeValue"); } private void testGetUnsupportedClientInfo() throws SQLException { Connection conn = getConnection("clientInfo"); assertNull(conn.getClientInfo("UnknownProperty")); } private void testSetGetSchema() throws SQLException { if (config.networked) { return; } deleteDb("schemaSetGet"); Connection conn = getConnection("schemaSetGet"); Statement s = conn.createStatement(); s.executeUpdate("create schema my_test_schema"); s.executeUpdate("create table my_test_schema.my_test_table(id uuid, nave varchar)"); assertEquals("PUBLIC", conn.getSchema()); assertThrows(ErrorCode.TABLE_OR_VIEW_NOT_FOUND_1, s, "select * from my_test_table"); assertThrows(ErrorCode.SCHEMA_NOT_FOUND_1, conn).setSchema("my_test_table"); conn.setSchema("MY_TEST_SCHEMA"); assertEquals("MY_TEST_SCHEMA", conn.getSchema()); s.executeQuery("select * from my_test_table"); assertThrows(ErrorCode.SCHEMA_NOT_FOUND_1, conn).setSchema("NON_EXISTING_SCHEMA"); assertEquals("MY_TEST_SCHEMA", conn.getSchema()); s.executeUpdate("create schema \"otheR_schEma\""); conn.setSchema("otheR_schEma"); assertEquals("otheR_schEma", conn.getSchema()); s.close(); conn.close(); } }