diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-03-02 10:56:55 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-03-02 10:56:55 +0000 |
commit | e325460fadf6f2a5f98c528ba4c5ee2758efbdac (patch) | |
tree | 727f0420d03767ee8fc92a7f767e51355c141dc7 /config/src/tests/subscription | |
parent | 3b94a726a38ecf74a83084a70d378f31076130de (diff) |
Use wait_until deadline to reduce number of times we need to sample the clock.
Diffstat (limited to 'config/src/tests/subscription')
-rw-r--r-- | config/src/tests/subscription/subscription.cpp | 85 |
1 files changed, 45 insertions, 40 deletions
diff --git a/config/src/tests/subscription/subscription.cpp b/config/src/tests/subscription/subscription.cpp index 13eafbf876e..fa184b90100 100644 --- a/config/src/tests/subscription/subscription.cpp +++ b/config/src/tests/subscription/subscription.cpp @@ -10,42 +10,47 @@ using namespace config; namespace { - struct SourceFixture - { - int numClose; - int numGetConfig; - int numReload; - SourceFixture() - : numClose(0), - numGetConfig(0), - numReload(0) - { } - }; - - struct MySource : public Source - { - MySource(SourceFixture * src) - : source(src) - {} +struct SourceFixture +{ + int numClose; + int numGetConfig; + int numReload; + SourceFixture() + : numClose(0), + numGetConfig(0), + numReload(0) + { } +}; + +struct MySource : public Source +{ + MySource(SourceFixture * src) + : source(src) + {} - void getConfig() override { source->numGetConfig++; } - void close() override { source->numClose++; } - void reload(int64_t gen) override { (void) gen; source->numReload++; } + void getConfig() override { source->numGetConfig++; } + void close() override { source->numClose++; } + void reload(int64_t gen) override { (void) gen; source->numReload++; } - SourceFixture * source; - }; + SourceFixture * source; +}; - struct SubscriptionFixture +struct SubscriptionFixture +{ + std::shared_ptr<IConfigHolder> holder; + ConfigSubscription sub; + SourceFixture src; + SubscriptionFixture(const ConfigKey & key) + : holder(new ConfigHolder()), + sub(0, key, holder, std::make_unique<MySource>(&src)) { - std::shared_ptr<IConfigHolder> holder; - ConfigSubscription sub; - SourceFixture src; - SubscriptionFixture(const ConfigKey & key) - : holder(new ConfigHolder()), - sub(0, key, holder, std::make_unique<MySource>(&src)) - { - } - }; + } +}; + +vespalib::steady_time +deadline(vespalib::duration timeout) { + return vespalib::steady_clock::now() + timeout; +} } TEST_FF("requireThatKeyIsReturned", ConfigKey("foo", "bar", "bim", "boo"), SubscriptionFixture(f1)) @@ -56,17 +61,17 @@ TEST_FF("requireThatKeyIsReturned", ConfigKey("foo", "bar", "bim", "boo"), Subsc TEST_F("requireThatUpdateReturns", SubscriptionFixture(ConfigKey::create<MyConfig>("myid"))) { f1.holder->handle(std::make_unique<ConfigUpdate>(ConfigValue(), 1, 1)); - ASSERT_TRUE(f1.sub.nextUpdate(0, 0ms)); + ASSERT_TRUE(f1.sub.nextUpdate(0, deadline(0ms))); ASSERT_TRUE(f1.sub.hasChanged()); ASSERT_EQUAL(1, f1.sub.getGeneration()); } TEST_F("requireThatNextUpdateBlocks", SubscriptionFixture(ConfigKey::create<MyConfig>("myid"))) { - ASSERT_FALSE(f1.sub.nextUpdate(0, 0ms)); + ASSERT_FALSE(f1.sub.nextUpdate(0, deadline(0ms))); f1.holder->handle(std::make_unique<ConfigUpdate>(ConfigValue(), 1, 1)); vespalib::Timer timer; - ASSERT_FALSE(f1.sub.nextUpdate(1, 500ms)); + ASSERT_FALSE(f1.sub.nextUpdate(1, deadline(500ms))); ASSERT_TRUE(timer.elapsed() > 400ms); } @@ -75,7 +80,7 @@ TEST_MT_F("requireThatNextUpdateReturnsWhenNotified", 2, SubscriptionFixture(Con if (thread_id == 0) { vespalib::Timer timer; f1.holder->handle(std::make_unique<ConfigUpdate>(ConfigValue(), 1, 1)); - ASSERT_TRUE(f1.sub.nextUpdate(2, 5000ms)); + ASSERT_TRUE(f1.sub.nextUpdate(2, deadline(5000ms))); ASSERT_TRUE(timer.elapsed() > 200ms); } else { std::this_thread::sleep_for(500ms); @@ -89,7 +94,7 @@ TEST_MT_F("requireThatNextUpdateReturnsInterrupted", 2, SubscriptionFixture(Conf if (thread_id == 0) { vespalib::Timer timer; f1.holder->handle(std::make_unique<ConfigUpdate>(ConfigValue(), 1, 1)); - ASSERT_TRUE(f1.sub.nextUpdate(1, 5000ms)); + ASSERT_TRUE(f1.sub.nextUpdate(1, deadline(5000ms))); ASSERT_TRUE(timer.elapsed() > 300ms); } else { std::this_thread::sleep_for(500ms); @@ -100,15 +105,15 @@ TEST_MT_F("requireThatNextUpdateReturnsInterrupted", 2, SubscriptionFixture(Conf TEST_F("Require that isChanged takes generation into account", SubscriptionFixture(ConfigKey::create<MyConfig>("myid"))) { f1.holder->handle(std::make_unique<ConfigUpdate>(ConfigValue(StringVector(), "a"), true, 1)); - ASSERT_TRUE(f1.sub.nextUpdate(0, 0ms)); + ASSERT_TRUE(f1.sub.nextUpdate(0, deadline(0ms))); f1.sub.flip(); ASSERT_EQUAL(1, f1.sub.getLastGenerationChanged()); f1.holder->handle(std::make_unique<ConfigUpdate>(ConfigValue(StringVector(), "b"), true, 2)); - ASSERT_TRUE(f1.sub.nextUpdate(1, 0ms)); + ASSERT_TRUE(f1.sub.nextUpdate(1, deadline(0ms))); f1.sub.flip(); ASSERT_EQUAL(2, f1.sub.getLastGenerationChanged()); f1.holder->handle(std::make_unique<ConfigUpdate>(ConfigValue(), false, 3)); - ASSERT_TRUE(f1.sub.nextUpdate(2, 0ms)); + ASSERT_TRUE(f1.sub.nextUpdate(2, deadline(0ms))); f1.sub.flip(); ASSERT_EQUAL(2, f1.sub.getLastGenerationChanged()); } |