PHOENIX-4251 Breakup ProductMetricsIT into several integration tests so as not to create too many tables in one test
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/dd3b7b6c Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/dd3b7b6c Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/dd3b7b6c Branch: refs/heads/master Commit: dd3b7b6c04acfc53a1d5cdd5e866a59ae71557c3 Parents: eafb58b Author: James Taylor <[email protected]> Authored: Thu Sep 28 18:23:19 2017 -0700 Committer: James Taylor <[email protected]> Committed: Thu Sep 28 18:23:44 2017 -0700 ---------------------------------------------------------------------- .../org/apache/phoenix/end2end/DateTimeIT.java | 277 ++++++++++++++++++- .../phoenix/end2end/ProductMetricsIT.java | 170 +----------- 2 files changed, 278 insertions(+), 169 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/dd3b7b6c/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java index fb43538..e9a98e3 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DateTimeIT.java @@ -32,6 +32,7 @@ import static org.apache.phoenix.util.TestUtil.ROW6; import static org.apache.phoenix.util.TestUtil.ROW7; import static org.apache.phoenix.util.TestUtil.ROW8; import static org.apache.phoenix.util.TestUtil.ROW9; +import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -39,18 +40,38 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.math.BigDecimal; -import java.sql.*; +import java.sql.Connection; +import java.sql.Date; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Time; +import java.sql.Timestamp; +import java.sql.Types; import java.text.Format; import java.util.Calendar; import java.util.GregorianCalendar; +import java.util.Properties; +import org.apache.hadoop.hbase.util.Bytes; +import org.apache.phoenix.query.QueryConstants; +import org.apache.phoenix.schema.types.PDate; +import org.apache.phoenix.util.ByteUtil; import org.apache.phoenix.util.DateUtil; +import org.apache.phoenix.util.PropertiesUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; public class DateTimeIT extends ParallelStatsDisabledIT { + private static final String PRODUCT_METRICS_NAME = "PRODUCT_METRICS"; + private static final Date SPLIT1 = toDate("1970-01-01 01:30:00"); + private static final Date SPLIT2 = toDate("1970-01-01 02:00:00"); + private static final String R1 = "R1"; + private static final String R2 = "R2"; protected Connection conn; protected Date date; @@ -58,6 +79,107 @@ public class DateTimeIT extends ParallelStatsDisabledIT { protected final static String ROW10 = "00D123122312312"; protected String tableName; + private static void initDateTableValues(String tablename, Connection conn, String tenantId, Date startDate) throws Exception { + double dateIncrement = 2.0; + PreparedStatement stmt = conn.prepareStatement( + "upsert into " +tablename+ + "(" + + " ORGANIZATION_ID, " + + " \"DATE\", " + + " FEATURE, " + + " UNIQUE_USERS, " + + " TRANSACTIONS, " + + " CPU_UTILIZATION, " + + " DB_UTILIZATION, " + + " REGION, " + + " IO_TIME)" + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"); + stmt.setString(1, tenantId); + stmt.setDate(2, startDate); + stmt.setString(3, "A"); + stmt.setInt(4, 10); + stmt.setLong(5, 100L); + stmt.setBigDecimal(6, BigDecimal.valueOf(0.5)); + stmt.setBigDecimal(7, BigDecimal.valueOf(0.2)); + stmt.setString(8, R2); + stmt.setNull(9, Types.BIGINT); + stmt.execute(); + + startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement)); + stmt.setString(1, tenantId); + stmt.setDate(2, startDate); + stmt.setString(3, "B"); + stmt.setInt(4, 20); + stmt.setLong(5, 200); + stmt.setBigDecimal(6, BigDecimal.valueOf(1.0)); + stmt.setBigDecimal(7, BigDecimal.valueOf(0.4)); + stmt.setString(8, null); + stmt.setLong(9, 2000); + stmt.execute(); + + startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement)); + stmt.setString(1, tenantId); + stmt.setDate(2, startDate); + stmt.setString(3, "C"); + stmt.setInt(4, 30); + stmt.setLong(5, 300); + stmt.setBigDecimal(6, BigDecimal.valueOf(2.5)); + stmt.setBigDecimal(7, BigDecimal.valueOf(0.6)); + stmt.setString(8, R1); + stmt.setNull(9, Types.BIGINT); + stmt.execute(); + + startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement)); + stmt.setString(1, tenantId); + stmt.setDate(2, startDate); + stmt.setString(3, "D"); + stmt.setInt(4, 40); + stmt.setLong(5, 400); + stmt.setBigDecimal(6, BigDecimal.valueOf(3.0)); + stmt.setBigDecimal(7, BigDecimal.valueOf(0.8)); + stmt.setString(8, R1); + stmt.setLong(9, 4000); + stmt.execute(); + + startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement)); + stmt.setString(1, tenantId); + stmt.setDate(2, startDate); + stmt.setString(3, "E"); + stmt.setInt(4, 50); + stmt.setLong(5, 500); + stmt.setBigDecimal(6, BigDecimal.valueOf(3.5)); + stmt.setBigDecimal(7, BigDecimal.valueOf(1.2)); + stmt.setString(8, R2); + stmt.setLong(9, 5000); + stmt.execute(); + + startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement)); + stmt.setString(1, tenantId); + stmt.setDate(2, startDate); + stmt.setString(3, "F"); + stmt.setInt(4, 60); + stmt.setLong(5, 600); + stmt.setBigDecimal(6, BigDecimal.valueOf(4.0)); + stmt.setBigDecimal(7, BigDecimal.valueOf(1.4)); + stmt.setString(8, null); + stmt.setNull(9, Types.BIGINT); + stmt.execute(); + } + + private static void initDateTableValues(String tablename, String tenantId, byte[][] splits, Date startDate) throws Exception { + ensureTableCreated(getUrl(), tablename, PRODUCT_METRICS_NAME, splits, null, null); + + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + try { + initDateTableValues(tablename, conn, tenantId, startDate); + conn.commit(); + } finally { + conn.close(); + } + } + + public DateTimeIT() throws Exception { super(); date = new Date(System.currentTimeMillis()); @@ -1537,4 +1659,157 @@ public class DateTimeIT extends ParallelStatsDisabledIT { assertEquals(true, rs.getBoolean(1)); assertFalse(rs.next()); } + + private static byte[][] getSplits(String tenantId) { + return new byte[][] { + ByteUtil.concat(Bytes.toBytes(tenantId), PDate.INSTANCE.toBytes(SPLIT1)), + ByteUtil.concat(Bytes.toBytes(tenantId), PDate.INSTANCE.toBytes(SPLIT2)), + }; + } + + private static Date toDate(String dateString) { + return DateUtil.parseDate(dateString); + } + + @Test + public void testDateSubtractionCompareNumber() throws Exception { + String tablename=generateUniqueName(); + String tenantId = getOrganizationId(); + String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and ? - \"DATE\" > 3"; + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + try { + Date startDate = new Date(System.currentTimeMillis()); + Date endDate = new Date(startDate.getTime() + 6 * QueryConstants.MILLIS_IN_DAY); + initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); + PreparedStatement statement = conn.prepareStatement(query); + statement.setString(1, tenantId); + statement.setDate(2, endDate); + ResultSet rs = statement.executeQuery(); + assertTrue(rs.next()); + assertEquals("A", rs.getString(1)); + assertTrue(rs.next()); + assertEquals("B", rs.getString(1)); + assertFalse(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testDateSubtractionLongToDecimalCompareNumber() throws Exception { + String tablename=generateUniqueName(); + String tenantId = getOrganizationId(); + String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and ? - \"DATE\" - 1.5 > 3"; + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + try { + Date startDate = new Date(System.currentTimeMillis()); + Date endDate = new Date(startDate.getTime() + 9 * QueryConstants.MILLIS_IN_DAY); + initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); + PreparedStatement statement = conn.prepareStatement(query); + statement.setString(1, tenantId); + statement.setDate(2, endDate); + ResultSet rs = statement.executeQuery(); + assertTrue(rs.next()); + assertEquals("A", rs.getString(1)); + assertTrue(rs.next()); + assertEquals("B", rs.getString(1)); + assertTrue(rs.next()); + assertEquals("C", rs.getString(1)); + assertFalse(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testDateSubtractionCompareDate() throws Exception { + String tablename=generateUniqueName(); + String tenantId = getOrganizationId(); + String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and date - 1 >= ?"; + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + try { + Date startDate = new Date(System.currentTimeMillis()); + Date endDate = new Date(startDate.getTime() + 9 * QueryConstants.MILLIS_IN_DAY); + initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); + PreparedStatement statement = conn.prepareStatement(query); + statement.setString(1, tenantId); + statement.setDate(2, endDate); + ResultSet rs = statement.executeQuery(); + assertTrue(rs.next()); + assertEquals("F", rs.getString(1)); + assertFalse(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testDateAddCompareDate() throws Exception { + String tablename=generateUniqueName(); + String tenantId = getOrganizationId(); + String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and date + 1 >= ?"; + Connection conn = DriverManager.getConnection(url); + try { + Date startDate = new Date(System.currentTimeMillis()); + Date endDate = new Date(startDate.getTime() + 8 * QueryConstants.MILLIS_IN_DAY); + initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); + PreparedStatement statement = conn.prepareStatement(query); + statement.setString(1, tenantId); + statement.setDate(2, endDate); + ResultSet rs = statement.executeQuery(); + assertTrue(rs.next()); + assertEquals("E", rs.getString(1)); + assertTrue(rs.next()); + assertEquals("F", rs.getString(1)); + assertFalse(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testCurrentDate() throws Exception { + String tablename=generateUniqueName(); + String tenantId = getOrganizationId(); + String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and \"DATE\" - current_date() > 8"; + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + try { + Date startDate = new Date(System.currentTimeMillis()); + initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); + PreparedStatement statement = conn.prepareStatement(query); + statement.setString(1, tenantId); + ResultSet rs = statement.executeQuery(); + assertTrue(rs.next()); + assertEquals("F", rs.getString(1)); + assertFalse(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testCurrentTime() throws Exception { + String tablename=generateUniqueName(); + String tenantId = getOrganizationId(); + String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and \"DATE\" - current_time() > 8"; + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(getUrl(), props); + try { + Date startDate = new Date(System.currentTimeMillis()); + initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); + PreparedStatement statement = conn.prepareStatement(query); + statement.setString(1, tenantId); + ResultSet rs = statement.executeQuery(); + assertTrue(rs.next()); + assertEquals("F", rs.getString(1)); + assertFalse(rs.next()); + } finally { + conn.close(); + } + } + } http://git-wip-us.apache.org/repos/asf/phoenix/blob/dd3b7b6c/phoenix-core/src/it/java/org/apache/phoenix/end2end/ProductMetricsIT.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ProductMetricsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ProductMetricsIT.java index 969b585..858a0fd 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ProductMetricsIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ProductMetricsIT.java @@ -36,20 +36,15 @@ import java.util.Collections; import java.util.List; import java.util.Properties; -import org.apache.hadoop.hbase.TableNotFoundException; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.util.Bytes; import org.apache.phoenix.jdbc.PhoenixConnection; -import org.apache.phoenix.query.ConnectionQueryServices; import org.apache.phoenix.query.QueryConstants; import org.apache.phoenix.schema.types.PDate; import org.apache.phoenix.util.ByteUtil; import org.apache.phoenix.util.DateUtil; -import org.apache.phoenix.util.PhoenixRuntime; import org.apache.phoenix.util.PropertiesUtil; import org.apache.phoenix.util.SchemaUtil; -import org.apache.phoenix.util.TestUtil; -import org.junit.After; import org.junit.Test; import com.google.common.collect.Lists; @@ -113,7 +108,7 @@ public class ProductMetricsIT extends ParallelStatsDisabledIT { } } - protected static void initTableValues(String tablename, Connection conn, String tenantId) throws Exception { + private static void initTableValues(String tablename, Connection conn, String tenantId) throws Exception { PreparedStatement stmt = conn.prepareStatement( "upsert into " + tablename + " (" + @@ -298,9 +293,7 @@ public class ProductMetricsIT extends ParallelStatsDisabledIT { stmt.execute(); } - - - + @Test public void testDateRangeAggregation() throws Exception { String tablename=generateUniqueName(); @@ -1715,147 +1708,6 @@ public class ProductMetricsIT extends ParallelStatsDisabledIT { } @Test - public void testDateSubtractionCompareNumber() throws Exception { - String tablename=generateUniqueName(); - String tenantId = getOrganizationId(); - String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and ? - \"DATE\" > 3"; - Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - Connection conn = DriverManager.getConnection(getUrl(), props); - try { - Date startDate = new Date(System.currentTimeMillis()); - Date endDate = new Date(startDate.getTime() + 6 * QueryConstants.MILLIS_IN_DAY); - initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); - PreparedStatement statement = conn.prepareStatement(query); - statement.setString(1, tenantId); - statement.setDate(2, endDate); - ResultSet rs = statement.executeQuery(); - assertTrue(rs.next()); - assertEquals("A", rs.getString(1)); - assertTrue(rs.next()); - assertEquals("B", rs.getString(1)); - assertFalse(rs.next()); - } finally { - conn.close(); - } - } - - @Test - public void testDateSubtractionLongToDecimalCompareNumber() throws Exception { - String tablename=generateUniqueName(); - String tenantId = getOrganizationId(); - String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and ? - \"DATE\" - 1.5 > 3"; - Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - Connection conn = DriverManager.getConnection(getUrl(), props); - try { - Date startDate = new Date(System.currentTimeMillis()); - Date endDate = new Date(startDate.getTime() + 9 * QueryConstants.MILLIS_IN_DAY); - initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); - PreparedStatement statement = conn.prepareStatement(query); - statement.setString(1, tenantId); - statement.setDate(2, endDate); - ResultSet rs = statement.executeQuery(); - assertTrue(rs.next()); - assertEquals("A", rs.getString(1)); - assertTrue(rs.next()); - assertEquals("B", rs.getString(1)); - assertTrue(rs.next()); - assertEquals("C", rs.getString(1)); - assertFalse(rs.next()); - } finally { - conn.close(); - } - } - - @Test - public void testDateSubtractionCompareDate() throws Exception { - String tablename=generateUniqueName(); - String tenantId = getOrganizationId(); - String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and date - 1 >= ?"; - Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - Connection conn = DriverManager.getConnection(getUrl(), props); - try { - Date startDate = new Date(System.currentTimeMillis()); - Date endDate = new Date(startDate.getTime() + 9 * QueryConstants.MILLIS_IN_DAY); - initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); - PreparedStatement statement = conn.prepareStatement(query); - statement.setString(1, tenantId); - statement.setDate(2, endDate); - ResultSet rs = statement.executeQuery(); - assertTrue(rs.next()); - assertEquals("F", rs.getString(1)); - assertFalse(rs.next()); - } finally { - conn.close(); - } - } - - @Test - public void testDateAddCompareDate() throws Exception { - String tablename=generateUniqueName(); - String tenantId = getOrganizationId(); - String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and date + 1 >= ?"; - Connection conn = DriverManager.getConnection(url); - try { - Date startDate = new Date(System.currentTimeMillis()); - Date endDate = new Date(startDate.getTime() + 8 * QueryConstants.MILLIS_IN_DAY); - initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); - PreparedStatement statement = conn.prepareStatement(query); - statement.setString(1, tenantId); - statement.setDate(2, endDate); - ResultSet rs = statement.executeQuery(); - assertTrue(rs.next()); - assertEquals("E", rs.getString(1)); - assertTrue(rs.next()); - assertEquals("F", rs.getString(1)); - assertFalse(rs.next()); - } finally { - conn.close(); - } - } - - @Test - public void testCurrentDate() throws Exception { - String tablename=generateUniqueName(); - String tenantId = getOrganizationId(); - String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and \"DATE\" - current_date() > 8"; - Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - Connection conn = DriverManager.getConnection(getUrl(), props); - try { - Date startDate = new Date(System.currentTimeMillis()); - initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); - PreparedStatement statement = conn.prepareStatement(query); - statement.setString(1, tenantId); - ResultSet rs = statement.executeQuery(); - assertTrue(rs.next()); - assertEquals("F", rs.getString(1)); - assertFalse(rs.next()); - } finally { - conn.close(); - } - } - - @Test - public void testCurrentTime() throws Exception { - String tablename=generateUniqueName(); - String tenantId = getOrganizationId(); - String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and \"DATE\" - current_time() > 8"; - Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - Connection conn = DriverManager.getConnection(getUrl(), props); - try { - Date startDate = new Date(System.currentTimeMillis()); - initDateTableValues(tablename, tenantId, getSplits(tenantId), startDate); - PreparedStatement statement = conn.prepareStatement(query); - statement.setString(1, tenantId); - ResultSet rs = statement.executeQuery(); - assertTrue(rs.next()); - assertEquals("F", rs.getString(1)); - assertFalse(rs.next()); - } finally { - conn.close(); - } - } - - @Test public void testTruncateNotTraversableToFormScanKey() throws Exception { String tablename=generateUniqueName(); String tenantId = getOrganizationId(); @@ -1879,27 +1731,9 @@ public class ProductMetricsIT extends ParallelStatsDisabledIT { } } - private static void destroyTable() throws Exception { - String tablename=generateUniqueName(); - // Physically delete HBase table so that splits occur as expected for each test - Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); - ConnectionQueryServices services = DriverManager.getConnection(getUrl(), props).unwrap(PhoenixConnection.class).getQueryServices(); - HBaseAdmin admin = services.getAdmin(); - try { - try { - admin.disableTable(tablename); - admin.deleteTable(tablename); - } catch (TableNotFoundException e) { - } - } finally { - admin.close(); - } - } - @Test public void testSaltedOrderBy() throws Exception { String tablename=generateUniqueName(); - destroyTable(); String ddl = "create table " + tablename + " (organization_id char(15) not null," + " \"DATE\" date not null," +
