1 // Copyright (C) 2018-2020 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #include <config.h>
8 #include <cc/user_context.h>
9 #include <gtest/gtest.h>
10 
11 using namespace isc::data;
12 
13 namespace {
14 
gen()15 ElementPtr gen() {
16     std::string content = "{ \"foo\": 1, \"bar\": \"xyz\" }";
17     return (Element::fromJSON(content));
18 }
19 
TEST(UserContext,setget)20 TEST(UserContext, setget) {
21     UserContext parent;
22     EXPECT_FALSE(parent.getContext());
23     ConstElementPtr map = gen();
24     parent.setContext(map);
25     ConstElementPtr ctx = parent.getContext();
26     EXPECT_EQ(*ctx, *map);
27 }
28 
TEST(UserContext,null)29 TEST(UserContext, null) {
30     UserContext parent;
31     ElementPtr map = gen();
32     parent.contextToElement(map);
33     ElementPtr expected = gen();
34     EXPECT_EQ(*expected, *map);
35 }
36 
TEST(UserContext,notMap)37 TEST(UserContext, notMap) {
38     UserContext parent;
39     ConstElementPtr ctx = Element::create("foo");
40     parent.setContext(ctx);
41     ElementPtr map = gen();
42     parent.contextToElement(map);
43     ElementPtr expected = gen();
44     expected->set("user-context", ctx);
45     EXPECT_EQ(*expected, *map);
46 }
47 
TEST(UserContext,empty)48 TEST(UserContext, empty) {
49     UserContext parent;
50     ConstElementPtr ctx = Element::createMap();
51     parent.setContext(ctx);
52     ElementPtr map = gen();
53     parent.contextToElement(map);
54     ElementPtr expected = gen();
55     expected->set("user-context", ctx);
56     EXPECT_EQ(*expected, *map);
57 }
58 
TEST(UserContext,noComment)59 TEST(UserContext, noComment) {
60     UserContext parent;
61     ConstElementPtr ctx = Element::fromJSON("{ \"version\": 1 }");
62     parent.setContext(ctx);
63     ElementPtr map = gen();
64     parent.contextToElement(map);
65     ElementPtr expected = gen();
66     expected->set("user-context", ctx);
67     EXPECT_EQ(*expected, *map);
68 };
69 
TEST(UserContext,onlyComment)70 TEST(UserContext, onlyComment) {
71     UserContext parent;
72     ConstElementPtr ctx = Element::fromJSON("{ \"comment\": \"foobar\" }");
73     parent.setContext(ctx);
74     ElementPtr map = gen();
75     parent.contextToElement(map);
76     ElementPtr expected = gen();
77     expected->set("user-context", ctx);
78     EXPECT_EQ(*expected, *map);
79 }
80 
TEST(UserContext,both)81 TEST(UserContext, both) {
82     UserContext parent;
83     ConstElementPtr ctx =
84         Element::fromJSON("{ \"comment\": \"foobar\", \"version\": 1 }");
85     parent.setContext(ctx);
86     ElementPtr map = gen();
87     parent.contextToElement(map);
88     ElementPtr expected = gen();
89     expected->set("user-context", ctx);
90     EXPECT_EQ(*expected, *map);
91 }
92 
TEST(toElement,notMap)93 TEST(toElement, notMap) {
94     ConstElementPtr arg = Element::create("foo");
95     ConstElementPtr result = UserContext::toElement(arg);
96     EXPECT_EQ(*result, *arg);
97 }
98 
TEST(toElement,empty)99 TEST(toElement, empty) {
100     ElementPtr map = gen();
101     ConstElementPtr ctx = Element::createMap();
102     map->set("user-context", ctx);
103     ConstElementPtr result = UserContext::toElement(map);
104     EXPECT_EQ(*result, *map);
105 }
106 
TEST(toElement,noComment)107 TEST(toElement, noComment) {
108     ElementPtr map = gen();
109     ConstElementPtr ctx = Element::fromJSON("{ \"version\": 1 }");
110     map->set("user-context", ctx);
111     ConstElementPtr result = UserContext::toElement(map);
112     EXPECT_EQ(*result, *map);
113 }
114 
TEST(toElement,onlyComment)115 TEST(toElement, onlyComment) {
116     ElementPtr map = gen();
117     ConstElementPtr ctx = Element::fromJSON("{ \"comment\": \"foobar\" }");
118     map->set("user-context", ctx);
119     ConstElementPtr result = UserContext::toElement(map);
120     EXPECT_EQ(*result, *map);
121 }
122 
TEST(toElement,both)123 TEST(toElement, both) {
124     ElementPtr map = gen();
125     ConstElementPtr ctx =
126         Element::fromJSON("{ \"comment\": \"foobar\", \"version\": 1 }");
127     map->set("user-context", ctx);
128     ConstElementPtr result = UserContext::toElement(map);
129     EXPECT_EQ(*result, *map);
130 }
131 
132 }
133