2 * Copyright (c) 2014-2015 Sandvine Inc. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 #include <sys/cdefs.h>
28 __FBSDID("$FreeBSD$");
30 #include <atf-c++.hpp>
34 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_bool__present);
35 ATF_TEST_CASE_BODY(dnvlist_get_bool__present)
41 nvl = nvlist_create(0);
45 nvlist_add_bool(nvl, key, value);
47 ATF_REQUIRE_EQ(dnvlist_get_bool(nvl, key, false), value);
48 ATF_REQUIRE_EQ(dnvlist_get_bool(nvl, "name", false), value);
53 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_bool__default_value);
54 ATF_TEST_CASE_BODY(dnvlist_get_bool__default_value)
60 nvl = nvlist_create(0);
62 ATF_REQUIRE_EQ(dnvlist_get_bool(nvl, key, false), false);
63 ATF_REQUIRE_EQ(dnvlist_get_bool(nvl, "123", true), true);
65 nvlist_add_bool(nvl, key, true);
67 ATF_REQUIRE_EQ(dnvlist_get_bool(nvl, "otherkey", true), true);
68 ATF_REQUIRE_EQ(dnvlist_get_bool(nvl, "12c", false), false);
73 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_number__present);
74 ATF_TEST_CASE_BODY(dnvlist_get_number__present)
80 nvl = nvlist_create(0);
84 nvlist_add_number(nvl, key, value);
86 ATF_REQUIRE_EQ(dnvlist_get_number(nvl, key, 19), value);
87 ATF_REQUIRE_EQ(dnvlist_get_number(nvl, "key", 65), value);
92 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_number__default_value);
93 ATF_TEST_CASE_BODY(dnvlist_get_number__default_value)
99 nvl = nvlist_create(0);
101 ATF_REQUIRE_EQ(dnvlist_get_number(nvl, key, 5), 5);
102 ATF_REQUIRE_EQ(dnvlist_get_number(nvl, "1234", 5), 5);
104 nvlist_add_number(nvl, key, 24841);
106 ATF_REQUIRE_EQ(dnvlist_get_number(nvl, "1234", 5641), 5641);
111 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_string__present);
112 ATF_TEST_CASE_BODY(dnvlist_get_string__present)
116 const char *value, *actual_value;
118 nvl = nvlist_create(0);
122 nvlist_add_string(nvl, key, value);
124 ATF_REQUIRE_EQ(strcmp(dnvlist_get_string(nvl, key, "g"), value), 0);
126 actual_value = dnvlist_get_string(nvl, key, "rs");
127 ATF_REQUIRE_EQ(strcmp(actual_value, value), 0);
132 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_string__default_value);
133 ATF_TEST_CASE_BODY(dnvlist_get_string__default_value)
137 const char *actual_value;
140 nvl = nvlist_create(0);
142 ATF_REQUIRE_EQ(strcmp(dnvlist_get_string(nvl, key, "bar"), "bar"), 0);
144 actual_value = dnvlist_get_string(nvl, key, "d");
145 ATF_REQUIRE_EQ(strcmp(actual_value, "d"), 0);
147 nvlist_add_string(nvl, key, "cxhweh");
149 ATF_REQUIRE_EQ(strcmp(dnvlist_get_string(nvl, "hthth", "fd"), "fd"), 0);
150 actual_value = dnvlist_get_string(nvl, "5", "5");
151 ATF_REQUIRE_EQ(strcmp(actual_value, "5"), 0);
156 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_nvlist__present);
157 ATF_TEST_CASE_BODY(dnvlist_get_nvlist__present)
162 const nvlist_t *actual_value;
164 nvl = nvlist_create(0);
167 value = nvlist_create(0);
168 nvlist_move_nvlist(nvl, key, value);
170 actual_value = dnvlist_get_nvlist(nvl, key, NULL);
171 ATF_REQUIRE(actual_value != NULL);
172 ATF_REQUIRE(nvlist_empty(actual_value));
177 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_nvlist__default_value);
178 ATF_TEST_CASE_BODY(dnvlist_get_nvlist__default_value)
185 nvl = nvlist_create(0);
186 dummy = nvlist_create(0);
188 ATF_REQUIRE_EQ(dnvlist_get_nvlist(nvl, key, dummy), dummy);
190 nvlist_move_nvlist(nvl, key, nvlist_create(0));
191 ATF_REQUIRE_EQ(dnvlist_get_nvlist(nvl, "456", dummy), dummy);
192 ATF_REQUIRE_EQ(dnvlist_get_nvlist(nvl, "gh", dummy), dummy);
198 set_const_binary_value(const void *&value, size_t &size, const char *str)
202 size = strlen(str) + 1; /* +1 to include '\0' */
205 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_binary__present);
206 ATF_TEST_CASE_BODY(dnvlist_get_binary__present)
210 const void *value, *actual_value;
211 size_t value_size, actual_size;
213 nvl = nvlist_create(0);
216 set_const_binary_value(value, value_size, "fjdojfdi");
217 nvlist_add_binary(nvl, k, value, value_size);
219 actual_value = dnvlist_get_binary(nvl, k, &actual_size, "g", 1);
220 ATF_REQUIRE_EQ(value_size, actual_size);
221 ATF_REQUIRE_EQ(memcmp(actual_value, value, actual_size), 0);
226 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_get_binary__default_value);
227 ATF_TEST_CASE_BODY(dnvlist_get_binary__default_value)
231 const void *default_value, *actual_value;
232 size_t default_size, actual_size;
235 nvl = nvlist_create(0);
237 set_const_binary_value(default_value, default_size, "bar");
238 actual_value = dnvlist_get_binary(nvl, key, &actual_size, default_value,
240 ATF_REQUIRE_EQ(default_size, actual_size);
241 ATF_REQUIRE_EQ(memcmp(actual_value, default_value, actual_size), 0);
243 set_const_binary_value(default_value, default_size, "atf");
244 actual_value = dnvlist_get_binary(nvl, key, &actual_size, default_value,
246 ATF_REQUIRE_EQ(default_size, actual_size);
247 ATF_REQUIRE_EQ(memcmp(actual_value, default_value, actual_size), 0);
249 nvlist_add_binary(nvl, key, "test", 4);
251 set_const_binary_value(default_value, default_size, "bthrg");
252 actual_value = dnvlist_get_binary(nvl, "k", &actual_size, default_value,
254 ATF_REQUIRE_EQ(default_size, actual_size);
255 ATF_REQUIRE_EQ(memcmp(actual_value, default_value, actual_size), 0);
257 set_const_binary_value(default_value, default_size,
258 "rrhgrythtyrtgbrhgrtdsvdfbtjlkul");
259 actual_value = dnvlist_get_binary(nvl, "s", &actual_size, default_value,
261 ATF_REQUIRE_EQ(default_size, actual_size);
262 ATF_REQUIRE_EQ(memcmp(actual_value, default_value, actual_size), 0);
267 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_bool__present);
268 ATF_TEST_CASE_BODY(dnvlist_take_bool__present)
274 nvl = nvlist_create(0);
278 nvlist_add_bool(nvl, key, value);
280 ATF_REQUIRE_EQ(dnvlist_take_bool(nvl, key, false), value);
281 ATF_REQUIRE(nvlist_empty(nvl));
286 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_bool__empty);
287 ATF_TEST_CASE_BODY(dnvlist_take_bool__empty)
291 nvl = nvlist_create(0);
293 ATF_REQUIRE_EQ(dnvlist_take_bool(nvl, "123", false), false);
298 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_bool__default_value);
299 ATF_TEST_CASE_BODY(dnvlist_take_bool__default_value)
303 nvl = nvlist_create(0);
304 nvlist_add_bool(nvl, "key", true);
306 ATF_REQUIRE_EQ(dnvlist_take_bool(nvl, "otherkey", true), true);
311 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_number__present);
312 ATF_TEST_CASE_BODY(dnvlist_take_number__present)
318 nvl = nvlist_create(0);
322 nvlist_add_number(nvl, key, value);
324 ATF_REQUIRE_EQ(dnvlist_take_number(nvl, key, 2), value);
325 ATF_REQUIRE(nvlist_empty(nvl));
330 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_number__empty);
331 ATF_TEST_CASE_BODY(dnvlist_take_number__empty)
335 nvl = nvlist_create(0);
337 ATF_REQUIRE_EQ(dnvlist_take_number(nvl, "123", 126484), 126484);
342 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_number__default_value);
343 ATF_TEST_CASE_BODY(dnvlist_take_number__default_value)
347 nvl = nvlist_create(0);
348 nvlist_add_number(nvl, "key", 12);
350 ATF_REQUIRE_EQ(dnvlist_take_number(nvl, "otherkey", 13), 13);
355 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_string__present);
356 ATF_TEST_CASE_BODY(dnvlist_take_string__present)
361 char *default_val, *actual_val;
363 nvl = nvlist_create(0);
367 default_val = strdup("default");
368 nvlist_add_string(nvl, key, value);
370 actual_val = dnvlist_take_string(nvl, key, default_val);
371 ATF_REQUIRE_EQ(strcmp(actual_val, value), 0);
372 ATF_REQUIRE(nvlist_empty(nvl));
379 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_string__empty);
380 ATF_TEST_CASE_BODY(dnvlist_take_string__empty)
383 char *default_val, *actual_val;
385 nvl = nvlist_create(0);
386 default_val = strdup("");
388 actual_val = dnvlist_take_string(nvl, "123", default_val);
389 ATF_REQUIRE_EQ(strcmp(actual_val, default_val), 0);
395 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_string__default_value);
396 ATF_TEST_CASE_BODY(dnvlist_take_string__default_value)
399 char *default_val, *actual_val;
401 nvl = nvlist_create(0);
402 nvlist_add_string(nvl, "key", "foobar");
403 default_val = strdup("other");
405 actual_val = dnvlist_take_string(nvl, "otherkey", default_val);
406 ATF_REQUIRE_EQ(strcmp(actual_val, default_val), 0);
412 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_nvlist__present);
413 ATF_TEST_CASE_BODY(dnvlist_take_nvlist__present)
417 nvlist_t *value, *default_val, *actual_val;
419 nvl = nvlist_create(0);
422 value = nvlist_create(0);
423 default_val = nvlist_create(0);
424 nvlist_move_nvlist(nvl, key, value);
426 actual_val = dnvlist_take_nvlist(nvl, key, default_val);
427 ATF_REQUIRE_EQ(actual_val, value);
428 ATF_REQUIRE(nvlist_empty(nvl));
435 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_nvlist__empty);
436 ATF_TEST_CASE_BODY(dnvlist_take_nvlist__empty)
438 nvlist_t *nvl, *actual_val;
440 nvl = nvlist_create(0);
442 actual_val = dnvlist_take_nvlist(nvl, "123", NULL);
443 ATF_REQUIRE_EQ(actual_val, static_cast<nvlist_t *>(NULL));
449 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_nvlist__default_value);
450 ATF_TEST_CASE_BODY(dnvlist_take_nvlist__default_value)
453 nvlist_t *default_val, *actual_val;
455 nvl = nvlist_create(0);
456 nvlist_move_nvlist(nvl, "key", nvlist_create(0));
457 default_val = nvlist_create(0);
459 actual_val = dnvlist_take_nvlist(nvl, "otherkey", default_val);
460 ATF_REQUIRE_EQ(actual_val, default_val);
467 set_binary_value(void *&value, size_t &size, const char *str)
471 size = strlen(str) + 1; /* +1 to include '\0' */
474 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_binary__present);
475 ATF_TEST_CASE_BODY(dnvlist_take_binary__present)
479 void *value, *default_val, *actual_val;
480 size_t value_size, default_size, actual_size;
482 nvl = nvlist_create(0);
485 set_binary_value(value, value_size, "fkdojvmo908");
486 set_binary_value(default_val, default_size, "16546");
487 nvlist_add_binary(nvl, key, value, value_size);
489 actual_val = dnvlist_take_binary(nvl, key, &actual_size, default_val,
491 ATF_REQUIRE_EQ(value_size, actual_size);
492 ATF_REQUIRE_EQ(memcmp(actual_val, value, value_size), 0);
493 ATF_REQUIRE(nvlist_empty(nvl));
500 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_binary__empty);
501 ATF_TEST_CASE_BODY(dnvlist_take_binary__empty)
504 void *default_val, *actual_val;
505 size_t default_size, actual_size;
507 nvl = nvlist_create(0);
508 set_binary_value(default_val, default_size, "\xa8\x89\x49\xff\xe2\x08");
510 actual_val = dnvlist_take_binary(nvl, "123", &actual_size, default_val,
512 ATF_REQUIRE_EQ(default_size, actual_size);
513 ATF_REQUIRE_EQ(memcmp(actual_val, default_val, actual_size), 0);
519 ATF_TEST_CASE_WITHOUT_HEAD(dnvlist_take_binary__default_value);
520 ATF_TEST_CASE_BODY(dnvlist_take_binary__default_value)
523 void *default_val, *actual_val;
524 size_t default_size, actual_size;
526 nvl = nvlist_create(0);
527 nvlist_add_binary(nvl, "key", "foobar", 6);
528 set_binary_value(default_val, default_size, "vbhag");
530 actual_val = dnvlist_take_binary(nvl, "otherkey", &actual_size,
531 default_val, default_size);
532 ATF_REQUIRE_EQ(default_size, actual_size);
533 ATF_REQUIRE_EQ(memcmp(actual_val, default_val, default_size), 0);
539 ATF_INIT_TEST_CASES(tp)
541 ATF_ADD_TEST_CASE(tp, dnvlist_get_bool__present);
542 ATF_ADD_TEST_CASE(tp, dnvlist_get_bool__default_value);
543 ATF_ADD_TEST_CASE(tp, dnvlist_get_number__present);
544 ATF_ADD_TEST_CASE(tp, dnvlist_get_number__default_value);
545 ATF_ADD_TEST_CASE(tp, dnvlist_get_string__present);
546 ATF_ADD_TEST_CASE(tp, dnvlist_get_string__default_value);
547 ATF_ADD_TEST_CASE(tp, dnvlist_get_nvlist__present);
548 ATF_ADD_TEST_CASE(tp, dnvlist_get_nvlist__default_value);
549 ATF_ADD_TEST_CASE(tp, dnvlist_get_binary__present);
550 ATF_ADD_TEST_CASE(tp, dnvlist_get_binary__default_value);
552 ATF_ADD_TEST_CASE(tp, dnvlist_take_bool__present);
553 ATF_ADD_TEST_CASE(tp, dnvlist_take_bool__empty);
554 ATF_ADD_TEST_CASE(tp, dnvlist_take_bool__default_value);
555 ATF_ADD_TEST_CASE(tp, dnvlist_take_number__present);
556 ATF_ADD_TEST_CASE(tp, dnvlist_take_number__empty);
557 ATF_ADD_TEST_CASE(tp, dnvlist_take_number__default_value);
558 ATF_ADD_TEST_CASE(tp, dnvlist_take_string__present);
559 ATF_ADD_TEST_CASE(tp, dnvlist_take_string__empty);
560 ATF_ADD_TEST_CASE(tp, dnvlist_take_string__default_value);
561 ATF_ADD_TEST_CASE(tp, dnvlist_take_nvlist__present);
562 ATF_ADD_TEST_CASE(tp, dnvlist_take_nvlist__empty);
563 ATF_ADD_TEST_CASE(tp, dnvlist_take_nvlist__default_value);
564 ATF_ADD_TEST_CASE(tp, dnvlist_take_binary__present);
565 ATF_ADD_TEST_CASE(tp, dnvlist_take_binary__empty);
566 ATF_ADD_TEST_CASE(tp, dnvlist_take_binary__default_value);