From 3026ff79c9b59651574a84d86d2d3ab01b2b72ac Mon Sep 17 00:00:00 2001 From: Nathaniel Bauernfeind Date: Sat, 17 Feb 2024 23:30:58 -0700 Subject: [PATCH] Fix test failures by wrapping job scheduelr errors in TableInitializationExceptions --- .../table/impl/PartitionedTableTest.java | 9 ++- .../table/impl/QueryTableWhereTest.java | 13 +++- .../table/impl/updateby/TestEmMinMax.java | 74 ++++++++++++------ .../engine/table/impl/updateby/TestEmStd.java | 74 ++++++++++++------ .../engine/table/impl/updateby/TestEma.java | 75 +++++++++++++------ .../engine/table/impl/updateby/TestEms.java | 74 ++++++++++++------ 6 files changed, 229 insertions(+), 90 deletions(-) diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/PartitionedTableTest.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/PartitionedTableTest.java index 61c2a97f102..7be56ae0377 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/PartitionedTableTest.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/PartitionedTableTest.java @@ -12,6 +12,7 @@ import io.deephaven.datastructures.util.CollectionUtil; import io.deephaven.engine.context.ExecutionContext; import io.deephaven.engine.context.QueryScope; +import io.deephaven.engine.exceptions.TableInitializationException; import io.deephaven.engine.liveness.LivenessScopeStack; import io.deephaven.engine.liveness.SingletonLivenessManager; import io.deephaven.engine.rowset.RowSet; @@ -1063,13 +1064,17 @@ public void testTransformStaticToRefreshing() { try { partitionedTable.transform(t -> t.join(refreshingInput, "c", "c2=c")); TestCase.fail("Expected exception"); - } catch (IllegalStateException expected) { + } catch (TableInitializationException expected) { + Assert.eqTrue(expected.getCause().getClass() == IllegalStateException.class, + "expected.getCause().getClass() instanceof IllegalStateException"); } try { partitionedTable.partitionedTransform(partitionedTable, (t, u) -> t.join(refreshingInput, "c", "c2=c")); TestCase.fail("Expected exception"); - } catch (IllegalStateException expected) { + } catch (TableInitializationException expected) { + Assert.eqTrue(expected.getCause().getClass() == IllegalStateException.class, + "expected.getCause().getClass() instanceof IllegalStateException"); } } } diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/QueryTableWhereTest.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/QueryTableWhereTest.java index c6bd254977b..fa9e838513b 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/QueryTableWhereTest.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/QueryTableWhereTest.java @@ -13,6 +13,7 @@ import io.deephaven.engine.context.ExecutionContext; import io.deephaven.engine.context.QueryScope; import io.deephaven.engine.exceptions.CancellationException; +import io.deephaven.engine.exceptions.TableInitializationException; import io.deephaven.engine.util.TableTools; import io.deephaven.engine.table.impl.verify.TableAssertions; import io.deephaven.engine.table.impl.select.*; @@ -723,8 +724,11 @@ public void testInterFilterInterruption() { waitForLatch(latch); assertEquals(0, fastCounter.invokes.get()); - assertNotNull(caught.getValue()); - assertEquals(CancellationException.class, caught.getValue().getClass()); + Throwable err = caught.getValue(); + assertNotNull(err); + assertEquals(TableInitializationException.class, err.getClass()); + err = err.getCause(); + assertEquals(CancellationException.class, err.getClass()); QueryScope.addParam("slowCounter", null); QueryScope.addParam("fastCounter", null); @@ -1071,7 +1075,10 @@ public void testFilterErrorInitial() { try { final QueryTable whereResult = (QueryTable) table.where("y.length() > 0"); Assert.statementNeverExecuted("Expected exception not thrown."); - } catch (Exception e) { + } catch (Throwable e) { + Assert.eqTrue(e instanceof TableInitializationException, + "TableInitializationException expected."); + e = e.getCause(); Assert.eqTrue(e instanceof FormulaEvaluationException && e.getCause() != null && e.getCause() instanceof NullPointerException, "NPE causing FormulaEvaluationException expected."); diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEmMinMax.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEmMinMax.java index 0dfdd3fef09..224d0b55adc 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEmMinMax.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEmMinMax.java @@ -4,10 +4,12 @@ import io.deephaven.api.updateby.OperationControl; import io.deephaven.api.updateby.UpdateByControl; import io.deephaven.api.updateby.UpdateByOperation; +import io.deephaven.base.verify.Assert; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ObjectChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.context.ExecutionContext; +import io.deephaven.engine.exceptions.TableInitializationException; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.RowSetFactory; import io.deephaven.engine.table.PartitionedTable; @@ -356,73 +358,103 @@ public void testThrowBehaviors() { final TableDefaults bytes = testTable(RowSetFactory.flat(4).toTracking(), byteCol("col", (byte) 0, (byte) 1, NULL_BYTE, (byte) 3)); - assertThrows(TableDataException.class, + Throwable err = assertThrows(TableInitializationException.class, () -> bytes.updateBy(UpdateByOperation.EmMin(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bytes.updateBy(UpdateByOperation.EmMin(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults shorts = testTable(RowSetFactory.flat(4).toTracking(), shortCol("col", (short) 0, (short) 1, NULL_SHORT, (short) 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> shorts.updateBy(UpdateByOperation.EmMin(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults ints = testTable(RowSetFactory.flat(4).toTracking(), intCol("col", 0, 1, NULL_INT, 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> ints.updateBy(UpdateByOperation.EmMin(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults longs = testTable(RowSetFactory.flat(4).toTracking(), longCol("col", 0, 1, NULL_LONG, 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> longs.updateBy(UpdateByOperation.EmMin(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults floats = testTable(RowSetFactory.flat(4).toTracking(), floatCol("col", 0, 1, NULL_FLOAT, Float.NaN)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> floats.updateBy( UpdateByOperation.EmMin(OperationControl.builder().onNullValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered null value during EMS processing"); - - assertThrows(TableDataException.class, + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered null value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered null value during Exponential Moving output processing\")"); + + err = assertThrows(TableInitializationException.class, () -> floats.updateBy( UpdateByOperation.EmMin(OperationControl.builder().onNanValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered NaN value during EMS processing"); + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered NaN value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered NaN value during Exponential Moving output processing\")"); TableDefaults doubles = testTable(RowSetFactory.flat(4).toTracking(), doubleCol("col", 0, 1, NULL_DOUBLE, Double.NaN)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> doubles.updateBy( UpdateByOperation.EmMin(OperationControl.builder().onNullValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered null value during EMS processing"); - - assertThrows(TableDataException.class, + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered null value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered null value during Exponential Moving output processing\")"); + + err = assertThrows(TableInitializationException.class, () -> doubles.updateBy( UpdateByOperation.EmMin(OperationControl.builder().onNanValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered NaN value during EMS processing"); + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered NaN value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered NaN value during Exponential Moving output processing\")"); TableDefaults bi = testTable(RowSetFactory.flat(4).toTracking(), col("col", BigInteger.valueOf(0), BigInteger.valueOf(1), null, BigInteger.valueOf(3))); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bi.updateBy(UpdateByOperation.EmMin(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults bd = testTable(RowSetFactory.flat(4).toTracking(), col("col", BigDecimal.valueOf(0), BigDecimal.valueOf(1), null, BigDecimal.valueOf(3))); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bd.updateBy(UpdateByOperation.EmMin(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); } @Test diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEmStd.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEmStd.java index 3addd32b4c2..5f0b15ed561 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEmStd.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEmStd.java @@ -4,10 +4,12 @@ import io.deephaven.api.updateby.OperationControl; import io.deephaven.api.updateby.UpdateByControl; import io.deephaven.api.updateby.UpdateByOperation; +import io.deephaven.base.verify.Assert; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ObjectChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.context.ExecutionContext; +import io.deephaven.engine.exceptions.TableInitializationException; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.RowSetFactory; import io.deephaven.engine.table.PartitionedTable; @@ -370,73 +372,103 @@ public void testThrowBehaviors() { final TableDefaults bytes = testTable(RowSetFactory.flat(4).toTracking(), byteCol("col", (byte) 0, (byte) 1, NULL_BYTE, (byte) 3)); - assertThrows(TableDataException.class, + Throwable err = assertThrows(TableInitializationException.class, () -> bytes.updateBy(UpdateByOperation.EmStd(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bytes.updateBy(UpdateByOperation.EmStd(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults shorts = testTable(RowSetFactory.flat(4).toTracking(), shortCol("col", (short) 0, (short) 1, NULL_SHORT, (short) 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> shorts.updateBy(UpdateByOperation.EmStd(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults ints = testTable(RowSetFactory.flat(4).toTracking(), intCol("col", 0, 1, NULL_INT, 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> ints.updateBy(UpdateByOperation.EmStd(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults longs = testTable(RowSetFactory.flat(4).toTracking(), longCol("col", 0, 1, NULL_LONG, 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> longs.updateBy(UpdateByOperation.EmStd(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults floats = testTable(RowSetFactory.flat(4).toTracking(), floatCol("col", 0, 1, NULL_FLOAT, Float.NaN)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> floats.updateBy( UpdateByOperation.EmStd(OperationControl.builder().onNullValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered null value during EMS processing"); - - assertThrows(TableDataException.class, + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered null value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered null value during Exponential Moving output processing\")"); + + err = assertThrows(TableInitializationException.class, () -> floats.updateBy( UpdateByOperation.EmStd(OperationControl.builder().onNanValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered NaN value during EMS processing"); + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered NaN value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered NaN value during Exponential Moving output processing\")"); TableDefaults doubles = testTable(RowSetFactory.flat(4).toTracking(), doubleCol("col", 0, 1, NULL_DOUBLE, Double.NaN)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> doubles.updateBy( UpdateByOperation.EmStd(OperationControl.builder().onNullValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered null value during EMS processing"); - - assertThrows(TableDataException.class, + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered null value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered null value during Exponential Moving output processing\")"); + + err = assertThrows(TableInitializationException.class, () -> doubles.updateBy( UpdateByOperation.EmStd(OperationControl.builder().onNanValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered NaN value during EMS processing"); + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered NaN value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered NaN value during Exponential Moving output processing\")"); TableDefaults bi = testTable(RowSetFactory.flat(4).toTracking(), col("col", BigInteger.valueOf(0), BigInteger.valueOf(1), null, BigInteger.valueOf(3))); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bi.updateBy(UpdateByOperation.EmStd(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults bd = testTable(RowSetFactory.flat(4).toTracking(), col("col", BigDecimal.valueOf(0), BigDecimal.valueOf(1), null, BigDecimal.valueOf(3))); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bd.updateBy(UpdateByOperation.EmStd(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); } @Test diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEma.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEma.java index 129cb9afe5e..4678ee098aa 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEma.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEma.java @@ -3,11 +3,13 @@ import io.deephaven.api.updateby.BadDataBehavior; import io.deephaven.api.updateby.OperationControl; import io.deephaven.api.updateby.UpdateByOperation; +import io.deephaven.base.verify.Assert; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ObjectChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.context.ExecutionContext; import io.deephaven.engine.context.QueryScope; +import io.deephaven.engine.exceptions.TableInitializationException; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.RowSetFactory; import io.deephaven.engine.table.Table; @@ -118,73 +120,102 @@ public void testThrowBehaviors() { final TableDefaults bytes = testTable(RowSetFactory.flat(4).toTracking(), byteCol("col", (byte) 0, (byte) 1, NULL_BYTE, (byte) 3)); - assertThrows(TableDataException.class, + Throwable err = assertThrows(TableInitializationException.class, () -> bytes.updateBy(UpdateByOperation.Ema(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); - - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bytes.updateBy(UpdateByOperation.Ema(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults shorts = testTable(RowSetFactory.flat(4).toTracking(), shortCol("col", (short) 0, (short) 1, NULL_SHORT, (short) 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> shorts.updateBy(UpdateByOperation.Ema(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults ints = testTable(RowSetFactory.flat(4).toTracking(), intCol("col", 0, 1, NULL_INT, 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> ints.updateBy(UpdateByOperation.Ema(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults longs = testTable(RowSetFactory.flat(4).toTracking(), longCol("col", 0, 1, NULL_LONG, 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> longs.updateBy(UpdateByOperation.Ema(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults floats = testTable(RowSetFactory.flat(4).toTracking(), floatCol("col", 0, 1, NULL_FLOAT, Float.NaN)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> floats.updateBy( UpdateByOperation.Ema(OperationControl.builder().onNullValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered null value during EMA processing"); - - assertThrows(TableDataException.class, + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered null value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered null value during Exponential Moving output processing\")"); + + err = assertThrows(TableInitializationException.class, () -> floats.updateBy( UpdateByOperation.Ema(OperationControl.builder().onNanValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered NaN value during EMA processing"); + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered NaN value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered NaN value during Exponential Moving output processing\")"); TableDefaults doubles = testTable(RowSetFactory.flat(4).toTracking(), doubleCol("col", 0, 1, NULL_DOUBLE, Double.NaN)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> doubles.updateBy( UpdateByOperation.Ema(OperationControl.builder().onNullValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered null value during EMA processing"); - - assertThrows(TableDataException.class, + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered null value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered null value during Exponential Moving output processing\")"); + + err = assertThrows(TableInitializationException.class, () -> doubles.updateBy( UpdateByOperation.Ema(OperationControl.builder().onNanValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered NaN value during EMA processing"); + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered NaN value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered NaN value during Exponential Moving output processing\")"); TableDefaults bi = testTable(RowSetFactory.flat(4).toTracking(), col("col", BigInteger.valueOf(0), BigInteger.valueOf(1), null, BigInteger.valueOf(3))); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bi.updateBy(UpdateByOperation.Ema(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults bd = testTable(RowSetFactory.flat(4).toTracking(), col("col", BigDecimal.valueOf(0), BigDecimal.valueOf(1), null, BigDecimal.valueOf(3))); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bd.updateBy(UpdateByOperation.Ema(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); } @Test diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEms.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEms.java index 22657b3159f..2466ec845ab 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEms.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/updateby/TestEms.java @@ -4,10 +4,12 @@ import io.deephaven.api.updateby.OperationControl; import io.deephaven.api.updateby.UpdateByControl; import io.deephaven.api.updateby.UpdateByOperation; +import io.deephaven.base.verify.Assert; import io.deephaven.chunk.Chunk; import io.deephaven.chunk.ObjectChunk; import io.deephaven.chunk.attributes.Values; import io.deephaven.engine.context.ExecutionContext; +import io.deephaven.engine.exceptions.TableInitializationException; import io.deephaven.engine.rowset.RowSet; import io.deephaven.engine.rowset.RowSetFactory; import io.deephaven.engine.table.PartitionedTable; @@ -231,73 +233,103 @@ public void testThrowBehaviors() { final TableDefaults bytes = testTable(RowSetFactory.flat(4).toTracking(), byteCol("col", (byte) 0, (byte) 1, NULL_BYTE, (byte) 3)); - assertThrows(TableDataException.class, + Throwable err = assertThrows(TableInitializationException.class, () -> bytes.updateBy(UpdateByOperation.Ems(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bytes.updateBy(UpdateByOperation.Ems(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults shorts = testTable(RowSetFactory.flat(4).toTracking(), shortCol("col", (short) 0, (short) 1, NULL_SHORT, (short) 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> shorts.updateBy(UpdateByOperation.Ems(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults ints = testTable(RowSetFactory.flat(4).toTracking(), intCol("col", 0, 1, NULL_INT, 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> ints.updateBy(UpdateByOperation.Ems(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults longs = testTable(RowSetFactory.flat(4).toTracking(), longCol("col", 0, 1, NULL_LONG, 3)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> longs.updateBy(UpdateByOperation.Ems(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults floats = testTable(RowSetFactory.flat(4).toTracking(), floatCol("col", 0, 1, NULL_FLOAT, Float.NaN)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> floats.updateBy( UpdateByOperation.Ems(OperationControl.builder().onNullValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered null value during EMS processing"); - - assertThrows(TableDataException.class, + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered null value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered null value during Exponential Moving output processing\")"); + + err = assertThrows(TableInitializationException.class, () -> floats.updateBy( UpdateByOperation.Ems(OperationControl.builder().onNanValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered NaN value during EMS processing"); + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered NaN value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered NaN value during Exponential Moving output processing\")"); TableDefaults doubles = testTable(RowSetFactory.flat(4).toTracking(), doubleCol("col", 0, 1, NULL_DOUBLE, Double.NaN)); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> doubles.updateBy( UpdateByOperation.Ems(OperationControl.builder().onNullValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered null value during EMS processing"); - - assertThrows(TableDataException.class, + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered null value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered null value during Exponential Moving output processing\")"); + + err = assertThrows(TableInitializationException.class, () -> doubles.updateBy( UpdateByOperation.Ems(OperationControl.builder().onNanValue(BadDataBehavior.THROW).build(), - 10)), - "Encountered NaN value during EMS processing"); + 10))); + err = err.getCause(); + Assert.eqTrue(err.getClass() == TableDataException.class, + "err.getClass() == TableDataException.class"); + Assert.eqTrue(err.getMessage().contains("Encountered NaN value during Exponential Moving output processing"), + "err.getMessage().contains(\"Encountered NaN value during Exponential Moving output processing\")"); TableDefaults bi = testTable(RowSetFactory.flat(4).toTracking(), col("col", BigInteger.valueOf(0), BigInteger.valueOf(1), null, BigInteger.valueOf(3))); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bi.updateBy(UpdateByOperation.Ems(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); TableDefaults bd = testTable(RowSetFactory.flat(4).toTracking(), col("col", BigDecimal.valueOf(0), BigDecimal.valueOf(1), null, BigDecimal.valueOf(3))); - assertThrows(TableDataException.class, + err = assertThrows(TableInitializationException.class, () -> bd.updateBy(UpdateByOperation.Ems(throwControl, 10))); + Assert.eqTrue(err.getCause().getClass() == TableDataException.class, + "err.getCause().getClass() == TableDataException.class"); } @Test