Package jp.co.ntt.oss

Source Code of jp.co.ntt.oss.IncrementalReaderTest

package jp.co.ntt.oss;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.Hashtable;

import jp.co.ntt.oss.data.DatabaseResource;
import jp.co.ntt.oss.mapper.IntegerDataMapper;
import jp.co.ntt.oss.mapper.MappingData;
import jp.co.ntt.oss.mapper.StringDataMapper;
import jp.co.ntt.oss.mapper.TimestampDataMapper;
import jp.co.ntt.oss.utility.PrivateAccessor;

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

public class IncrementalReaderTest {
  private static DatabaseResource masterDB = null;
  private static Connection masterConn = null;

  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
    masterDB = new DatabaseResource("postgres1");
    masterConn = masterDB.getConnection();
  }

  @AfterClass
  public static void tearDownAfterClass() throws Exception {
    masterConn.close();
    masterDB.stop();
  }

  @Test
  public final void testIncrementalReader() {
    IncrementalReader reader;
    String actual;

    // argument error
    try {
      new IncrementalReader(null,
          "SELECT '1', '2', '3', val1, * FROM inc", 1);
      fail("no exception");
    } catch (SQLException e) {
      fail("other exception thrown");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
    try {
      new IncrementalReader(null,
          "SELECT '1', '2', '3', val1, * FROM inc", 1);
      fail("no exception");
    } catch (SQLException e) {
      fail("other exception thrown");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
    try {
      new IncrementalReader(masterConn,
          "SELECT '1', '2', '3', val1, * FROM inc", 0);
      fail("no exception");
    } catch (SQLException e) {
      fail("other exception thrown");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }

    // SQLException
    try {
      new IncrementalReader(masterConn, "aaa", 1);
      fail("no exception");
    } catch (SyncDatabaseException e) {
      fail("other exception thrown");
    } catch (SQLException e) {
      String expected = "ERROR: syntax error at or near \"aaa\"\n"
          + "  Position: 1";
      actual = e.getMessage();
      assertEquals(expected, actual);
    }

    // normal case
    try {
      reader = new IncrementalReader(masterConn,
          "SELECT '1', '2', '3', val1, * FROM foo", 1);
      assertNotNull(reader);

      Statement stmt = (Statement) PrivateAccessor.getPrivateField(
          reader, "stmt");
      assertNotNull(stmt);
      assertEquals(100, stmt.getFetchSize());

      ResultSet rset = (ResultSet) PrivateAccessor.getPrivateField(
          reader, "rset");
      assertNotNull(rset);
      assertTrue(rset.next());

      Integer pkCount = (Integer) PrivateAccessor.getPrivateField(reader,
          "pkCount");
      assertNotNull(pkCount);
      assertEquals(1, pkCount.intValue());

      MappingData columnMapping = ((MappingData) PrivateAccessor
          .getPrivateField(reader, "columnMapping"));
      assertNotNull(columnMapping);
      assertEquals(4, columnMapping.getColumnCount());
      assertEquals(Types.INTEGER, columnMapping.getColumnType(0));
      assertEquals(Types.INTEGER, columnMapping.getColumnType(1));
      assertEquals(Types.VARCHAR, columnMapping.getColumnType(2));
      assertEquals(Types.TIMESTAMP, columnMapping.getColumnType(3));
      assertEquals("int4", columnMapping.getColumnTypeName(0));
      assertEquals("int4", columnMapping.getColumnTypeName(1));
      assertEquals("text", columnMapping.getColumnTypeName(2));
      assertEquals("timestamp", columnMapping.getColumnTypeName(3));

      reader.close();
    } catch (Exception e) {
      fail("exception thrown");
    }
  }

  @Test
  public final void testClose() {
    try {
      IncrementalReader reader = new IncrementalReader(masterConn,
          "SELECT '1', '2', '3', val1, * FROM foo", 1);

      ResultSet rset = (ResultSet) PrivateAccessor.getPrivateField(
          reader, "rset");
      assertFalse(rset.isClosed());

      reader.close();

      assertTrue(rset.isClosed());
    } catch (Exception e) {
      fail("exception thrown");
    }
  }

  @Test
  public final void testGetNextColumns() {
    try {
      IncrementalReader reader = new IncrementalReader(masterConn,
          "SELECT '1', '2', '3', val1, * FROM foo", 1);
      MappingData columnMapping = reader.getColumnMapping();
      columnMapping.setDataMapper(0, new IntegerDataMapper());
      columnMapping.setDataMapper(1, new IntegerDataMapper());
      columnMapping.setDataMapper(2, new StringDataMapper());
      columnMapping.setDataMapper(3, new TimestampDataMapper());

      Object[] columns = reader.getNextColumns();
      assertNotNull(columns);
      assertEquals(7, columns.length);
      assertEquals(Long.valueOf(1), columns[0]);
      assertEquals(Long.valueOf(2), columns[1]);
      assertEquals(Long.valueOf(3), columns[2]);
      assertEquals(new Integer(1), columns[3]);
      assertEquals(new Integer(1), columns[4]);
      assertEquals("A", columns[5]);
      assertEquals(Timestamp.valueOf("2010-01-01 00:00:01"), columns[6]);

      reader.getNextColumns();
      reader.getNextColumns();
      reader.getNextColumns();
      reader.getNextColumns();
      reader.getNextColumns();

      columns = reader.getNextColumns();
      assertNotNull(columns);
      assertEquals(7, columns.length);
      assertEquals(Long.valueOf((short) 1), columns[0]);
      assertEquals(Long.valueOf((short) 2), columns[1]);
      assertEquals(Long.valueOf((short) 3), columns[2]);
      assertEquals(Integer.valueOf(7), columns[3]);
      assertEquals(Integer.valueOf(7), columns[4]);
      assertEquals("G", columns[5]);
      assertEquals(Timestamp.valueOf("2010-01-01 00:00:07"), columns[6]);

      columns = reader.getNextColumns();
      assertNull(columns);

      reader.close();
    } catch (Exception e) {
      fail("exception thrown");
    }
  }

  @Test
  public final void testGetColumnCount() {
    try {
      IncrementalReader reader = new IncrementalReader(masterConn,
          "SELECT '1', '2', '3', val1, * FROM foo", 1);

      int count = reader.getColumnCount();
      assertEquals(4, count);

      reader.close();
    } catch (Exception e) {
      fail("exception thrown");
    }
  }

  @Test
  public final void testGetColumnMapping() {
    MappingData columnMapping = null;
    try {
      IncrementalReader reader = new IncrementalReader(masterConn,
          "SELECT '1', '2', '3', val1, * FROM foo", 1);

      columnMapping = reader.getColumnMapping();

      assertEquals(4, columnMapping.getColumnCount());
      assertEquals(Types.INTEGER, columnMapping.getColumnType(0));
      assertEquals(Types.INTEGER, columnMapping.getColumnType(1));
      assertEquals(Types.VARCHAR, columnMapping.getColumnType(2));
      assertEquals(Types.TIMESTAMP, columnMapping.getColumnType(3));
      assertEquals("int4", columnMapping.getColumnTypeName(0));
      assertEquals("int4", columnMapping.getColumnTypeName(1));
      assertEquals("text", columnMapping.getColumnTypeName(2));
      assertEquals("timestamp", columnMapping.getColumnTypeName(3));
      assertNotNull(columnMapping.getDataMappers());
      assertEquals(4, columnMapping.getDataMappers().length);
      assertNull(columnMapping.getDataMapper(0));

      reader.close();
    } catch (Exception e) {
      e.printStackTrace();
      fail("exception thrown");
    }
    try {
      columnMapping.getColumnType(4);
      fail("no exception");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
    try {
      columnMapping.getColumnTypeName(4);
      fail("no exception");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
    try {
      columnMapping.getDataMapper(4);
      fail("no exception");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
  }

  @Test
  public final void testGetPKCount() {
    try {
      IncrementalReader reader = new IncrementalReader(masterConn,
          "SELECT '1', '2', '3', val1, * FROM foo", 1);

      int count = reader.getPKCount();
      assertEquals(1, count);

      reader.close();
    } catch (Exception e) {
      fail("exception thrown");
    }
  }

  @Test
  public final void testGetIncrementalQuery() {
    Hashtable<Short, String> PKNames = new Hashtable<Short, String>();
    PKNames.put(new Short((short) 1), "PK1");

    String query = null;

    // argument error
    try {
      IncrementalReader
          .getIncrementalQuery(null, "[query]", PKNames, 999);
      fail("no exception");
    } catch (SQLException e) {
      fail("other exception thrown");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
    try {
      IncrementalReader.getIncrementalQuery("mlogName", null, PKNames,
          999);
      fail("no exception");
    } catch (SQLException e) {
      fail("other exception thrown");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
    try {
      IncrementalReader.getIncrementalQuery("mlogName", "[query]", null,
          999);
      fail("no exception");
    } catch (SQLException e) {
      fail("other exception thrown");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
    try {
      IncrementalReader.getIncrementalQuery("mlogName", "[query]",
          new Hashtable<Short, String>(), 999);
      fail("no exception");
    } catch (SQLException e) {
      fail("other exception thrown");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }
    try {
      IncrementalReader.getIncrementalQuery("mlogName", "[query]",
          PKNames, -1);
      fail("no exception");
    } catch (SQLException e) {
      fail("other exception thrown");
    } catch (SyncDatabaseException e) {
      assertEquals("argument error", e.getMessage());
    }

    // normal case : ont column pk
    try {
      query = IncrementalReader.getIncrementalQuery("mlogName",
          "[query]", PKNames, 999);
      assertEquals(
          "SELECT m.d_cnt, m.i_cnt, m.u_cnt, m.PK1, d.* FROM ( "
              + "SELECT SUM(CASE WHEN m.dmltype = 'D' THEN 1 ELSE 0 END) d_cnt, "
              + "SUM(CASE WHEN m.dmltype = 'I' THEN 1 ELSE 0 END) i_cnt, "
              + "SUM(CASE WHEN m.dmltype = 'U' THEN 1 ELSE 0 END) u_cnt, "
              + "m.PK1 FROM mlogName m WHERE m.mlogid > 999 GROUP BY PK1) m "
              + "LEFT OUTER JOIN ( [query]) d ON ( m.PK1 = d.PK1)",
          query);
    } catch (Exception e) {
      fail("exception thrown");
    }

    // normal case : multi column pk
    PKNames.put(Short.valueOf((short) 2), "PK2");
    try {
      query = IncrementalReader.getIncrementalQuery("mlogName",
          "[query]", PKNames, 999);
      assertEquals(
          "SELECT m.d_cnt, m.i_cnt, m.u_cnt, m.PK1, m.PK2, d.* FROM ( "
              + "SELECT SUM(CASE WHEN m.dmltype = 'D' THEN 1 ELSE 0 END) d_cnt, "
              + "SUM(CASE WHEN m.dmltype = 'I' THEN 1 ELSE 0 END) i_cnt, "
              + "SUM(CASE WHEN m.dmltype = 'U' THEN 1 ELSE 0 END) u_cnt, "
              + "m.PK1, m.PK2 FROM mlogName m WHERE m.mlogid > 999 GROUP BY PK1, PK2) m "
              + "LEFT OUTER JOIN ( [query]) d ON ( m.PK1 = d.PK1 AND m.PK2 = d.PK2)",
          query);
    } catch (Exception e) {
      fail("exception thrown");
    }
  }
}
TOP

Related Classes of jp.co.ntt.oss.IncrementalReaderTest

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.