|
29 | 29 | #include "paimon/status.h" |
30 | 30 | #include "paimon/testing/mock/mock_file_system.h" |
31 | 31 | #include "paimon/testing/utils/testharness.h" |
| 32 | +#include "paimon/testing/utils/timezone_guard.h" |
32 | 33 | namespace paimon::test { |
33 | 34 |
|
34 | 35 | TEST(CoreOptionsTest, TestDefaultValue) { |
@@ -598,4 +599,51 @@ TEST(CoreOptionsTest, TestNormalizeValueInCoreOption) { |
598 | 599 | ASSERT_TRUE(core_options.SequenceFieldSortOrderIsAscending()); |
599 | 600 | ASSERT_EQ(BucketFunctionType::MOD, core_options.GetBucketFunctionType()); |
600 | 601 | } |
| 602 | + |
| 603 | +TEST(CoreOptionsTest, TestScanTimestampMillis) { |
| 604 | + ASSERT_OK_AND_ASSIGN(CoreOptions core_options, |
| 605 | + CoreOptions::FromMap({{Options::SCAN_TIMESTAMP_MILLIS, "1721614515032"}})); |
| 606 | + ASSERT_EQ(1721614515032, core_options.GetScanTimestampMillis().value()); |
| 607 | + ASSERT_EQ(StartupMode::FromTimestamp(), core_options.GetStartupMode()); |
| 608 | +} |
| 609 | + |
| 610 | +TEST(CoreOptionsTest, TestScanTimestampMillisExplicitMode) { |
| 611 | + ASSERT_OK_AND_ASSIGN(CoreOptions core_options, |
| 612 | + CoreOptions::FromMap({{Options::SCAN_MODE, "from-timestamp"}, |
| 613 | + {Options::SCAN_TIMESTAMP_MILLIS, "1721614515032"}})); |
| 614 | + ASSERT_EQ(StartupMode::FromTimestamp(), core_options.GetStartupMode()); |
| 615 | + ASSERT_EQ(1721614515032, core_options.GetScanTimestampMillis().value()); |
| 616 | +} |
| 617 | + |
| 618 | +TEST(CoreOptionsTest, TestScanTimestampMillisNotSet) { |
| 619 | + ASSERT_OK_AND_ASSIGN(CoreOptions core_options, CoreOptions::FromMap({})); |
| 620 | + ASSERT_EQ(std::nullopt, core_options.GetScanTimestampMillis()); |
| 621 | + ASSERT_EQ(StartupMode::LatestFull(), core_options.GetStartupMode()); |
| 622 | +} |
| 623 | + |
| 624 | +TEST(CoreOptionsTest, TestScanTimestampString) { |
| 625 | + TimezoneGuard tz_guard("Asia/Shanghai"); |
| 626 | + ASSERT_OK_AND_ASSIGN(CoreOptions core_options, |
| 627 | + CoreOptions::FromMap({{Options::SCAN_TIMESTAMP, "2023-06-01 00:00:00"}})); |
| 628 | + ASSERT_EQ(core_options.GetScanTimestampMillis().value(), 1685548800000); |
| 629 | + ASSERT_EQ(StartupMode::FromTimestamp(), core_options.GetStartupMode()); |
| 630 | +} |
| 631 | + |
| 632 | +TEST(CoreOptionsTest, TestScanTimestampStringDateOnly) { |
| 633 | + ASSERT_OK_AND_ASSIGN(CoreOptions opts1, |
| 634 | + CoreOptions::FromMap({{Options::SCAN_TIMESTAMP, "2023-06-01"}})); |
| 635 | + ASSERT_OK_AND_ASSIGN(CoreOptions opts2, |
| 636 | + CoreOptions::FromMap({{Options::SCAN_TIMESTAMP, "2023-06-01 00:00:00"}})); |
| 637 | + ASSERT_EQ(opts1.GetScanTimestampMillis().value(), opts2.GetScanTimestampMillis().value()); |
| 638 | +} |
| 639 | + |
| 640 | +TEST(CoreOptionsTest, TestScanTimestampMillisAndStringMutuallyExclusive) { |
| 641 | + ASSERT_NOK_WITH_MSG(CoreOptions::FromMap({{Options::SCAN_TIMESTAMP_MILLIS, "1721614515032"}, |
| 642 | + {Options::SCAN_TIMESTAMP, "2023-06-01 00:00:00"}}), |
| 643 | + "scan.timestamp-millis and scan.timestamp cannot be set at the same time"); |
| 644 | +} |
| 645 | + |
| 646 | +TEST(CoreOptionsTest, TestScanTimestampInvalidString) { |
| 647 | + ASSERT_NOK(CoreOptions::FromMap({{Options::SCAN_TIMESTAMP, "not-a-date"}})); |
| 648 | +} |
601 | 649 | } // namespace paimon::test |
0 commit comments