diff --git a/core/src/test/java/org/apache/iceberg/FileGenerationUtil.java b/core/src/test/java/org/apache/iceberg/FileGenerationUtil.java index b08d43e572a2..1d57d96203b9 100644 --- a/core/src/test/java/org/apache/iceberg/FileGenerationUtil.java +++ b/core/src/test/java/org/apache/iceberg/FileGenerationUtil.java @@ -280,9 +280,13 @@ private static long generateContentLength() { } private static Pair generateBounds(PrimitiveType type, MetricsMode mode) { - Comparator cmp = Comparators.forType(type); Object value1 = generateBound(type, mode); Object value2 = generateBound(type, mode); + + if (value1 == null || value2 == null) { + return Pair.of(null, null); + } + Comparator cmp = Comparators.forType(type); if (cmp.compare(value1, value2) > 0) { ByteBuffer lowerBuffer = Conversions.toByteBuffer(type, value2); ByteBuffer upperBuffer = Conversions.toByteBuffer(type, value1); diff --git a/core/src/test/java/org/apache/iceberg/TestFileGenerationUtil.java b/core/src/test/java/org/apache/iceberg/TestFileGenerationUtil.java index ea44aa73c6d6..f533df159893 100644 --- a/core/src/test/java/org/apache/iceberg/TestFileGenerationUtil.java +++ b/core/src/test/java/org/apache/iceberg/TestFileGenerationUtil.java @@ -31,6 +31,8 @@ import org.apache.iceberg.types.Types; import org.apache.iceberg.types.Types.NestedField; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; public class TestFileGenerationUtil { @@ -85,6 +87,23 @@ public void testBoundsWithSpecificValues() { assertThat(actualIntUpper).isEqualTo(intUpper); } + @ParameterizedTest + @ValueSource(strings = {"none", "counts", "truncate(16)", "full"}) + @SuppressWarnings("deprecation") + void testBoundsForAllMetricsModes(String metricsMode) { + MetricsConfig metricsConfig = + MetricsConfig.fromProperties( + ImmutableMap.of(TableProperties.DEFAULT_WRITE_METRICS_MODE, metricsMode)); + Metrics metrics = + FileGenerationUtil.generateRandomMetrics( + SCHEMA, + metricsConfig, + ImmutableMap.of() /* no lower bounds */, + ImmutableMap.of() /* no upper bounds */); + + checkBounds(metrics, metricsConfig); + } + private void checkBounds(Metrics metrics, MetricsConfig metricsConfig) { for (NestedField field : SCHEMA.columns()) { MetricsMode mode = metricsConfig.columnMode(field.name());