1 // Copyright (C) 2018-2021 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 #ifndef ISC_YANG_CONFIGS_H
8 #define ISC_YANG_CONFIGS_H
9 
10 #include <yang/yang_models.h>
11 #include <yang/testutils/translator_test.h>
12 
13 namespace isc {
14 namespace yang {
15 namespace test {
16 
17 /// @brief The test module from sysrepo tests.
18 const std::string testModel = "keatest-module";
19 const YRTree testTree = YangRepr::buildTreeFromVector({
20     { "/keatest-module:container", "", SR_CONTAINER_T, false },
21     { "/keatest-module:main", "", SR_CONTAINER_T, false },
22     { "/keatest-module:main/string", "str", SR_STRING_T, true },
23     { "/keatest-module:main/boolean", "true", SR_BOOL_T, true },
24     { "/keatest-module:main/ui8", "8", SR_UINT8_T, true },
25     { "/keatest-module:main/ui16", "16", SR_UINT16_T, true },
26     { "/keatest-module:main/ui32", "32", SR_UINT32_T, true },
27     { "/keatest-module:main/i8", "8", SR_INT8_T, true },
28     { "/keatest-module:main/i16", "16", SR_INT16_T, true },
29     { "/keatest-module:main/i32", "32", SR_INT32_T, true },
30     { "/keatest-module:main/id_ref", "keatest-module:id_1",
31       SR_IDENTITYREF_T, true },
32     { "/keatest-module:main/enum", "maybe", SR_ENUM_T, true },
33     { "/keatest-module:main/raw", "Zm9vYmFy", SR_BINARY_T, true },
34     { "/keatest-module:kernel-modules", "", SR_CONTAINER_T, false }
35 });
36 
37 /// @brief A subnet with two pools with ietf-dhcpv6-server model.
38 const std::string subnetTwoPoolsModelIetf6 = IETF_DHCPV6_SERVER;
39 const YRTree subnetTwoPoolsTreeIetf6 = YangRepr::buildTreeFromVector({
40     { "/ietf-dhcpv6-server:server", "", SR_CONTAINER_PRESENCE_T, false },
41     { "/ietf-dhcpv6-server:server/server-config", "", SR_CONTAINER_T, false },
42     { "/ietf-dhcpv6-server:server/server-config/network-ranges",
43       "", SR_CONTAINER_T, false },
44     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
45       "network-range[network-range-id='111']", "", SR_LIST_T, false },
46     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
47       "network-range[network-range-id='111']/network-range-id",
48       "111", SR_UINT32_T, false },
49     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
50       "network-range[network-range-id='111']/network-prefix",
51       "2001:db8::/48", SR_STRING_T, true },
52     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
53       "network-range[network-range-id='111']/address-pools/"
54       "address-pool[pool-id='0']", "", SR_LIST_T, false },
55     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
56       "network-range[network-range-id='111']/address-pools/"
57       "address-pool[pool-id='0']/pool-id", "0", SR_UINT32_T, false },
58     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
59       "network-range[network-range-id='111']/address-pools/"
60       "address-pool[pool-id='0']/pool-prefix",
61       "2001:db8::1:0/112", SR_STRING_T, true },
62     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
63       "network-range[network-range-id='111']/address-pools/"
64       "address-pool[pool-id='0']/start-address",
65       "2001:db8::1:0", SR_STRING_T, true },
66     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
67       "network-range[network-range-id='111']/address-pools/"
68       "address-pool[pool-id='0']/end-address",
69       "2001:db8::1:ffff", SR_STRING_T, true },
70     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
71       "network-range[network-range-id='111']/address-pools/"
72       "address-pool[pool-id='0']/max-address-count",
73       "disabled", SR_ENUM_T, true },
74     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
75       "network-range[network-range-id='111']/address-pools/"
76       "address-pool[pool-id='1']", "", SR_LIST_T, false },
77     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
78       "network-range[network-range-id='111']/address-pools/"
79       "address-pool[pool-id='1']/pool-id", "1", SR_UINT32_T, false },
80     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
81       "network-range[network-range-id='111']/address-pools/"
82       "address-pool[pool-id='1']/pool-prefix",
83       "2001:db8::2:0/112", SR_STRING_T, true },
84     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
85       "network-range[network-range-id='111']/address-pools/"
86       "address-pool[pool-id='1']/start-address",
87       "2001:db8::2:0", SR_STRING_T, true },
88     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
89       "network-range[network-range-id='111']/address-pools/"
90       "address-pool[pool-id='1']/end-address",
91       "2001:db8::2:ffff", SR_STRING_T, true },
92     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
93       "network-range[network-range-id='111']/address-pools/"
94       "address-pool[pool-id='1']/max-address-count",
95       "disabled", SR_ENUM_T, true },
96     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/duid/type-code",
97       "65535", SR_UINT16_T, false },
98     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
99       "network-range[network-range-id='111']/address-pools",
100       "", SR_CONTAINER_T, false },
101     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
102       "network-range[network-range-id='111']/pd-pools",
103       "", SR_CONTAINER_T, false },
104     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
105       "network-range[network-range-id='111']/host-reservations",
106       "", SR_CONTAINER_T, false },
107     { "/ietf-dhcpv6-server:server/server-config/serv-attributes",
108       "", SR_CONTAINER_T, false },
109     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/duid",
110       "", SR_CONTAINER_T, false },
111     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/lease-storage",
112       "", SR_CONTAINER_T, false },
113     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/vendor-info",
114       "", SR_CONTAINER_T, false },
115     { "/ietf-dhcpv6-server:server/server-config/option-sets",
116       "", SR_CONTAINER_T, false },
117     { "/ietf-dhcpv6-server:server/server-config/relay-opaque-paras",
118       "", SR_CONTAINER_T, false },
119     { "/ietf-dhcpv6-server:server/server-config/rsoo-enabled-options",
120       "", SR_CONTAINER_T, false },
121 });
122 
123 /// @brief A subnet with timers with ietf-dhcpv6-server model.
124 const std::string subnetTimersModel = IETF_DHCPV6_SERVER;
125 const YRTree subnetTimersIetf6 = YangRepr::buildTreeFromVector({
126     { "/ietf-dhcpv6-server:server", "", SR_CONTAINER_PRESENCE_T, false },
127     { "/ietf-dhcpv6-server:server/server-config", "", SR_CONTAINER_T, false },
128     { "/ietf-dhcpv6-server:server/server-config/network-ranges",
129       "", SR_CONTAINER_T, false },
130     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
131       "network-range[network-range-id='111']", "", SR_LIST_T, false },
132     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
133       "network-range[network-range-id='111']/network-range-id",
134       "111", SR_UINT32_T, false },
135     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
136       "network-range[network-range-id='111']/network-prefix",
137       "2001:db8::/48", SR_STRING_T, true },
138     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
139       "network-range[network-range-id='111']/address-pools/"
140       "address-pool[pool-id='0']", "", SR_LIST_T, false },
141     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
142       "network-range[network-range-id='111']/address-pools/"
143       "address-pool[pool-id='0']/pool-id", "0", SR_UINT32_T, false },
144     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
145       "network-range[network-range-id='111']/address-pools/"
146       "address-pool[pool-id='0']/pool-prefix",
147       "2001:db8::1:0/112", SR_STRING_T, true },
148     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
149       "network-range[network-range-id='111']/address-pools/"
150       "address-pool[pool-id='0']/start-address",
151       "2001:db8::1:0", SR_STRING_T, true },
152     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
153       "network-range[network-range-id='111']/address-pools/"
154       "address-pool[pool-id='0']/end-address",
155       "2001:db8::1:ffff", SR_STRING_T, true },
156     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
157       "network-range[network-range-id='111']/address-pools/"
158       "address-pool[pool-id='0']/renew-time", "1000", SR_UINT32_T, true },
159     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
160       "network-range[network-range-id='111']/address-pools/"
161       "address-pool[pool-id='0']/rebind-time", "2000", SR_UINT32_T, true },
162     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
163       "network-range[network-range-id='111']/address-pools/"
164       "address-pool[pool-id='0']/max-address-count",
165       "disabled", SR_ENUM_T, true },
166     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
167       "network-range[network-range-id='111']/address-pools/"
168       "address-pool[pool-id='1']", "", SR_LIST_T, false },
169     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
170       "network-range[network-range-id='111']/address-pools/"
171       "address-pool[pool-id='1']/pool-id", "1", SR_UINT32_T, false },
172     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
173       "network-range[network-range-id='111']/address-pools/"
174       "address-pool[pool-id='1']/pool-prefix",
175       "2001:db8::2:0/112", SR_STRING_T, true },
176     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
177       "network-range[network-range-id='111']/address-pools/"
178       "address-pool[pool-id='1']/start-address",
179       "2001:db8::2:0", SR_STRING_T, true },
180     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
181       "network-range[network-range-id='111']/address-pools/"
182       "address-pool[pool-id='1']/end-address",
183       "2001:db8::2:ffff", SR_STRING_T, true },
184     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
185       "network-range[network-range-id='111']/address-pools/"
186       "address-pool[pool-id='1']/renew-time", "1000", SR_UINT32_T, true },
187     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
188       "network-range[network-range-id='111']/address-pools/"
189       "address-pool[pool-id='1']/rebind-time", "2000", SR_UINT32_T, true },
190     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
191       "network-range[network-range-id='111']/address-pools/"
192       "address-pool[pool-id='1']/max-address-count",
193       "disabled", SR_ENUM_T, true },
194     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/duid/type-code",
195       "65535", SR_UINT16_T, false },
196     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
197       "network-range[network-range-id='111']/address-pools",
198       "", SR_CONTAINER_T, false },
199     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
200       "network-range[network-range-id='111']/pd-pools",
201       "", SR_CONTAINER_T, false },
202     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
203       "network-range[network-range-id='111']/host-reservations",
204       "", SR_CONTAINER_T, false },
205     { "/ietf-dhcpv6-server:server/server-config/serv-attributes",
206       "", SR_CONTAINER_T, false },
207     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/duid",
208       "", SR_CONTAINER_T, false },
209     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/lease-storage",
210       "", SR_CONTAINER_T, false },
211     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/vendor-info",
212       "", SR_CONTAINER_T, false },
213     { "/ietf-dhcpv6-server:server/server-config/option-sets",
214       "", SR_CONTAINER_T, false },
215     { "/ietf-dhcpv6-server:server/server-config/relay-opaque-paras",
216       "", SR_CONTAINER_T, false },
217     { "/ietf-dhcpv6-server:server/server-config/rsoo-enabled-options",
218       "", SR_CONTAINER_T, false },
219 });
220 
221 /// @brief A subnet with two pools with ietf-dhcpv6-server model
222 /// which validates.
223 const std::string validModelIetf6 = IETF_DHCPV6_SERVER;
224 const YRTree validTreeIetf6 = YangRepr::buildTreeFromVector({
225     { "/ietf-dhcpv6-server:server", "", SR_CONTAINER_PRESENCE_T, false },
226     { "/ietf-dhcpv6-server:server/server-config", "", SR_CONTAINER_T, false },
227     { "/ietf-dhcpv6-server:server/server-config/serv-attributes",
228       "", SR_CONTAINER_T, false },
229     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/vendor-info",
230       "", SR_CONTAINER_T, false },
231     { "/ietf-dhcpv6-server:server/server-config/serv-attributes"
232       "/vendor-info/ent-num", "2495", SR_UINT32_T, true },
233     { "/ietf-dhcpv6-server:server/server-config/option-sets",
234       "", SR_CONTAINER_T, false },
235     { "/ietf-dhcpv6-server:server/server-config/option-sets"
236       "/option-set[option-set-id='0']", "", SR_LIST_T, false },
237     { "/ietf-dhcpv6-server:server/server-config/option-sets"
238       "/option-set[option-set-id='0']/option-set-id",
239       "0", SR_UINT32_T, true },
240     { "/ietf-dhcpv6-server:server/server-config/network-ranges",
241       "", SR_CONTAINER_T, false },
242     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
243       "network-range[network-range-id='111']", "", SR_LIST_T, false },
244     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
245       "network-range[network-range-id='111']/network-range-id",
246       "111", SR_UINT32_T, false },
247     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
248       "network-range[network-range-id='111']/network-description",
249       "Subnet#111", SR_STRING_T, true },
250     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
251       "network-range[network-range-id='111']/network-prefix",
252       "2001:db8::/48", SR_STRING_T, true },
253     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
254       "network-range[network-range-id='111']/pd-pools/"
255       "pd-pool[pool-id='0']", "", SR_LIST_T, false },
256     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
257       "network-range[network-range-id='111']/pd-pools/"
258       "pd-pool[pool-id='0']/pool-id", "0", SR_UINT32_T, false },
259     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
260       "network-range[network-range-id='111']/pd-pools/"
261       "pd-pool[pool-id='0']/prefix",
262       "2001:db8:1::/48", SR_STRING_T, true },
263     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
264       "network-range[network-range-id='111']/pd-pools/"
265       "pd-pool[pool-id='0']/prefix-length", "48", SR_UINT8_T, true },
266     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
267       "network-range[network-range-id='111']/pd-pools/"
268       "pd-pool[pool-id='0']/valid-lifetime", "4000", SR_UINT32_T, true },
269     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
270       "network-range[network-range-id='111']/pd-pools/"
271       "pd-pool[pool-id='0']/preferred-lifetime",
272       "3000", SR_UINT32_T, true },
273     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
274       "network-range[network-range-id='111']/pd-pools/"
275       "pd-pool[pool-id='0']/renew-time", "1000", SR_UINT32_T, true },
276     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
277       "network-range[network-range-id='111']/pd-pools/"
278       "pd-pool[pool-id='0']/rebind-time", "2000", SR_UINT32_T, true },
279     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
280       "network-range[network-range-id='111']/pd-pools/"
281       "pd-pool[pool-id='0']/rapid-commit", "false", SR_BOOL_T, true },
282     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
283       "network-range[network-range-id='111']/pd-pools/"
284       "pd-pool[pool-id='0']/option-set-id", "0", SR_UINT32_T, true },
285     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
286       "network-range[network-range-id='111']/pd-pools/"
287       "pd-pool[pool-id='0']/max-pd-space-utilization",
288       "disabled", SR_ENUM_T, true },
289     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
290       "network-range[network-range-id='111']/pd-pools/"
291       "pd-pool[pool-id='1']", "", SR_LIST_T, false },
292     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
293       "network-range[network-range-id='111']/pd-pools/"
294       "pd-pool[pool-id='1']/pool-id", "1", SR_UINT32_T, false },
295     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
296       "network-range[network-range-id='111']/pd-pools/"
297       "pd-pool[pool-id='1']/prefix",
298       "2001:db8:2::/48", SR_STRING_T, true },
299     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
300       "network-range[network-range-id='111']/pd-pools/"
301       "pd-pool[pool-id='1']/prefix-length", "48", SR_UINT8_T, true },
302     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
303       "network-range[network-range-id='111']/pd-pools/"
304       "pd-pool[pool-id='1']/valid-lifetime", "4000", SR_UINT32_T, true },
305     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
306       "network-range[network-range-id='111']/pd-pools/"
307       "pd-pool[pool-id='1']/preferred-lifetime",
308       "3000", SR_UINT32_T, true },
309     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
310       "network-range[network-range-id='111']/pd-pools/"
311       "pd-pool[pool-id='1']/renew-time", "1000", SR_UINT32_T, true },
312     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
313       "network-range[network-range-id='111']/pd-pools/"
314       "pd-pool[pool-id='1']/rebind-time", "2000", SR_UINT32_T, true },
315     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
316       "network-range[network-range-id='111']/pd-pools/"
317       "pd-pool[pool-id='1']/rapid-commit", "false", SR_BOOL_T, true },
318     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
319       "network-range[network-range-id='111']/pd-pools/"
320       "pd-pool[pool-id='1']/option-set-id", "0", SR_UINT32_T, true },
321     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
322       "network-range[network-range-id='111']/pd-pools/"
323       "pd-pool[pool-id='1']/max-pd-space-utilization",
324       "disabled", SR_ENUM_T, true },
325     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/duid/type-code",
326       "65535", SR_UINT16_T, false },
327     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
328       "network-range[network-range-id='111']/address-pools",
329       "", SR_CONTAINER_T, false },
330     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
331       "network-range[network-range-id='111']/pd-pools",
332       "", SR_CONTAINER_T, false },
333     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
334       "network-range[network-range-id='111']/host-reservations",
335       "", SR_CONTAINER_T, false },
336     { "/ietf-dhcpv6-server:server/server-config/serv-attributes",
337       "", SR_CONTAINER_T, false },
338     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/duid",
339       "", SR_CONTAINER_T, false },
340     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/lease-storage",
341       "", SR_CONTAINER_T, false },
342     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/vendor-info",
343       "", SR_CONTAINER_T, false },
344     { "/ietf-dhcpv6-server:server/server-config/option-sets",
345       "", SR_CONTAINER_T, false },
346     { "/ietf-dhcpv6-server:server/server-config/relay-opaque-paras",
347       "", SR_CONTAINER_T, false },
348     { "/ietf-dhcpv6-server:server/server-config/rsoo-enabled-options",
349       "", SR_CONTAINER_T, false },
350 });
351 
352 /// @brief A subnet with a pool and option data lists with
353 /// kea-dhcp4-server:config model.
354 const std::string subnetOptionsModelKeaDhcp4 = KEA_DHCP4_SERVER;
355 const YRTree subnetOptionsTreeKeaDhcp4 = YangRepr::buildTreeFromVector({
356     { "/kea-dhcp4-server:config", "", SR_CONTAINER_T, false },
357     { "/kea-dhcp4-server:config/subnet4[id='111']", "",
358       SR_LIST_T, false },
359     { "/kea-dhcp4-server:config/subnet4[id='111']/id",
360       "111", SR_UINT32_T, false },
361     { "/kea-dhcp4-server:config/subnet4[id='111']/"
362       "option-data[code='100'][space='dns']", "", SR_LIST_T, false },
363     { "/kea-dhcp4-server:config/subnet4[id='111']/"
364       "option-data[code='100'][space='dns']/code",
365       "100", SR_UINT8_T, false },
366     { "/kea-dhcp4-server:config/subnet4[id='111']/"
367       "option-data[code='100'][space='dns']/space",
368       "dns", SR_STRING_T, false },
369     { "/kea-dhcp4-server:config/subnet4[id='111']/"
370       "option-data[code='100'][space='dns']/data",
371       "12121212", SR_STRING_T, true },
372     { "/kea-dhcp4-server:config/subnet4[id='111']/"
373       "option-data[code='100'][space='dns']/csv-format",
374       "false", SR_BOOL_T, true },
375     { "/kea-dhcp4-server:config/subnet4[id='111']/"
376       "option-data[code='100'][space='dns']/always-send",
377       "false", SR_BOOL_T, true },
378     { "/kea-dhcp4-server:config/subnet4[id='111']/"
379       "pool[start-address='10.0.1.0'][end-address='10.0.1.255']",
380       "", SR_LIST_T, false },
381     { "/kea-dhcp4-server:config/subnet4[id='111']/"
382       "pool[start-address='10.0.1.0'][end-address='10.0.1.255']/start-address",
383       "10.0.1.0", SR_STRING_T, false },
384     { "/kea-dhcp4-server:config/subnet4[id='111']/"
385       "pool[start-address='10.0.1.0'][end-address='10.0.1.255']/end-address",
386       "10.0.1.255", SR_STRING_T, false },
387     { "/kea-dhcp4-server:config/subnet4[id='111']/"
388       "pool[start-address='10.0.1.0'][end-address='10.0.1.255']/prefix",
389       "10.0.1.0/24", SR_STRING_T, true },
390     { "/kea-dhcp4-server:config/subnet4[id='111']/subnet",
391       "10.0.0.0/8", SR_STRING_T, true },
392     { "/kea-dhcp4-server:config/expired-leases-processing",
393       "", SR_CONTAINER_T, false },
394     { "/kea-dhcp4-server:config/dhcp-ddns",
395       "", SR_CONTAINER_T, false },
396     { "/kea-dhcp4-server:config/config-control",
397       "", SR_CONTAINER_T, false },
398     { "/kea-dhcp4-server:config/sanity-checks",
399       "", SR_CONTAINER_T, false },
400     { "/kea-dhcp4-server:config/interfaces-config",
401       "", SR_CONTAINER_T, false },
402     { "/kea-dhcp4-server:config/subnet4[id='111']/relay",
403       "", SR_CONTAINER_T, false },
404 });
405 
406 /// @brief A subnet with a pool and option data lists with
407 /// kea-dhcp6-server:config model.
408 const std::string subnetOptionsModelKeaDhcp6 = KEA_DHCP6_SERVER;
409 const YRTree subnetOptionsTreeKeaDhcp6 = YangRepr::buildTreeFromVector({
410     { "/kea-dhcp6-server:config", "", SR_CONTAINER_T, false },
411     { "/kea-dhcp6-server:config/subnet6[id='111']", "",
412       SR_LIST_T, false },
413     { "/kea-dhcp6-server:config/subnet6[id='111']/id",
414       "111", SR_UINT32_T, false },
415     { "/kea-dhcp6-server:config/subnet6[id='111']/"
416       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']",
417       "", SR_LIST_T, false },
418     { "/kea-dhcp6-server:config/subnet6[id='111']/"
419       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
420       "start-address", "2001:db8::1:0", SR_STRING_T, false },
421     { "/kea-dhcp6-server:config/subnet6[id='111']/"
422       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
423       "end-address", "2001:db8::1:ffff", SR_STRING_T, false },
424     { "/kea-dhcp6-server:config/subnet6[id='111']/"
425       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
426       "prefix", "2001:db8::1:0/112", SR_STRING_T, true },
427     { "/kea-dhcp6-server:config/subnet6[id='111']/"
428       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
429       "option-data[code='100'][space='dns']",
430       "", SR_LIST_T, false },
431     { "/kea-dhcp6-server:config/subnet6[id='111']/"
432       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
433       "option-data[code='100'][space='dns']/code",
434       "100", SR_UINT16_T, false },
435     { "/kea-dhcp6-server:config/subnet6[id='111']/"
436       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
437       "option-data[code='100'][space='dns']/space",
438       "dns", SR_STRING_T, false },
439     { "/kea-dhcp6-server:config/subnet6[id='111']/"
440       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
441       "option-data[code='100'][space='dns']/data",
442       "12121212", SR_STRING_T, true },
443     { "/kea-dhcp6-server:config/subnet6[id='111']/"
444       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
445       "option-data[code='100'][space='dns']/csv-format",
446       "false", SR_BOOL_T, true },
447     { "/kea-dhcp6-server:config/subnet6[id='111']/"
448       "pool[start-address='2001:db8::1:0'][end-address='2001:db8::1:ffff']/"
449       "option-data[code='100'][space='dns']/always-send",
450       "false", SR_BOOL_T, true },
451     { "/kea-dhcp6-server:config/subnet6[id='111']/subnet",
452       "2001:db8::/48", SR_STRING_T, true },
453     { "/kea-dhcp6-server:config/expired-leases-processing",
454       "", SR_CONTAINER_T, false },
455     { "/kea-dhcp6-server:config/dhcp-ddns",
456       "", SR_CONTAINER_T, false },
457     { "/kea-dhcp6-server:config/config-control",
458       "", SR_CONTAINER_T, false },
459     { "/kea-dhcp6-server:config/sanity-checks",
460       "", SR_CONTAINER_T, false },
461     { "/kea-dhcp6-server:config/interfaces-config",
462       "", SR_CONTAINER_T, false },
463     { "/kea-dhcp6-server:config/subnet6[id='111']/relay",
464       "", SR_CONTAINER_T, false },
465 });
466 
467 /// @brief Example from the design document.
468 const std::string designExampleModel = IETF_DHCPV6_SERVER;
469 const YRTree designExampleTree = YangRepr::buildTreeFromVector({
470     { "/ietf-dhcpv6-server:server", "", SR_CONTAINER_PRESENCE_T, false },
471     { "/ietf-dhcpv6-server:server/server-config", "", SR_CONTAINER_T, false },
472     { "/ietf-dhcpv6-server:server/server-config/network-ranges",
473       "", SR_CONTAINER_T, false },
474     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
475       "network-range[network-range-id='1']", "", SR_LIST_T, false },
476     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
477       "network-range[network-range-id='1']/network-range-id",
478       "1", SR_UINT32_T, false },
479     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
480       "network-range[network-range-id='1']/network-description",
481       "example", SR_STRING_T, true },
482     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
483       "network-range[network-range-id='1']/pd-pools",
484       "", SR_CONTAINER_T, false },
485     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
486       "network-range[network-range-id='1']/pd-pools/pd-pool[pool-id='0']",
487       "", SR_LIST_T, false },
488     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
489       "network-range[network-range-id='1']/pd-pools/pd-pool[pool-id='0']"
490       "/pool-id",
491       "0", SR_UINT32_T, true },
492     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
493       "network-range[network-range-id='1']/pd-pools/pd-pool[pool-id='0']"
494       "/prefix",
495       "2001:db8:20:b00::/57", SR_STRING_T, true },
496     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
497       "network-range[network-range-id='1']/pd-pools/pd-pool[pool-id='0']"
498       "/prefix-length",
499       "57", SR_UINT8_T, true },
500     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
501       "network-range[network-range-id='1']/pd-pools/"
502       "pd-pool[pool-id='0']/max-pd-space-utilization",
503       "disabled", SR_ENUM_T, true },
504     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
505       "network-range[network-range-id='1']/network-prefix",
506       "2001:db8:20:b00::/56", SR_STRING_T, true },
507     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/duid/type-code",
508       "65535", SR_UINT16_T, false },
509     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
510       "network-range[network-range-id='1']/host-reservations",
511       "", SR_CONTAINER_T, false },
512     { "/ietf-dhcpv6-server:server/server-config/serv-attributes",
513       "", SR_CONTAINER_T, false },
514     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/duid",
515       "", SR_CONTAINER_T, false },
516     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/lease-storage",
517       "", SR_CONTAINER_T, false },
518     { "/ietf-dhcpv6-server:server/server-config/serv-attributes/vendor-info",
519       "", SR_CONTAINER_T, false },
520     { "/ietf-dhcpv6-server:server/server-config/option-sets",
521       "", SR_CONTAINER_T, false },
522     { "/ietf-dhcpv6-server:server/server-config/relay-opaque-paras",
523       "", SR_CONTAINER_T, false },
524     { "/ietf-dhcpv6-server:server/server-config/rsoo-enabled-options",
525       "", SR_CONTAINER_T, false },
526     { "/ietf-dhcpv6-server:server/server-config/network-ranges/"
527       "network-range[network-range-id='1']/address-pools",
528       "", SR_CONTAINER_T, false },
529 });
530 
531 const YRTree emptyTreeKeaDhcp4 = YangRepr::buildTreeFromVector({
532     { "/kea-dhcp4-server:config", "", SR_CONTAINER_T, false },
533     { "/kea-dhcp4-server:config/expired-leases-processing",
534       "", SR_CONTAINER_T, false },
535     { "/kea-dhcp4-server:config/dhcp-ddns",
536       "", SR_CONTAINER_T, false },
537     { "/kea-dhcp4-server:config/config-control",
538       "", SR_CONTAINER_T, false },
539     { "/kea-dhcp4-server:config/sanity-checks",
540       "", SR_CONTAINER_T, false },
541     { "/kea-dhcp4-server:config/interfaces-config",
542       "", SR_CONTAINER_T, false },
543 });
544 
545 const YRTree emptyTreeKeaDhcp6 = YangRepr::buildTreeFromVector({
546     { "/kea-dhcp6-server:config", "", SR_CONTAINER_T, false },
547     { "/kea-dhcp6-server:config/expired-leases-processing",
548       "", SR_CONTAINER_T, false },
549     { "/kea-dhcp6-server:config/dhcp-ddns",
550       "", SR_CONTAINER_T, false },
551     { "/kea-dhcp6-server:config/config-control",
552       "", SR_CONTAINER_T, false },
553     { "/kea-dhcp6-server:config/sanity-checks",
554       "", SR_CONTAINER_T, false },
555     { "/kea-dhcp6-server:config/interfaces-config",
556       "", SR_CONTAINER_T, false },
557 });
558 
559 /// @brief Set of example configurations.
560 const std::vector<std::pair<std::string, YRTree> > test_configs =
561 {
562     { testModel,                   testTree },
563     { subnetTwoPoolsModelIetf6,    subnetTwoPoolsTreeIetf6 },
564     { subnetTimersModel,           subnetTimersIetf6 },
565     { validModelIetf6,             validTreeIetf6 },
566     { subnetOptionsModelKeaDhcp4,  subnetOptionsTreeKeaDhcp4 },
567     { subnetOptionsModelKeaDhcp6,  subnetOptionsTreeKeaDhcp6 },
568     { designExampleModel,          designExampleTree }
569 };
570 
571 }  // namespace test
572 }  // namespace yang
573 }  // namespace isc
574 
575 #endif // ISC_YANG_CONFIGS_H
576