aboutsummaryrefslogtreecommitdiffstats
path: root/config/src/tests/configuri/configuri_test.cpp
blob: e4b3ea061951bebd56ccbdd15ef918115f8e3748 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/testkit/test_kit.h>
#include <vespa/config/common/configcontext.h>
#include <vespa/config/subscription/configsubscriber.hpp>
#include <vespa/config/subscription/configuri.h>
#include "config-my.h"

using namespace config;

namespace {

void assertConfigId(const std::string & expected, const ConfigUri & uri) {
    ASSERT_EQUAL(expected, uri.getConfigId());
}

}
TEST("Require that URI can be created from const char *") {
    assertConfigId("foo/bar", ConfigUri("foo/bar"));
    assertConfigId("myfile", ConfigUri("file:myfile.cfg"));
    assertConfigId("", ConfigUri("raw:myraw"));
    assertConfigId("", ConfigUri("dir:."));
}

TEST("Require that URI can be created from std::string") {
    assertConfigId("foo/bar", ConfigUri(std::string("foo/bar")));
    assertConfigId("myfile", ConfigUri(std::string("file:myfile.cfg")));
    assertConfigId("", ConfigUri(std::string("raw:myraw")));
    assertConfigId("", ConfigUri(std::string("dir:.")));
}

TEST("Require that URI can be created from vespalib::string") {
    assertConfigId("foo/bar", ConfigUri(vespalib::string("foo/bar")));
    assertConfigId("myfile", ConfigUri(vespalib::string("file:myfile.cfg")));
    assertConfigId("", ConfigUri(vespalib::string("raw:myraw")));
    assertConfigId("", ConfigUri(vespalib::string("dir:.")));
}

TEST("Require that URI can be created from  instance") {
    MyConfigBuilder b;
    b.myField = "rabarbra";
    ConfigUri uri(ConfigUri::createFromInstance(b));
    ConfigSubscriber subscriber(uri.getContext());
    ConfigHandle<MyConfig>::UP handle = subscriber.subscribe<MyConfig>(uri.getConfigId());
    ASSERT_TRUE(subscriber.nextConfigNow());
    ASSERT_TRUE(handle->isChanged());
    std::unique_ptr<MyConfig> cfg = handle->getConfig();
    ASSERT_EQUAL(b.myField, cfg->myField);

}

TEST_F("Require that URI can be \"forked\"", std::shared_ptr<IConfigContext>(std::make_shared<ConfigContext>())) {
    assertConfigId("baz", ConfigUri("foo/bar").createWithNewId("baz"));
    ConfigUri parent("foo", f1);
    ConfigUri child = parent.createWithNewId("baz");
    ASSERT_TRUE(parent.getContext().get() == child.getContext().get());
}

TEST_MAIN() { TEST_RUN_ALL(); }