Package com.asakusafw.bulkloader.exporter

Source Code of com.asakusafw.bulkloader.exporter.TempTableDeleteTest

/**
* Copyright 2011-2014 Asakusa Framework Team.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.asakusafw.bulkloader.exporter;


import static org.junit.Assert.*;

import java.io.File;
import java.sql.Connection;
import java.util.Arrays;
import java.util.List;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.asakusafw.bulkloader.bean.ExportTempTableBean;
import com.asakusafw.bulkloader.common.BulkLoaderInitializer;
import com.asakusafw.bulkloader.common.DBConnection;
import com.asakusafw.bulkloader.common.ExportTempTableStatus;
import com.asakusafw.bulkloader.exception.BulkLoaderSystemException;
import com.asakusafw.bulkloader.testutil.UnitTestUtil;
import com.asakusafw.testtools.TestUtils;
import com.asakusafw.testtools.inspect.Cause;

/**
* TempTableDeleteのテストクラス
* @author yuta.shirai
*
*/
public class TempTableDeleteTest {
    /** Importerで読み込むプロパティファイル */
    private static List<String> propertys = Arrays.asList(new String[]{"bulkloader-conf-db.properties"});
    /** ジョブフローID */
    private static String jobflowId = "JOB_FLOW01";
    /** ジョブフロー実行ID */
    private static String executionId = "JOB_FLOW01-001";

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        UnitTestUtil.setUpBeforeClass();
        UnitTestUtil.setUpEnv();
        BulkLoaderInitializer.initDBServer(jobflowId, executionId, propertys, "target1");
        UnitTestUtil.setUpDB();
    }
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        UnitTestUtil.tearDownDB();
        UnitTestUtil.tearDownAfterClass();
    }

    @Before
    public void setUp() throws Exception {
        BulkLoaderInitializer.initDBServer(jobflowId, executionId, propertys, "target1");
        UnitTestUtil.startUp();
    }

    @After
    public void tearDown() throws Exception {
        UnitTestUtil.tearDown();
    }

    /**
     *
     * <p>
     * deleteのテストケース
     * 正常系:テンポラリテーブルと、エクスポートテンポラリ管理テーブルのレコードの削除に成功するケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTest01() throws Exception {
        // 入力値の生成
        ExportTempTableBean[] tempBean = new ExportTempTableBean[2];
        tempBean[0] = new ExportTempTableBean();
        tempBean[0].setJobflowSid("11");
        tempBean[0].setExportTableName("table1");
        tempBean[0].setTemporaryTableName("teble1_tmp");
        tempBean[0].setTempTableStatus(ExportTempTableStatus.find("1"));
        tempBean[1] = new ExportTempTableBean();
        tempBean[1].setJobflowSid("11");
        tempBean[1].setExportTableName("table2");
        tempBean[1].setTemporaryTableName("table2_temp");
        tempBean[1].setTempTableStatus(ExportTempTableStatus.find("setTempTableStatus"));

        // 処理の実行
        TempTableDelete delete = new TempTableDelete() {
            /**
             * @see com.asakusafw.bulkloader.exporter.TempTableDelete#deleteTempInfoRecord(java.lang.String, java.lang.String, java.sql.Connection)
             */
            @Override
            public void deleteTempInfoRecord(String jobflowSid,
                    String tableName, boolean copyNotEnd, Connection conn) throws BulkLoaderSystemException {
            }

            /**
             * @see com.asakusafw.bulkloader.exporter.TempTableDelete#deleteTempTable(java.lang.String, java.sql.Connection)
             */
            @Override
            public void deleteTempTable(String exportTempName, String duplicateFlagTableName, boolean copyNotEnd, Connection conn)
                    throws BulkLoaderSystemException {
            }
        };
        boolean resutlt = delete.delete(Arrays.asList(tempBean), true);

        // 結果の検証
        assertTrue(resutlt);
    }
    /**
     *
     * <p>
     * deleteのテストケース
     * 正常系:削除するテンポラリテーブルが存在しないケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTest02() throws Exception {
        // 入力値の生成
        ExportTempTableBean[] tempBean = new ExportTempTableBean[0];

        // 処理の実行
        TempTableDelete delete = new TempTableDelete() {
            /**
             * @see com.asakusafw.bulkloader.exporter.TempTableDelete#deleteTempInfoRecord(java.lang.String, java.lang.String, java.sql.Connection)
             */
            @Override
            public void deleteTempInfoRecord(String jobflowSid,
                    String tableName, boolean copyNotEnd, Connection conn) throws BulkLoaderSystemException {
            }

            /**
             * @see com.asakusafw.bulkloader.exporter.TempTableDelete#deleteTempTable(java.lang.String, java.sql.Connection)
             */
            @Override
            public void deleteTempTable(String exportTempName, String duplicateFlagTableName, boolean copyNotEnd, Connection conn)
                    throws BulkLoaderSystemException {
            }
        };
        boolean resutlt =delete.delete(Arrays.asList(tempBean), true);

        // 結果の検証
        assertTrue(resutlt);
    }
    /**
     *
     * <p>
     * deleteのテストケース
     * 異常系:テンポラリテーブルの削除に失敗するケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTest03() throws Exception {
        // 入力値の生成
        ExportTempTableBean[] tempBean = new ExportTempTableBean[2];
        tempBean[0] = new ExportTempTableBean();
        tempBean[0].setJobflowSid("11");
        tempBean[0].setExportTableName("table1");
        tempBean[0].setTemporaryTableName("teble1_tmp");
        tempBean[0].setTempTableStatus(ExportTempTableStatus.find("1"));
        tempBean[1] = new ExportTempTableBean();
        tempBean[1].setJobflowSid("11");
        tempBean[1].setExportTableName("table2");
        tempBean[1].setTemporaryTableName("table2_temp");
        tempBean[1].setTempTableStatus(ExportTempTableStatus.find("1"));

        // 処理の実行
        TempTableDelete delete = new TempTableDelete() {
            @Override
            public void deleteTempInfoRecord(String jobflowSid,
                    String tableName, boolean copyNotEnd, Connection conn) throws BulkLoaderSystemException {
            }

            @Override
            public void deleteTempTable(String exportTempName, String duplicateFlagTableName, boolean copyNotEnd, Connection conn)
                    throws BulkLoaderSystemException {
                throw new BulkLoaderSystemException(this.getClass(), "TG-EXPORTER-01001");
            }
        };
        boolean resutlt =delete.delete(Arrays.asList(tempBean), true);

        // 結果の検証
        assertFalse(resutlt);
    }
    /**
     *
     * <p>
     * deleteのテストケース
     * 異常系:エクスポートテンポラリ管理テーブルのレコードの削除に失敗するケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTest04() throws Exception {
        // 入力値の生成
        ExportTempTableBean[] tempBean = new ExportTempTableBean[2];
        tempBean[0] = new ExportTempTableBean();
        tempBean[0].setJobflowSid("11");
        tempBean[0].setExportTableName("table1");
        tempBean[0].setTemporaryTableName("teble1_tmp");
        tempBean[0].setTempTableStatus(ExportTempTableStatus.find("1"));
        tempBean[1] = new ExportTempTableBean();
        tempBean[1].setJobflowSid("11");
        tempBean[1].setExportTableName("table2");
        tempBean[1].setTemporaryTableName("table2_temp");
        tempBean[1].setTempTableStatus(ExportTempTableStatus.find("1"));

        // 処理の実行
        TempTableDelete delete = new TempTableDelete() {
            @Override
            public void deleteTempInfoRecord(String jobflowSid,
                    String tableName, boolean copyNotEnd, Connection conn) throws BulkLoaderSystemException {
                throw new BulkLoaderSystemException(this.getClass(), "TG-EXPORTER-01001");
            }
            @Override
            public void deleteTempTable(String exportTempName, String duplicateFlagTableName, boolean copyNotEnd, Connection conn)
                    throws BulkLoaderSystemException {
            }
        };
        boolean resutlt =delete.delete(Arrays.asList(tempBean), true);

        // 結果の検証
        assertFalse(resutlt);
    }

    /**
     *
     * <p>
     * deleteTempInfoRecordのテストケース
     * 正常系:エクスポートテンポラリ管理テーブルのレコードを削除するケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTempInfoRecordTest01() throws Exception {
        // テストデータを指定
        File testDataDir = new File("src/test/data/exporter/TempTableDeleteTest/deleteTempInfoRecordTest01");
        TestUtils util = new TestUtils(testDataDir);
        // テストデータをセット
        util.storeToDatabase(false);

        // 処理の実行
        TempTableDelete delete = new TempTableDelete();
        Connection conn =DBConnection.getConnection();
        try {
            delete.deleteTempInfoRecord("1", "Table2", true, conn);
            DBConnection.commit(conn);
        } catch (Exception e) {
            DBConnection.rollback(conn);
            e.printStackTrace();
            fail();
        } finally {
            DBConnection.closeConn(conn);
        }

        // DBの結果を検証
        util.loadFromDatabase();
        if (!util.inspect()) {
            for (Cause cause : util.getCauses()) {
                System.out.println(cause.getMessage());
            }
            fail(util.getCauseMessage());
        }
    }
    /**
     *
     * <p>
     * deleteTempInfoRecordのテストケース
     * 正常系:エクスポートテンポラリ管理テーブルのレコードが存在しないケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTempInfoRecordTest02() throws Exception {
        // テストデータを指定
        File testDataDir = new File("src/test/data/exporter/TempTableDeleteTest/deleteTempInfoRecordTest02");
        TestUtils util = new TestUtils(testDataDir);
        // テストデータをセット
        util.storeToDatabase(false);

        // 処理の実行
        TempTableDelete delete = new TempTableDelete();
        Connection conn =DBConnection.getConnection();
        try {
            delete.deleteTempInfoRecord("11", "Table2", true, conn);
            DBConnection.commit(conn);
        } catch (Exception e) {
            DBConnection.rollback(conn);
            e.printStackTrace();
            fail();
        } finally {
            DBConnection.closeConn(conn);
        }

        // DBの結果を検証
        util.loadFromDatabase();
        if (!util.inspect()) {
            for (Cause cause : util.getCauses()) {
                System.out.println(cause.getMessage());
            }
            fail(util.getCauseMessage());
        }
    }
    /**
     *
     * <p>
     * deleteTempInfoRecordのテストケース
     * 正常系:コピーが完了していないレコードを処理しないケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTempInfoRecordTest03() throws Exception {
        // テストデータを指定
        File testDataDir = new File("src/test/data/exporter/TempTableDeleteTest/deleteTempInfoRecordTest03");
        TestUtils util = new TestUtils(testDataDir);
        // テストデータをセット
        util.storeToDatabase(false);

        // 処理の実行
        TempTableDelete delete = new TempTableDelete();
        Connection conn =DBConnection.getConnection();
        try {
            delete.deleteTempInfoRecord("11", "Table2", false, conn);
            DBConnection.commit(conn);
        } catch (Exception e) {
            DBConnection.rollback(conn);
            e.printStackTrace();
            fail();
        } finally {
            DBConnection.closeConn(conn);
        }

        // DBの結果を検証
        util.loadFromDatabase();
        if (!util.inspect()) {
            for (Cause cause : util.getCauses()) {
                System.out.println(cause.getMessage());
            }
            fail(util.getCauseMessage());
        }
    }
    /**
     *
     * <p>
     * deleteTempTableのテストケース
     * 正常系:テンポラリテーブルを削除するケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTempTableTest01() throws Exception {
        // テンポラリテーブルを作成
        String tempTable = "EXPORT_TEMP_TEST_01";
        String dropSql = "DROP TABLE IF EXISTS EXPORT_TEMP_TEST_01";
        String createSql = "CREATE TABLE EXPORT_TEMP_TEST_01 (TEXTDATA1 VARCHAR(45) NOT NULL ,INTDATA1 INT NULL,PRIMARY KEY (TEXTDATA1)) ENGINE=InnoDB;";
        UnitTestUtil.executeUpdate(dropSql);
        UnitTestUtil.executeUpdate(createSql);

        String dropDup1Sql = "DROP TABLE IF EXISTS EXPORT_TEMP_TEST_01_DF";
        StringBuilder dup1Sql = new StringBuilder();
        dup1Sql.append("CREATE  TABLE `EXPORT_TEMP_TEST_01_DF` (");
        dup1Sql.append("  `TEMP_SID` BIGINT,");
        dup1Sql.append("  PRIMARY KEY (`TEMP_SID`) ) ENGINE=InnoDB");
        UnitTestUtil.executeUpdate(dropDup1Sql);
        UnitTestUtil.executeUpdate(dup1Sql.toString());

        // 処理の実行
        TempTableDelete delete = new TempTableDelete();
        Connection conn =DBConnection.getConnection();
        try {
            delete.deleteTempTable(tempTable, "EXPORT_TEMP_TEST_01_DF", true, conn);
        } catch (Exception e) {
            e.printStackTrace();
            fail();
        } finally {
            DBConnection.closeConn(conn);
        }

        // 結果を検証
        assertFalse(UnitTestUtil.isExistTable(tempTable));
        assertFalse(UnitTestUtil.isExistTable("EXPORT_TEMP_TEST_01_DF"));

        // テーブルを削除
        UnitTestUtil.executeUpdate(dropSql);
        UnitTestUtil.executeUpdate(dropDup1Sql);
    }
    /**
     *
     * <p>
     * deleteTempTableのテストケース
     * 正常系:テンポラリテーブルが存在しないケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTempTableTest02() throws Exception {
        String tempTable = "EXPORT_TEMP_TEST_01";
        String dropSql = "DROP TABLE IF EXISTS EXPORT_TEMP_TEST_01";
        String dropDup1Sql = "DROP TABLE IF EXISTS EXPORT_TEMP_TEST_01_DF";
        UnitTestUtil.executeUpdate(dropSql);

        // 処理の実行
        TempTableDelete delete = new TempTableDelete();
        Connection conn =DBConnection.getConnection();
        try {
            delete.deleteTempTable(tempTable, "EXPORT_TEMP_TEST_01_DF", true, conn);
        } catch (Exception e) {
            e.printStackTrace();
            fail();
        } finally {
            DBConnection.closeConn(conn);
        }

        // 結果を検証
        assertFalse(UnitTestUtil.isExistTable(tempTable));
        assertFalse(UnitTestUtil.isExistTable("EXPORT_TEMP_TEST_01_DF"));

        // テーブルを削除
        UnitTestUtil.executeUpdate(dropSql);
        UnitTestUtil.executeUpdate(dropDup1Sql);
    }
    /**
     *
     * <p>
     * deleteTempTableのテストケース
     * 正常系:コピーが完了していないテーブルを処理しないケース
     *
     * </p>
     *
     * @throws Exception
     */
    @Test
    public void deleteTempTableTest03() throws Exception {
        // テストデータを指定
        File testDataDir = new File("src/test/data/exporter/TempTableDeleteTest/deleteTempTableTest03");
        TestUtils util = new TestUtils(testDataDir);
        // テストデータをセット
        util.storeToDatabase(false);

        // テンポラリテーブルを作成
        String tempTable = "EXPORT_TEMP_TEST_01";
        String dropSql = "DROP TABLE IF EXISTS EXPORT_TEMP_TEST_01";
        String createSql = "CREATE TABLE EXPORT_TEMP_TEST_01 (TEXTDATA1 VARCHAR(45) NOT NULL ,INTDATA1 INT NULL,PRIMARY KEY (TEXTDATA1)) ENGINE=InnoDB;";
        UnitTestUtil.executeUpdate(dropSql);
        UnitTestUtil.executeUpdate(createSql);

        // 処理の実行
        TempTableDelete delete = new TempTableDelete();
        Connection conn =DBConnection.getConnection();
        try {
            delete.deleteTempTable(tempTable, "", false, conn);
        } catch (Exception e) {
            e.printStackTrace();
            fail();
        } finally {
            DBConnection.closeConn(conn);
        }

        // 結果を検証
        assertTrue(UnitTestUtil.isExistTable(tempTable));

        // テーブルを削除
        UnitTestUtil.executeUpdate(dropSql);
    }
}
TOP

Related Classes of com.asakusafw.bulkloader.exporter.TempTableDeleteTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.