// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include #include #include "config-my.h" #include "config-foo.h" #include "config-bar.h" #include #include LOG_SETUP("unittest"); using namespace config; namespace { void verifyConfig(const std::string & expected, std::unique_ptr cfg) { ASSERT_TRUE(cfg); ASSERT_EQUAL(expected, cfg->fooValue); } void verifyConfig(const std::string & expected, std::unique_ptr cfg) { ASSERT_TRUE(cfg); ASSERT_EQUAL(expected, cfg->barValue); } } #if 0 TEST("requireThatUnitTestsCanBeCreated") { MyConfigBuilder builder; builder.myField = "myval"; ConfigSet set; set.addBuilder("myid", &builder); std::unique_ptr cfg = ConfigGetter::getConfig("myid", set); } #endif TEST("requireThatConfigCanBeReloaded") { ConfigSet set; auto ctx = std::make_shared(set); MyConfigBuilder builder; builder.myField = "myfoo"; set.addBuilder("myid", &builder); ConfigSubscriber subscriber(ctx); ConfigHandle::UP handle = subscriber.subscribe("myid"); ASSERT_TRUE(subscriber.nextConfigNow()); std::unique_ptr cfg(handle->getConfig()); ASSERT_TRUE(cfg); ASSERT_EQUAL("myfoo", cfg->myField); ctx->reload(); ASSERT_FALSE(subscriber.nextConfig(1000ms)); builder.myField = "foobar"; ctx->reload(); ASSERT_TRUE(subscriber.nextConfig(10000ms)); cfg = handle->getConfig(); ASSERT_TRUE(cfg); ASSERT_EQUAL("foobar", cfg->myField); } TEST("requireThatCanSubscribeWithSameIdToDifferentDefs") { ConfigSet set; auto ctx = std::make_shared(set); FooConfigBuilder fooBuilder; BarConfigBuilder barBuilder; fooBuilder.fooValue = "myfoo"; barBuilder.barValue = "mybar"; set.addBuilder("fooid", &fooBuilder); set.addBuilder("fooid", &barBuilder); ConfigSubscriber subscriber(ctx); ConfigHandle::UP h1 = subscriber.subscribe("fooid"); ConfigHandle::UP h2 = subscriber.subscribe("fooid"); ASSERT_TRUE(subscriber.nextConfigNow()); verifyConfig("myfoo", h1->getConfig()); verifyConfig("mybar", h2->getConfig()); ctx->reload(); ASSERT_FALSE(subscriber.nextConfig(100ms)); fooBuilder.fooValue = "blabla"; ctx->reload(); ASSERT_TRUE(subscriber.nextConfig(5000ms)); verifyConfig("blabla", h1->getConfig()); verifyConfig("mybar", h2->getConfig()); barBuilder.barValue = "blabar"; ctx->reload(); ASSERT_TRUE(subscriber.nextConfig(5000ms)); verifyConfig("blabla", h1->getConfig()); verifyConfig("blabar", h2->getConfig()); } TEST_MAIN() { TEST_RUN_ALL(); }