diff options
author | Tor Egge <Tor.Egge@online.no> | 2021-10-20 12:41:11 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2021-10-20 12:41:11 +0200 |
commit | f19fc4ebc9010db3bd35f53923866c62e2faefa9 (patch) | |
tree | 37566230c57b279de5fa520c50f81c1f0c1a5eb6 /storage/src/tests/persistence/apply_bucket_diff_state_test.cpp | |
parent | 25c60f5b960db2a34e05e8466bb0ff62c98a236a (diff) |
Eliminate ApplyBucketDiffEntryResult.
Diffstat (limited to 'storage/src/tests/persistence/apply_bucket_diff_state_test.cpp')
-rw-r--r-- | storage/src/tests/persistence/apply_bucket_diff_state_test.cpp | 60 |
1 files changed, 39 insertions, 21 deletions
diff --git a/storage/src/tests/persistence/apply_bucket_diff_state_test.cpp b/storage/src/tests/persistence/apply_bucket_diff_state_test.cpp index 6e1e62d2080..fe77477fa77 100644 --- a/storage/src/tests/persistence/apply_bucket_diff_state_test.cpp +++ b/storage/src/tests/persistence/apply_bucket_diff_state_test.cpp @@ -1,6 +1,5 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/storage/persistence/apply_bucket_diff_entry_result.h> #include <vespa/storage/persistence/apply_bucket_diff_state.h> #include <vespa/storage/persistence/merge_bucket_info_syncer.h> #include <vespa/document/base/documentid.h> @@ -26,38 +25,44 @@ document::Bucket dummy_document_bucket(makeDocumentBucket(document::BucketId(0, class DummyMergeBucketInfoSyncer : public MergeBucketInfoSyncer { uint32_t& _sync_count; + vespalib::string _fail; public: DummyMergeBucketInfoSyncer(uint32_t& sync_count) : MergeBucketInfoSyncer(), - _sync_count(sync_count) + _sync_count(sync_count), + _fail() { } + ~DummyMergeBucketInfoSyncer(); void sync_bucket_info(const spi::Bucket& bucket) const override { EXPECT_EQ(bucket, spi::Bucket(dummy_document_bucket)); ++_sync_count; + if (!_fail.empty()) { + throw std::runtime_error(_fail); + } } + void set_fail(vespalib::string fail) { _fail = std::move(fail); } }; -ApplyBucketDiffEntryResult -make_result(spi::Result &spi_result, const DocumentId &doc_id) +DummyMergeBucketInfoSyncer::~DummyMergeBucketInfoSyncer() = default; + +void +make_result(ApplyBucketDiffState& state, spi::Result &spi_result, const DocumentId &doc_id) { - std::promise<std::unique_ptr<spi::Result>> result_promise; - result_promise.set_value(std::make_unique<spi::Result>(spi_result)); - spi::Bucket bucket(makeDocumentBucket(bucket_id_factory.getBucketId(doc_id))); - return ApplyBucketDiffEntryResult(result_promise.get_future(), bucket, doc_id, test_op); + state.on_entry_complete(std::make_unique<spi::Result>(spi_result), doc_id, test_op); } void push_ok(ApplyBucketDiffState &state) { - state.push_back(make_result(spi_result_ok, DocumentId("id::test::0"))); - state.push_back(make_result(spi_result_ok, DocumentId("id::test::1"))); + make_result(state, spi_result_ok, DocumentId("id::test::0")); + make_result(state, spi_result_ok, DocumentId("id::test::1")); } void push_bad(ApplyBucketDiffState &state) { - state.push_back(make_result(spi_result_ok, DocumentId("id::test::0"))); - state.push_back(make_result(spi_result_fail, DocumentId("id::test::1"))); - state.push_back(make_result(spi_result_fail, DocumentId("id::test::2"))); + make_result(state, spi_result_ok, DocumentId("id::test::0")); + make_result(state, spi_result_fail, DocumentId("id::test::1")); + make_result(state, spi_result_fail, DocumentId("id::test::2")); } } @@ -75,15 +80,19 @@ public: { } + ~ApplyBucketDiffStateTestBase(); + std::unique_ptr<ApplyBucketDiffState> make_state() { return std::make_unique<ApplyBucketDiffState>(syncer, spi::Bucket(dummy_document_bucket)); } }; +ApplyBucketDiffStateTestBase::~ApplyBucketDiffStateTestBase() = default; + class ApplyBucketDiffStateTest : public ApplyBucketDiffStateTestBase { public: - std::unique_ptr<ApplyBucketDiffState> state; + std::shared_ptr<ApplyBucketDiffState> state; ApplyBucketDiffStateTest() : ApplyBucketDiffStateTestBase(), @@ -95,13 +104,14 @@ public: state = make_state(); } + void check_failure(std::string expected) { + auto future = state->get_future(); + state.reset(); + std::string fail_message = future.get(); + EXPECT_EQ(expected, fail_message); + } void check_failure() { - try { - state->check(); - FAIL() << "Failed to throw exception for failed result"; - } catch (std::exception &e) { - EXPECT_EQ("Failed put for id::test::1 in Bucket(0xeb4700c03842cac4): Result(5, write blocked)", std::string(e.what())); - } + check_failure("Failed put for id::test::1 in Bucket(0x0000000000000010): Result(5, write blocked)"); } }; @@ -109,7 +119,7 @@ public: TEST_F(ApplyBucketDiffStateTest, ok_results_can_be_checked) { push_ok(*state); - state->check(); + check_failure(""); } TEST_F(ApplyBucketDiffStateTest, failed_result_errors_ignored) @@ -146,4 +156,12 @@ TEST_F(ApplyBucketDiffStateTest, explicit_sync_bucket_info_works) EXPECT_EQ(1, sync_count); } +TEST_F(ApplyBucketDiffStateTest, failed_sync_bucket_info_is_detected) +{ + vespalib::string fail("sync bucket failed"); + syncer.set_fail(fail); + state->mark_stale_bucket_info(); + check_failure(fail); +} + } |