testtools.java

来自「非常棒的java数据库」· Java 代码 · 共 439 行 · 第 1/2 页

JAVA
439
字号
/*
 * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
 * (license2)
 * Initial Developer: H2 Group
 */
package org.h2.test.unit;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintStream;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Random;

import org.h2.engine.Constants;
import org.h2.store.FileLister;
import org.h2.test.TestBase;
import org.h2.test.trace.Player;
import org.h2.tools.Backup;
import org.h2.tools.ChangePassword;
import org.h2.tools.ConvertTraceFile;
import org.h2.tools.DeleteDbFiles;
import org.h2.tools.Recover;
import org.h2.tools.Restore;
import org.h2.tools.RunScript;
import org.h2.tools.Script;
import org.h2.tools.Server;
import org.h2.util.FileUtils;
import org.h2.util.Resources;

/**
 * Tests the database tools.
 */
public class TestTools extends TestBase {

    private Server server;

    public void test() throws Exception {
        if (config.networked) {
            return;
        }
        deleteDb("utils");
        testScriptRunscriptLob();
        deleteDb("utils");
        testServerMain();
        testRemove();
        testConvertTraceFile();
        testManagementDb();
        testResourceGenerator();
        testChangePassword();
        testServer();
        testScriptRunscript();
        testBackupRestore();
        testRecover();
    }

    private void testServerMain() throws Exception {
        String result;
        Connection conn;
        org.h2.Driver.load();

        result = runServer(new String[]{"-?"}, 1);
        check(result.indexOf("[options]") >= 0);
        check(result.indexOf("Unknown option") < 0);

        result = runServer(new String[]{"-xy"}, 1);
        check(result.indexOf("[options]") >= 0);
        check(result.indexOf("Unknown option") >= 0);
        result = runServer(new String[]{"-tcp", "-tcpAllowOthers", "false", "-tcpPort", "9001", "-tcpPassword", "abc"}, 0);
        check(result.indexOf("tcp://") >= 0);
        check(result.indexOf(":9001") >= 0);
        check(result.indexOf("only local") >= 0);
        check(result.indexOf("[options]") < 0);
        conn = DriverManager.getConnection("jdbc:h2:tcp://localhost:9001/mem:", "sa", "sa");
        conn.close();
        result = runServer(new String[]{"-tcpShutdown", "tcp://localhost:9001", "-tcpPassword", "abc", "-tcpShutdownForce", "true"}, 0);
        check(result.indexOf("Shutting down") >= 0);

        result = runServer(new String[]{"-tcp", "-tcpAllowOthers", "true", "-tcpPort", "9001", "-tcpPassword", "abcdef", "-tcpSSL", "true"}, 0);
        check(result.indexOf("ssl://") >= 0);
        check(result.indexOf(":9001") >= 0);
        check(result.indexOf("others can") >= 0);
        check(result.indexOf("[options]") < 0);
        conn = DriverManager.getConnection("jdbc:h2:ssl://localhost:9001/mem:", "sa", "sa");
        conn.close();

        result = runServer(new String[]{"-tcpShutdown", "ssl://localhost:9001", "-tcpPassword", "abcdef", "-tcpShutdownForce", "false"}, 0);
        check(result.indexOf("Shutting down") >= 0);
        try {
            conn = DriverManager.getConnection("jdbc:h2:ssl://localhost:9001/mem:", "sa", "sa");
            error();
        } catch (SQLException e) {
            checkNotGeneralException(e);
        }

        result = runServer(new String[]{
                "-web", "-webPort", "9002", "-webAllowOthers", "true", "-webSSL", "true",
                "-pg", "-pgAllowOthers", "true", "-pgPort", "9003",
                "-ftp", "-ftpPort", "9004", "-ftpDir", ".", "-ftpRead", "guest", "-ftpWrite", "sa", "-ftpWritePassword", "sa", "-ftpTask", "true",
                "-tcp", "-tcpAllowOthers", "true", "-tcpPort", "9005", "-tcpPassword", "abc"}, 0);
        Server stop = server;
        check(result.indexOf("https://") >= 0);
        check(result.indexOf(":9002") >= 0);
        check(result.indexOf("pg://") >= 0);
        check(result.indexOf(":9003") >= 0);
        check(result.indexOf("others can") >= 0);
        check(result.indexOf("only local") < 0);
        check(result.indexOf("ftp://") >= 0);
        check(result.indexOf(":9004") >= 0);
        check(result.indexOf("tcp://") >= 0);
        check(result.indexOf(":9005") >= 0);

        result = runServer(new String[]{"-tcpShutdown", "tcp://localhost:9005", "-tcpPassword", "abc", "-tcpShutdownForce", "true"}, 0);
        check(result.indexOf("Shutting down") >= 0);
        stop.shutdown();
        try {
            conn = DriverManager.getConnection("jdbc:h2:tcp://localhost:9005/mem:", "sa", "sa");
            error();
        } catch (SQLException e) {
            checkNotGeneralException(e);
        }
    }

    private String runServer(String[] args, int exitCode) throws Exception {
        ByteArrayOutputStream buff = new ByteArrayOutputStream();
        PrintStream ps = new PrintStream(buff);
        server = new Server();
        int gotCode = server.run(args, ps);
        check(exitCode, gotCode);
        ps.flush();
        String s = new String(buff.toByteArray());
        return s;
    }

    private void testConvertTraceFile() throws Exception {
        deleteDb("toolsConvertTraceFile");
        Class.forName("org.h2.Driver");
        String url = "jdbc:h2:" + baseDir + "/toolsConvertTraceFile";
        Connection conn = DriverManager.getConnection(url + ";TRACE_LEVEL_FILE=3", "sa", "sa");
        Statement stat = conn.createStatement();
        stat.execute("create table test(id int primary key, name varchar, amount decimal)");
        PreparedStatement prep = conn.prepareStatement("insert into test values(?, ?, ?)");
        prep.setInt(1, 1);
        prep.setString(2, "Hello");
        prep.setBigDecimal(3, new BigDecimal("10.20"));
        prep.executeUpdate();
        stat.execute("create table test2(id int primary key, a real, b double, c bigint, " +
                "d smallint, e boolean, f binary, g date, h time, i timestamp)");
        prep = conn.prepareStatement("insert into test2 values(1, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        prep.setFloat(1, Float.MIN_VALUE);
        prep.setDouble(2, Double.MIN_VALUE);
        prep.setLong(3, Long.MIN_VALUE);
        prep.setShort(4, Short.MIN_VALUE);
        prep.setBoolean(5, false);
        prep.setBytes(6, new byte[] { (byte) 10, (byte) 20 });
        prep.setDate(7, java.sql.Date.valueOf("2007-12-31"));
        prep.setTime(8, java.sql.Time.valueOf("23:59:59"));
        prep.setTimestamp(9, java.sql.Timestamp.valueOf("2007-12-31 23:59:59"));
        prep.execute();
        conn.close();

        ConvertTraceFile.main(new String[]{"-traceFile", baseDir + "/toolsConvertTraceFile.trace.db", "-javaClass", baseDir + "/Test", "-script", baseDir + "/test.sql"});
        new File(baseDir + "/Test.java").delete();

        File trace = new File(baseDir + "/toolsConvertTraceFile.trace.db");
        check(trace.exists());
        File newTrace = new File(baseDir + "/test.trace.db");
        newTrace.delete();
        check(trace.renameTo(newTrace));
        deleteDb("toolsConvertTraceFile");
        Player.main(new String[]{baseDir + "/test.trace.db"});
        testTraceFile(url);

        deleteDb("toolsConvertTraceFile");
        RunScript.main(new String[]{"-url", url, "-user", "sa", "-script", baseDir + "/test.sql"});
        testTraceFile(url);
    }

    private void testTraceFile(String url) throws Exception {
        Connection conn;
        Recover.main(new String[]{"-removePassword", "-log", "false", "-dir", baseDir, "-db", "toolsConvertTraceFile"});
        conn = DriverManager.getConnection(url, "sa", "");
        Statement stat = conn.createStatement();
        ResultSet rs;
        rs = stat.executeQuery("select * from test");
        rs.next();
        check(1, rs.getInt(1));
        check("Hello", rs.getString(2));
        check("10.20", rs.getBigDecimal(3).toString());
        checkFalse(rs.next());
        rs = stat.executeQuery("select * from test2");
        rs.next();
        check(Float.MIN_VALUE, rs.getFloat("a"));
        check(Double.MIN_VALUE, rs.getDouble("b"));
        check(Long.MIN_VALUE, rs.getLong("c"));
        check(Short.MIN_VALUE, rs.getShort("d"));
        check(!rs.getBoolean("e"));
        check(new byte[] { (byte) 10, (byte) 20 }, rs.getBytes("f"));
        check("2007-12-31", rs.getString("g"));
        check("23:59:59", rs.getString("h"));
        check("2007-12-31 23:59:59.0", rs.getString("i"));
        checkFalse(rs.next());
        conn.close();
    }

    private void testRemove() throws Exception {
        deleteDb("toolsRemove");
        Class.forName("org.h2.Driver");
        String url = "jdbc:h2:" + baseDir + "/toolsRemove";
        Connection conn = DriverManager.getConnection(url, "sa", "sa");
        Statement stat = conn.createStatement();
        stat.execute("create table test(id int primary key, name varchar)");
        stat.execute("insert into test values(1, 'Hello')");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?