Unverified 提交 eaa84649 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov 提交者: GitHub

Merge pull request #1206 from katzyn/tests

Forbid reconnects in non-regular modes in TestScript
......@@ -43,6 +43,8 @@ import org.h2.engine.Mode;
import org.h2.engine.SessionInterface;
import org.h2.engine.SessionRemote;
import org.h2.engine.SysProperties;
import org.h2.engine.Mode.ModeEnum;
import org.h2.engine.Session;
import org.h2.message.DbException;
import org.h2.message.TraceObject;
import org.h2.result.ResultInterface;
......@@ -2121,4 +2123,12 @@ public class JdbcConnection extends TraceObject
return mode;
}
/**
* INTERNAL
*/
public boolean isRegularMode() throws SQLException {
// Clear cached mode if any (required by tests)
mode = null;
return getMode().getEnum() == ModeEnum.REGULAR;
}
}
......@@ -26,6 +26,7 @@ import java.util.Random;
import org.h2.api.ErrorCode;
import org.h2.engine.SysProperties;
import org.h2.jdbc.JdbcConnection;
import org.h2.test.TestAll;
import org.h2.test.TestBase;
import org.h2.util.StringUtils;
......@@ -194,7 +195,7 @@ public class TestScript extends TestBase {
stat = conn.createStatement();
out = new PrintStream(new FileOutputStream(outFile));
errors = new StringBuilder();
testFile(BASE_DIR + scriptFileName);
testFile(BASE_DIR + scriptFileName, !scriptFileName.equals("functions/system/set.sql"));
conn.close();
out.close();
if (errors.length() > 0) {
......@@ -251,7 +252,7 @@ public class TestScript extends TestBase {
}
}
private void testFile(String inFile) throws Exception {
private void testFile(String inFile, boolean allowReconnect) throws Exception {
InputStream is = getClass().getClassLoader().getResourceAsStream(inFile);
if (is == null) {
throw new IOException("could not find " + inFile);
......@@ -273,7 +274,7 @@ public class TestScript extends TestBase {
buff.append(sql, 0, sql.length() - 1);
sql = buff.toString();
buff = new StringBuilder();
process(sql);
process(sql, allowReconnect);
} else {
write(sql);
buff.append(sql);
......@@ -296,9 +297,9 @@ public class TestScript extends TestBase {
return false;
}
private void process(String sql) throws Exception {
if (reconnectOften) {
if (!containsTempTables()) {
private void process(String sql, boolean allowReconnect) throws Exception {
if (allowReconnect && reconnectOften) {
if (!containsTempTables() && ((JdbcConnection) conn).isRegularMode() && conn.getSchema().equals("PUBLIC")) {
boolean autocommit = conn.getAutoCommit();
if (autocommit && random.nextInt(10) < 1) {
// reconnect 10% of the time
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论