summaryrefslogtreecommitdiffstats
path: root/config/src/tests/subscription
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-03-02 10:56:55 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2022-03-02 10:56:55 +0000
commite325460fadf6f2a5f98c528ba4c5ee2758efbdac (patch)
tree727f0420d03767ee8fc92a7f767e51355c141dc7 /config/src/tests/subscription
parent3b94a726a38ecf74a83084a70d378f31076130de (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.cpp85
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());
}