提交 fd51d35f authored 作者: Thomas Mueller's avatar Thomas Mueller

Improve code coverage.

上级 b2b95ccd
...@@ -567,6 +567,10 @@ public abstract class TestBase { ...@@ -567,6 +567,10 @@ public abstract class TestBase {
* @throws AssertionError if the values are not equal * @throws AssertionError if the values are not equal
*/ */
public void assertEquals(byte[] expected, byte[] actual) { public void assertEquals(byte[] expected, byte[] actual) {
if (expected == null || actual == null) {
assertTrue(expected == actual);
return;
}
assertEquals(expected.length, actual.length); assertEquals(expected.length, actual.length);
for (int i = 0; i < expected.length; i++) { for (int i = 0; i < expected.length; i++) {
if (expected[i] != actual[i]) { if (expected[i] != actual[i]) {
......
...@@ -43,7 +43,8 @@ public class TestWeb extends TestBase { ...@@ -43,7 +43,8 @@ public class TestWeb extends TestBase {
testTransfer(); testTransfer();
testAlreadyRunning(); testAlreadyRunning();
testStartWebServerWithConnection(); testStartWebServerWithConnection();
testAutoComplete(); testServer();
testWebApp();
} }
private void testAlreadyRunning() throws Exception { private void testAlreadyRunning() throws Exception {
...@@ -72,7 +73,7 @@ public class TestWeb extends TestBase { ...@@ -72,7 +73,7 @@ public class TestWeb extends TestBase {
conn.close(); conn.close();
Server server = new Server(); Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream())); server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-web", "-webPort", "8182", "-properties", "null", "-tcp", "-tcpPort", "9001"); server.runTool("-web", "-webPort", "8182", "-properties", "null", "-tcp", "-tcpPort", "9101");
try { try {
String url = "http://localhost:8182"; String url = "http://localhost:8182";
WebClient client; WebClient client;
...@@ -130,10 +131,10 @@ public class TestWeb extends TestBase { ...@@ -130,10 +131,10 @@ public class TestWeb extends TestBase {
} }
} }
private void testAutoComplete() throws Exception { private void testServer() throws Exception {
Server server = new Server(); Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream())); server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-web", "-webPort", "8182", "-properties", "null", "-tcp", "-tcpPort", "9001"); server.runTool("-web", "-webPort", "8182", "-properties", "null", "-tcp", "-tcpPort", "9101");
String url = "http://localhost:8182"; String url = "http://localhost:8182";
WebClient client; WebClient client;
String result; String result;
...@@ -152,12 +153,31 @@ public class TestWeb extends TestBase { ...@@ -152,12 +153,31 @@ public class TestWeb extends TestBase {
assertEquals("text/javascript", client.getContentType()); assertEquals("text/javascript", client.getContentType());
client.get(url, "stylesheet.css"); client.get(url, "stylesheet.css");
assertEquals("text/css", client.getContentType()); assertEquals("text/css", client.getContentType());
client.get(url, "admin.do");
try {
client.get(url, "adminShutdown.do");
} catch (IOException e) {
// expected
Thread.sleep(1000);
}
server.shutdown();
// it should be stopped now
server = Server.createTcpServer("-tcpPort", "9101");
server.start();
server.stop();
}
private void testWebApp() throws Exception {
Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-web", "-webPort", "8182", "-properties", "null", "-tcp", "-tcpPort", "9101");
String url = "http://localhost:8182";
WebClient client;
String result;
client = new WebClient(); client = new WebClient();
result = client.get(url); result = client.get(url);
client.readSessionId(result); client.readSessionId(result);
client.get(url, "login.jsp"); client.get(url, "login.jsp");
client.get(url, "stylesheet.css");
client.get(url, "adminSave.do"); client.get(url, "adminSave.do");
result = client.get(url, "index.do?language=de"); result = client.get(url, "index.do?language=de");
result = client.get(url, "login.jsp"); result = client.get(url, "login.jsp");
...@@ -171,11 +191,14 @@ public class TestWeb extends TestBase { ...@@ -171,11 +191,14 @@ public class TestWeb extends TestBase {
assertTrue(result.indexOf("Exception") < 0); assertTrue(result.indexOf("Exception") < 0);
result = client.get(url, "login.do?driver=org.h2.Driver&url=jdbc:h2:mem:web&user=sa&password=sa&name=_test_"); result = client.get(url, "login.do?driver=org.h2.Driver&url=jdbc:h2:mem:web&user=sa&password=sa&name=_test_");
result = client.get(url, "header.jsp"); result = client.get(url, "header.jsp");
result = client.get(url, "query.do?sql=create table test(id int primary key, name varchar);insert into test values(1, 'Hello')");
result = client.get(url, "query.do?sql=create sequence test_sequence");
result = client.get(url, "query.do?sql=create schema test_schema");
result = client.get(url, "query.do?sql=create view test_view as select * from test");
result = client.get(url, "tables.do"); result = client.get(url, "tables.do");
result = client.get(url, "query.jsp"); result = client.get(url, "query.jsp");
result = client.get(url, "query.do?sql=select * from test"); result = client.get(url, "query.do?sql=select * from test");
result = client.get(url, "query.do?sql=drop table test if exists"); result = client.get(url, "query.do?sql=drop table test if exists");
result = client.get(url, "query.do?sql=create table test(id int primary key, name varchar);insert into test values(1, 'Hello')");
result = client.get(url, "query.do?sql=select * from test"); result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "Hello"); assertContains(result, "Hello");
result = client.get(url, "query.do?sql=@META select * from test"); result = client.get(url, "query.do?sql=@META select * from test");
...@@ -197,6 +220,22 @@ public class TestWeb extends TestBase { ...@@ -197,6 +220,22 @@ public class TestWeb extends TestBase {
result = client.get(url, "query.do?sql=@HISTORY"); result = client.get(url, "query.do?sql=@HISTORY");
result = client.get(url, "getHistory.do?id=4"); result = client.get(url, "getHistory.do?id=4");
assertContains(result, "select * from test"); assertContains(result, "select * from test");
result = client.get(url, "query.do?sql=delete from test");
// op 1 (row -1: insert, otherwise update): ok, 2: delete 3: cancel,
result = client.get(url, "editResult.do?sql=@edit select * from test&op=1&row=-1&r-1c1=1&r-1c2=Hello");
assertContains(result, "1");
assertContains(result, "Hello");
result = client.get(url, "editResult.do?sql=@edit select * from test&op=1&row=1&r1c1=1&r1c2=Hallo");
assertContains(result, "1");
assertContains(result, "Hallo");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "1");
assertContains(result, "Hallo");
result = client.get(url, "editResult.do?sql=@edit select * from test&op=2&row=1");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "no rows");
// autoComplete
result = client.get(url, "autoCompleteList.do?query=select 'abc"); result = client.get(url, "autoCompleteList.do?query=select 'abc");
assertContains(StringUtils.urlDecode(result), "'"); assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=select 'abc''"); result = client.get(url, "autoCompleteList.do?query=select 'abc''");
...@@ -254,6 +293,66 @@ public class TestWeb extends TestBase { ...@@ -254,6 +293,66 @@ public class TestWeb extends TestBase {
assertContains(result, "column_name"); assertContains(result, "column_name");
result = client.get(url, "query.do?sql=delete from test"); result = client.get(url, "query.do?sql=delete from test");
// special commands
result = client.get(url, "query.do?sql=@autocommit_true");
assertContains(result, "Auto commit is now ON");
result = client.get(url, "query.do?sql=@autocommit_false");
assertContains(result, "Auto commit is now OFF");
result = client.get(url, "query.do?sql=@cancel");
assertContains(result, "There is currently no running statement");
result = client.get(url, "query.do?sql=@generated insert into test(id) values(test_sequence.nextval)");
assertContains(result, "SCOPE_IDENTITY()");
result = client.get(url, "query.do?sql=@maxrows 2000");
assertContains(result, "Max rowcount is set");
result = client.get(url, "query.do?sql=@password_hash user password");
assertContains(result, "501cf5c163c184c26e62e76d25d441979f8f25dfd7a683484995b4a43a112fdf");
result = client.get(url, "query.do?sql=@sleep 1");
assertContains(result, "Ok");
result = client.get(url, "query.do?sql=@catalogs");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@column_privileges null null null TEST null");
assertContains(result, "PRIVILEGE");
result = client.get(url, "query.do?sql=@cross_references null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@exported_keys null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@imported_keys null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@primary_keys null null null TEST");
assertContains(result, "PK_NAME");
result = client.get(url, "query.do?sql=@procedures null null null");
assertContains(result, "PROCEDURE_NAME");
result = client.get(url, "query.do?sql=@procedure_columns");
assertContains(result, "PROCEDURE_NAME");
result = client.get(url, "query.do?sql=@schemas");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@table_privileges");
assertContains(result, "PRIVILEGE");
result = client.get(url, "query.do?sql=@table_types");
assertContains(result, "SYSTEM TABLE");
result = client.get(url, "query.do?sql=@type_info");
assertContains(result, "CLOB");
result = client.get(url, "query.do?sql=@version_columns");
assertContains(result, "PSEUDO_COLUMN");
result = client.get(url, "query.do?sql=@attributes");
assertContains(result, "Feature not supported: &quot;attributes&quot;");
result = client.get(url, "query.do?sql=@super_tables");
assertContains(result, "SUPERTABLE_NAME");
result = client.get(url, "query.do?sql=@super_types");
assertContains(result, "Feature not supported: &quot;superTypes&quot;");
result = client.get(url, "query.do?sql=@prof_start");
assertContains(result, "Ok");
result = client.get(url, "query.do?sql=@prof_stop");
assertContains(result, "Top Stack Trace(s)");
result = client.get(url, "query.do?sql=@best_row_identifier null null TEST");
assertContains(result, "SCOPE");
assertContains(result, "COLUMN_NAME");
assertContains(result, "ID");
result = client.get(url, "query.do?sql=@udts");
assertContains(result, "CLASS_NAME");
result = client.get(url, "query.do?sql=@udts null null null 1,2,3");
assertContains(result, "CLASS_NAME");
result = client.get(url, "query.do?sql=@LOOP 10 @STATEMENT insert into test values(?, 'Hello')"); result = client.get(url, "query.do?sql=@LOOP 10 @STATEMENT insert into test values(?, 'Hello')");
result = client.get(url, "query.do?sql=select * from test"); result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "8"); assertContains(result, "8");
...@@ -276,7 +375,6 @@ public class TestWeb extends TestBase { ...@@ -276,7 +375,6 @@ public class TestWeb extends TestBase {
assertContains(result, "PUBLIC"); assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@MEMORY"); result = client.get(url, "query.do?sql=@MEMORY");
assertContains(result, "Used"); assertContains(result, "Used");
result = client.get(url, "query.do?sql=@UDTS");
result = client.get(url, "query.do?sql=@INFO"); result = client.get(url, "query.do?sql=@INFO");
assertContains(result, "getCatalog"); assertContains(result, "getCatalog");
...@@ -288,17 +386,7 @@ public class TestWeb extends TestBase { ...@@ -288,17 +386,7 @@ public class TestWeb extends TestBase {
result = client.get(url, "settingRemove.do?name=_test_"); result = client.get(url, "settingRemove.do?name=_test_");
client.get(url, "admin.do"); client.get(url, "admin.do");
try {
client.get(url, "adminShutdown.do");
} catch (IOException e) {
// expected
Thread.sleep(100);
}
server.shutdown(); server.shutdown();
// it should be stopped now
server = Server.createTcpServer("-tcpPort", "9001");
server.start();
server.stop();
} }
private void testStartWebServerWithConnection() throws Exception { private void testStartWebServerWithConnection() throws Exception {
......
...@@ -10,18 +10,25 @@ import java.net.URL; ...@@ -10,18 +10,25 @@ import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.sql.Connection; import java.sql.Connection;
import java.sql.Driver; import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.Properties;
import org.h2.constant.ErrorCode; import org.h2.constant.ErrorCode;
import org.h2.test.TestBase; import org.h2.test.TestBase;
import org.h2.tools.Server; import org.h2.tools.Server;
import org.hsqldb.types.Types;
/** /**
* Tests the compatibility with older versions * Tests the compatibility with older versions
*/ */
public class TestOldVersion extends TestBase { public class TestOldVersion extends TestBase {
private ClassLoader cl;
private Driver driver;
/** /**
* Run just this test. * Run just this test.
* *
...@@ -32,20 +39,72 @@ public class TestOldVersion extends TestBase { ...@@ -32,20 +39,72 @@ public class TestOldVersion extends TestBase {
} }
public void test() throws Exception { public void test() throws Exception {
URL[] urls = { new URL("file:ext/h2-1.2.127.jar") }; cl = getClassLoader("file:ext/h2-1.2.127.jar");
ClassLoader cl = new URLClassLoader(urls, null); driver = getDriver(cl);
// cl = getClass().getClassLoader(); if (driver == null) {
Class<?> driverClass;
try {
driverClass = cl.loadClass("org.h2.Driver");
} catch (ClassNotFoundException e) {
println("not found: ext/h2-1.2.127.jar - test skipped"); println("not found: ext/h2-1.2.127.jar - test skipped");
return;
} }
Method m = driverClass.getMethod("load");
Driver driver = (Driver) m.invoke(null);
Connection conn = driver.connect("jdbc:h2:mem:", null); Connection conn = driver.connect("jdbc:h2:mem:", null);
assertEquals("1.2.127 (2010-01-15)", conn.getMetaData().getDatabaseProductVersion()); assertEquals("1.2.127 (2010-01-15)", conn.getMetaData().getDatabaseProductVersion());
conn.close();
testLobInFiles();
testOldClientNewServer();
}
private void testLobInFiles() throws Exception {
deleteDb("oldVersion");
Connection conn;
Statement stat;
conn = driver.connect("jdbc:h2:" + getBaseDir() + "/oldVersion", null);
stat = conn.createStatement();
stat.execute("create table test(id int primary key, b blob, c clob)");
PreparedStatement prep = conn.prepareStatement("insert into test values(?, ?, ?)");
prep.setInt(1, 0);
prep.setNull(2, Types.BLOB);
prep.setNull(3, Types.CLOB);
prep.execute();
prep.setInt(1, 1);
prep.setBytes(2, new byte[0]);
prep.setString(3, "");
prep.execute();
prep.setInt(1, 2);
prep.setBytes(2, new byte[5]);
prep.setString(3, "\u1234\u1234\u1234\u1234\u1234");
prep.execute();
prep.setInt(1, 3);
prep.setBytes(2, new byte[100000]);
prep.setString(3, new String(new char[100000]));
prep.execute();
conn.close();
conn = DriverManager.getConnection("jdbc:h2:" + getBaseDir() + "/oldVersion", new Properties());
stat = conn.createStatement();
checkResult(stat.executeQuery("select * from test order by id"));
stat.execute("create table test2 as select * from test");
checkResult(stat.executeQuery("select * from test2 order by id"));
stat.execute("delete from test");
conn.close();
}
private void checkResult(ResultSet rs) throws SQLException {
rs.next();
assertEquals(0, rs.getInt(1));
assertEquals(null, rs.getBytes(2));
assertEquals(null, rs.getString(3));
rs.next();
assertEquals(1, rs.getInt(1));
assertEquals(new byte[0], rs.getBytes(2));
assertEquals("", rs.getString(3));
rs.next();
assertEquals(2, rs.getInt(1));
assertEquals(new byte[5], rs.getBytes(2));
assertEquals("\u1234\u1234\u1234\u1234\u1234", rs.getString(3));
rs.next();
assertEquals(3, rs.getInt(1));
assertEquals(new byte[100000], rs.getBytes(2));
assertEquals(new String(new char[100000]), rs.getString(3));
}
private void testOldClientNewServer() throws Exception {
Server server = org.h2.tools.Server.createTcpServer("-tcpPort", "9001"); Server server = org.h2.tools.Server.createTcpServer("-tcpPort", "9001");
server.start(); server.start();
try { try {
...@@ -56,10 +115,12 @@ public class TestOldVersion extends TestBase { ...@@ -56,10 +115,12 @@ public class TestOldVersion extends TestBase {
server.stop(); server.stop();
Class<?> serverClass = cl.loadClass("org.h2.tools.Server"); Class<?> serverClass = cl.loadClass("org.h2.tools.Server");
Method m;
m = serverClass.getMethod("createTcpServer", String[].class); m = serverClass.getMethod("createTcpServer", String[].class);
Object serverOld = m.invoke(null, new Object[]{new String[]{"-tcpPort", "9001"}}); Object serverOld = m.invoke(null, new Object[]{new String[]{"-tcpPort", "9001"}});
m = serverOld.getClass().getMethod("start"); m = serverOld.getClass().getMethod("start");
m.invoke(serverOld); m.invoke(serverOld);
Connection conn;
conn = org.h2.Driver.load().connect("jdbc:h2:mem:", null); conn = org.h2.Driver.load().connect("jdbc:h2:mem:", null);
Statement stat = conn.createStatement(); Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("call 1"); ResultSet rs = stat.executeQuery("call 1");
...@@ -70,4 +131,21 @@ public class TestOldVersion extends TestBase { ...@@ -70,4 +131,21 @@ public class TestOldVersion extends TestBase {
m.invoke(serverOld); m.invoke(serverOld);
} }
private ClassLoader getClassLoader(String jarFile) throws Exception {
URL[] urls = { new URL(jarFile) };
return new URLClassLoader(urls, null);
}
private Driver getDriver(ClassLoader cl) throws Exception {
Class<?> driverClass;
try {
driverClass = cl.loadClass("org.h2.Driver");
} catch (ClassNotFoundException e) {
return null;
}
Method m = driverClass.getMethod("load");
Driver driver = (Driver) m.invoke(null);
return driver;
}
} }
...@@ -9,15 +9,19 @@ package org.h2.test.unit; ...@@ -9,15 +9,19 @@ package org.h2.test.unit;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.Date; import java.sql.Date;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time; import java.sql.Time;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.UUID; import java.util.UUID;
import org.h2.test.TestBase; import org.h2.test.TestBase;
import org.h2.tools.SimpleResultSet;
import org.h2.value.DataType; import org.h2.value.DataType;
import org.h2.value.Value; import org.h2.value.Value;
import org.h2.value.ValueDouble; import org.h2.value.ValueDouble;
import org.h2.value.ValueFloat; import org.h2.value.ValueFloat;
import org.h2.value.ValueResultSet;
import org.h2.value.ValueUuid; import org.h2.value.ValueUuid;
import org.hsqldb.types.Types;
/** /**
* Tests features of values. * Tests features of values.
...@@ -33,13 +37,36 @@ public class TestValue extends TestBase { ...@@ -33,13 +37,36 @@ public class TestValue extends TestBase {
TestBase.createCaller().init().test(); TestBase.createCaller().init().test();
} }
public void test() { public void test() throws SQLException {
testValueResultSet();
testDataType(); testDataType();
testUUID(); testUUID();
testDouble(false); testDouble(false);
testDouble(true); testDouble(true);
} }
private void testValueResultSet() throws SQLException {
SimpleResultSet rs = new SimpleResultSet();
rs.addColumn("ID", Types.INTEGER, 0, 0);
rs.addColumn("NAME", Types.VARCHAR, 255, 0);
rs.addRow(1, "Hello");
rs.addRow(2, "World");
rs.addRow(3, "Peace");
ValueResultSet v = ValueResultSet.getCopy(rs, 2);
rs.beforeFirst();
ResultSet rs2 = v.getResultSet();
rs2.next();
rs.next();
assertEquals(rs.getInt(1), rs2.getInt(1));
assertEquals(rs.getString(2), rs2.getString(2));
rs2.next();
rs.next();
assertEquals(rs.getInt(1), rs2.getInt(1));
assertEquals(rs.getString(2), rs2.getString(2));
assertFalse(rs2.next());
assertTrue(rs.next());
}
private void testDataType() { private void testDataType() {
testDataType(Value.NULL, null); testDataType(Value.NULL, null);
testDataType(Value.NULL, Void.class); testDataType(Value.NULL, Void.class);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论