Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Tests for the getenv library (context part)
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : *
8 : */
9 :
10 : #include <gtest/gtest.h>
11 : #include <kdbgetenv.h>
12 :
13 : namespace ckdb
14 : {
15 : Key * elektraLookupWithContext (std::string name);
16 : }
17 :
18 : using namespace ckdb;
19 :
20 20 : TEST (Context, Exist)
21 : {
22 : Key * k;
23 2 : elektraOpen (nullptr, nullptr);
24 2 : ksAppendKey (elektraConfig, k = keyNew ("user/elektra/intercept/getenv/override/does-exist", KEY_VALUE, "hello", KEY_END));
25 8 : Key * f = elektraLookupWithContext ("user/elektra/intercept/getenv/override/does-exist");
26 4 : EXPECT_EQ (k, f);
27 2 : }
28 :
29 :
30 20 : TEST (Context, ExistWithContext)
31 : {
32 : Key * k;
33 2 : elektraOpen (nullptr, nullptr);
34 2 : ksAppendKey (elektraConfig, k = keyNew ("user/elektra/intercept/getenv/override/does-exist", KEY_VALUE, "hello", KEY_END));
35 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
36 2 : "user/elektra/intercept/getenv/override/does-exist", KEY_VALUE, "hello", KEY_END));
37 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
38 4 : EXPECT_EQ (k, f);
39 2 : }
40 :
41 :
42 20 : TEST (Context, ExistWithContextCascading)
43 : {
44 : Key * k;
45 2 : elektraOpen (nullptr, nullptr);
46 2 : ksAppendKey (elektraConfig, k = keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
47 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
48 2 : "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
49 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
50 4 : EXPECT_EQ (k, f);
51 2 : }
52 :
53 : namespace ckdb
54 : {
55 : void addLayers ();
56 : }
57 :
58 20 : TEST (Context, ExistWithContextOverrideCascading)
59 : {
60 : Key * k;
61 2 : elektraOpen (nullptr, nullptr);
62 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/layer", KEY_VALUE, "layer", KEY_END));
63 2 : addLayers ();
64 :
65 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
66 2 : ksAppendKey (elektraConfig,
67 4 : k = keyNew ("user/elektra/intercept/getenv/override/layer/does-exist-too", KEY_VALUE, "correct", KEY_END));
68 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
69 : "/elektra/intercept/getenv/override/%layer%/does-exist-too", KEY_META, "override/#0",
70 2 : "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
71 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
72 4 : EXPECT_EQ (k, f);
73 2 : }
74 :
75 20 : TEST (Context, ExistWithContextOverrideCascadingSystem)
76 : {
77 : Key * k;
78 2 : elektraOpen (nullptr, nullptr);
79 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/layer", KEY_VALUE, "layer", KEY_END));
80 2 : ksAppendKey (elektraConfig, keyNew ("system/elektra/intercept/getenv/layer/layer", KEY_VALUE, "systemlayer", KEY_END));
81 2 : addLayers ();
82 :
83 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
84 2 : ksAppendKey (elektraConfig,
85 4 : k = keyNew ("user/elektra/intercept/getenv/override/layer/does-exist-too", KEY_VALUE, "correct", KEY_END));
86 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
87 : "/elektra/intercept/getenv/override/%layer%/does-exist-too", KEY_META, "override/#0",
88 2 : "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
89 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
90 4 : EXPECT_EQ (k, f);
91 2 : }
92 :
93 :
94 20 : TEST (Context, ExistWithContextOverrideCascadingDir)
95 : {
96 : Key * k;
97 2 : elektraOpen (nullptr, nullptr);
98 2 : ksAppendKey (elektraConfig, keyNew ("dir/elektra/intercept/getenv/layer/layer", KEY_VALUE, "layer", KEY_END));
99 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/layer", KEY_VALUE, "userlayer", KEY_END));
100 2 : addLayers ();
101 :
102 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
103 2 : ksAppendKey (elektraConfig,
104 4 : k = keyNew ("user/elektra/intercept/getenv/override/layer/does-exist-too", KEY_VALUE, "correct", KEY_END));
105 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
106 : "/elektra/intercept/getenv/override/%layer%/does-exist-too", KEY_META, "override/#0",
107 2 : "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
108 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
109 4 : EXPECT_EQ (k, f);
110 2 : }
111 :
112 20 : TEST (Context, ExistWithContextOverrideCascadingProc)
113 : {
114 : Key * k;
115 2 : elektraOpen (nullptr, nullptr);
116 2 : ksAppendKey (elektraConfig, keyNew ("proc/elektra/intercept/getenv/layer/layer", KEY_VALUE, "layer", KEY_END));
117 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/layer", KEY_VALUE, "userlayer", KEY_END));
118 2 : addLayers ();
119 :
120 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
121 2 : ksAppendKey (elektraConfig,
122 4 : k = keyNew ("user/elektra/intercept/getenv/override/layer/does-exist-too", KEY_VALUE, "correct", KEY_END));
123 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
124 : "/elektra/intercept/getenv/override/%layer%/does-exist-too", KEY_META, "override/#0",
125 2 : "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
126 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
127 4 : EXPECT_EQ (k, f);
128 2 : }
129 :
130 20 : TEST (Context, ExistWithContextOverrideCascadingWithSlash)
131 : {
132 : Key * k;
133 2 : elektraOpen (nullptr, nullptr);
134 2 : ksAppendKey (elektraConfig, keyNew ("proc/elektra/intercept/getenv/layer/layer/name", KEY_VALUE, "layer/value", KEY_END));
135 2 : addLayers ();
136 :
137 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
138 2 : ksAppendKey (elektraConfig,
139 4 : k = keyNew ("user/elektra/intercept/getenv/override/layer/value/does-exist-too", KEY_VALUE, "correct", KEY_END));
140 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
141 : "/elektra/intercept/getenv/override/%layer/name%/does-exist-too", KEY_META, "override/#0",
142 2 : "/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "hello", KEY_END));
143 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
144 4 : EXPECT_EQ (k, f);
145 2 : }
146 :
147 :
148 20 : TEST (Context, NameExplicit)
149 : {
150 : using namespace ckdb;
151 2 : int argc = 2;
152 2 : const char * cargv[] = { "any-name", "--elektra%name%=other-name", "--elektra%layer%=layer" };
153 2 : char ** argv = const_cast<char **> (cargv);
154 :
155 2 : elektraOpen (&argc, argv);
156 2 : ksAppendKey (elektraConfig, keyNew ("system/somewhere/other-name/layer/does-exist", KEY_VALUE, "hello", KEY_END));
157 2 : ksAppendKey (elektraConfig, keyNew ("system/elektra/intercept/getenv/override/akey", KEY_META, "context",
158 2 : "/somewhere/%name%/%layer%/does-exist", KEY_END));
159 2 : elektraClose ();
160 2 : }
161 :
162 20 : TEST (Context, ExistWithContextOverrideCascadingOverrideUser)
163 : {
164 : Key * k;
165 2 : elektraOpen (nullptr, nullptr);
166 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/layer/hostname", KEY_VALUE, "wrongname", KEY_END));
167 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/layer/hostname", KEY_META, "override/#0",
168 2 : "system/syscall/uname/hostname", KEY_END));
169 2 : ksAppendKey (elektraConfig, keyNew ("system/syscall/uname/hostname", KEY_VALUE, "localhost", KEY_END));
170 2 : addLayers ();
171 :
172 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
173 2 : ksAppendKey (elektraConfig,
174 4 : k = keyNew ("user/elektra/intercept/getenv/override/localhost/does-exist-too", KEY_VALUE, "correct", KEY_END));
175 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
176 2 : "/elektra/intercept/getenv/override/%hostname%/does-exist-too", KEY_VALUE, "hello", KEY_END));
177 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
178 4 : EXPECT_EQ (k, f);
179 2 : }
180 :
181 20 : TEST (Context, ExistWithContextOverrideCascadingOverrideSystem)
182 : {
183 : Key * k;
184 2 : elektraOpen (nullptr, nullptr);
185 2 : ksAppendKey (elektraConfig, keyNew ("system/elektra/intercept/getenv/layer/hostname", KEY_VALUE, "wrongname", KEY_END));
186 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/layer/hostname", KEY_META, "override/#0",
187 2 : "system/syscall/uname/hostname", KEY_END));
188 2 : ksAppendKey (elektraConfig, keyNew ("system/syscall/uname/hostname", KEY_VALUE, "localhost", KEY_END));
189 2 : addLayers ();
190 :
191 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
192 2 : ksAppendKey (elektraConfig,
193 4 : k = keyNew ("user/elektra/intercept/getenv/override/localhost/does-exist-too", KEY_VALUE, "correct", KEY_END));
194 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
195 2 : "/elektra/intercept/getenv/override/%hostname%/does-exist-too", KEY_VALUE, "hello", KEY_END));
196 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
197 4 : EXPECT_EQ (k, f);
198 2 : }
199 :
200 20 : TEST (Context, ExistWithContextOverrideCascadingOverride)
201 : {
202 : Key * k;
203 2 : elektraOpen (nullptr, nullptr);
204 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/layer/hostname", KEY_META, "override/#0",
205 2 : "system/syscall/uname/hostname", KEY_END));
206 2 : ksAppendKey (elektraConfig, keyNew ("system/syscall/uname/hostname", KEY_VALUE, "localhost", KEY_END));
207 2 : addLayers ();
208 :
209 2 : ksAppendKey (elektraConfig, keyNew ("user/elektra/intercept/getenv/override/does-exist-too", KEY_VALUE, "wrong", KEY_END));
210 2 : ksAppendKey (elektraConfig,
211 4 : k = keyNew ("user/elektra/intercept/getenv/override/localhost/does-exist-too", KEY_VALUE, "correct", KEY_END));
212 2 : ksAppendKey (elektraConfig, keyNew ("spec/elektra/intercept/getenv/override/does-exist", KEY_META, "context",
213 2 : "/elektra/intercept/getenv/override/%hostname%/does-exist-too", KEY_VALUE, "hello", KEY_END));
214 8 : Key * f = elektraLookupWithContext ("/elektra/intercept/getenv/override/does-exist");
215 4 : EXPECT_EQ (k, f);
216 2 : }
217 :
218 :
219 : #include "main.cpp"
|