1347a39b4SMariusz Zaborski /*- 2*2981431eSMariusz Zaborski * Copyright (c) 2015-2024 Mariusz Zaborski <oshogbo@FreeBSD.org> 3347a39b4SMariusz Zaborski * 4347a39b4SMariusz Zaborski * Redistribution and use in source and binary forms, with or without 5347a39b4SMariusz Zaborski * modification, are permitted provided that the following conditions 6347a39b4SMariusz Zaborski * are met: 7347a39b4SMariusz Zaborski * 1. Redistributions of source code must retain the above copyright 8347a39b4SMariusz Zaborski * notice, this list of conditions and the following disclaimer. 9347a39b4SMariusz Zaborski * 2. Redistributions in binary form must reproduce the above copyright 10347a39b4SMariusz Zaborski * notice, this list of conditions and the following disclaimer in the 11347a39b4SMariusz Zaborski * documentation and/or other materials provided with the distribution. 12347a39b4SMariusz Zaborski * 13347a39b4SMariusz Zaborski * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14347a39b4SMariusz Zaborski * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15347a39b4SMariusz Zaborski * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16347a39b4SMariusz Zaborski * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17347a39b4SMariusz Zaborski * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18347a39b4SMariusz Zaborski * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19347a39b4SMariusz Zaborski * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20347a39b4SMariusz Zaborski * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21347a39b4SMariusz Zaborski * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22347a39b4SMariusz Zaborski * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23347a39b4SMariusz Zaborski * SUCH DAMAGE. 24347a39b4SMariusz Zaborski */ 25347a39b4SMariusz Zaborski 26e02f530eSEnji Cooper #include <sys/param.h> 27347a39b4SMariusz Zaborski #include <sys/types.h> 28e02f530eSEnji Cooper #include <sys/nv.h> 29*2981431eSMariusz Zaborski #include <sys/mman.h> 30347a39b4SMariusz Zaborski #include <sys/socket.h> 31347a39b4SMariusz Zaborski 32347a39b4SMariusz Zaborski #include <atf-c++.hpp> 33347a39b4SMariusz Zaborski 34347a39b4SMariusz Zaborski #include <cstdio> 35347a39b4SMariusz Zaborski #include <errno.h> 36347a39b4SMariusz Zaborski #include <fcntl.h> 37347a39b4SMariusz Zaborski #include <limits> 38347a39b4SMariusz Zaborski #include <set> 39347a39b4SMariusz Zaborski #include <sstream> 40347a39b4SMariusz Zaborski #include <string> 41347a39b4SMariusz Zaborski 42347a39b4SMariusz Zaborski #define fd_is_valid(fd) (fcntl((fd), F_GETFL) != -1 || errno != EBADF) 43347a39b4SMariusz Zaborski 44347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_bool_array__basic); 45347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_bool_array__basic) 46347a39b4SMariusz Zaborski { 47347a39b4SMariusz Zaborski bool testbool[16]; 48347a39b4SMariusz Zaborski const bool *const_result; 49347a39b4SMariusz Zaborski bool *result; 50347a39b4SMariusz Zaborski nvlist_t *nvl; 518d86e318SEnji Cooper size_t num_items; 52347a39b4SMariusz Zaborski unsigned int i; 53347a39b4SMariusz Zaborski const char *key; 54347a39b4SMariusz Zaborski 55347a39b4SMariusz Zaborski key = "nvl/bool"; 56347a39b4SMariusz Zaborski nvl = nvlist_create(0); 57347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 58347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 59347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 60347a39b4SMariusz Zaborski 61347a39b4SMariusz Zaborski for (i = 0; i < 16; i++) 62347a39b4SMariusz Zaborski testbool[i] = (i % 2 == 0); 63347a39b4SMariusz Zaborski 64347a39b4SMariusz Zaborski nvlist_add_bool_array(nvl, key, testbool, 16); 65347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 66347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 67347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_bool_array(nvl, key)); 68347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_bool_array(nvl, "nvl/bool")); 69347a39b4SMariusz Zaborski 708d86e318SEnji Cooper const_result = nvlist_get_bool_array(nvl, key, &num_items); 718d86e318SEnji Cooper ATF_REQUIRE_EQ(num_items, 16); 72347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 738d86e318SEnji Cooper for (i = 0; i < num_items; i++) 74347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(const_result[i], testbool[i]); 75347a39b4SMariusz Zaborski 768d86e318SEnji Cooper result = nvlist_take_bool_array(nvl, key, &num_items); 778d86e318SEnji Cooper ATF_REQUIRE_EQ(num_items, 16); 78347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 798d86e318SEnji Cooper for (i = 0; i < num_items; i++) 80347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(result[i], testbool[i]); 81347a39b4SMariusz Zaborski 82347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_bool_array(nvl, key)); 83347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 84347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 85347a39b4SMariusz Zaborski 86347a39b4SMariusz Zaborski free(result); 87347a39b4SMariusz Zaborski nvlist_destroy(nvl); 88347a39b4SMariusz Zaborski } 89347a39b4SMariusz Zaborski 90347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_string_array__basic); 91347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_string_array__basic) 92347a39b4SMariusz Zaborski { 93347a39b4SMariusz Zaborski const char * const *const_result; 94347a39b4SMariusz Zaborski char **result; 95347a39b4SMariusz Zaborski nvlist_t *nvl; 968d86e318SEnji Cooper size_t num_items; 97347a39b4SMariusz Zaborski unsigned int i; 98347a39b4SMariusz Zaborski const char *key; 998d86e318SEnji Cooper const char *string_arr[8] = { "a", "b", "kot", "foo", 100347a39b4SMariusz Zaborski "tests", "nice test", "", "abcdef" }; 101347a39b4SMariusz Zaborski 102347a39b4SMariusz Zaborski key = "nvl/string"; 103347a39b4SMariusz Zaborski nvl = nvlist_create(0); 104347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 105347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 106347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 107347a39b4SMariusz Zaborski 108e02f530eSEnji Cooper nvlist_add_string_array(nvl, key, string_arr, nitems(string_arr)); 109347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 110347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 111347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string_array(nvl, key)); 112347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string_array(nvl, "nvl/string")); 113347a39b4SMariusz Zaborski 1148d86e318SEnji Cooper const_result = nvlist_get_string_array(nvl, key, &num_items); 115347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 116347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 117e02f530eSEnji Cooper ATF_REQUIRE(num_items == nitems(string_arr)); 1188d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 1198d86e318SEnji Cooper if (string_arr[i] != NULL) { 1208d86e318SEnji Cooper ATF_REQUIRE(strcmp(const_result[i], 1218d86e318SEnji Cooper string_arr[i]) == 0); 122347a39b4SMariusz Zaborski } else { 1238d86e318SEnji Cooper ATF_REQUIRE(const_result[i] == string_arr[i]); 124347a39b4SMariusz Zaborski } 125347a39b4SMariusz Zaborski } 126347a39b4SMariusz Zaborski 1278d86e318SEnji Cooper result = nvlist_take_string_array(nvl, key, &num_items); 128347a39b4SMariusz Zaborski ATF_REQUIRE(result != NULL); 129e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(string_arr)); 1308d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 1318d86e318SEnji Cooper if (string_arr[i] != NULL) { 1328d86e318SEnji Cooper ATF_REQUIRE_EQ(strcmp(result[i], string_arr[i]), 0); 133347a39b4SMariusz Zaborski } else { 1348d86e318SEnji Cooper ATF_REQUIRE_EQ(result[i], string_arr[i]); 135347a39b4SMariusz Zaborski } 136347a39b4SMariusz Zaborski } 137347a39b4SMariusz Zaborski 138347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 139347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 140347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 141347a39b4SMariusz Zaborski 142e02f530eSEnji Cooper for (i = 0; i < num_items; i++) 143347a39b4SMariusz Zaborski free(result[i]); 144347a39b4SMariusz Zaborski free(result); 145347a39b4SMariusz Zaborski nvlist_destroy(nvl); 146347a39b4SMariusz Zaborski } 147347a39b4SMariusz Zaborski 148347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_descriptor_array__basic); 149347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_descriptor_array__basic) 150347a39b4SMariusz Zaborski { 151347a39b4SMariusz Zaborski int fd[32], *result; 152347a39b4SMariusz Zaborski const int *const_result; 153347a39b4SMariusz Zaborski nvlist_t *nvl; 1548d86e318SEnji Cooper size_t num_items; 155347a39b4SMariusz Zaborski unsigned int i; 156347a39b4SMariusz Zaborski const char *key; 157347a39b4SMariusz Zaborski 158e02f530eSEnji Cooper for (i = 0; i < nitems(fd); i++) { 159347a39b4SMariusz Zaborski fd[i] = dup(STDERR_FILENO); 160347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid(fd[i])); 161347a39b4SMariusz Zaborski } 162347a39b4SMariusz Zaborski 163347a39b4SMariusz Zaborski key = "nvl/descriptor"; 164347a39b4SMariusz Zaborski nvl = nvlist_create(0); 165347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 166347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 167347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_descriptor_array(nvl, key)); 168347a39b4SMariusz Zaborski 169e02f530eSEnji Cooper nvlist_add_descriptor_array(nvl, key, fd, nitems(fd)); 170347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 171347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 172347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_descriptor_array(nvl, key)); 173347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_descriptor_array(nvl, "nvl/descriptor")); 174347a39b4SMariusz Zaborski 1758d86e318SEnji Cooper const_result = nvlist_get_descriptor_array(nvl, key, &num_items); 176347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 177347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 178e02f530eSEnji Cooper ATF_REQUIRE(num_items == nitems(fd)); 1798d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 180347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid(const_result[i])); 181347a39b4SMariusz Zaborski if (i > 0) 182347a39b4SMariusz Zaborski ATF_REQUIRE(const_result[i] != const_result[i - 1]); 183347a39b4SMariusz Zaborski } 184347a39b4SMariusz Zaborski 1858d86e318SEnji Cooper result = nvlist_take_descriptor_array(nvl, key, &num_items); 186347a39b4SMariusz Zaborski ATF_REQUIRE(result != NULL); 187e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(fd)); 1888d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 189347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid(result[i])); 190347a39b4SMariusz Zaborski if (i > 0) 191347a39b4SMariusz Zaborski ATF_REQUIRE(const_result[i] != const_result[i - 1]); 192347a39b4SMariusz Zaborski } 193347a39b4SMariusz Zaborski 194347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 195347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 196347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 197347a39b4SMariusz Zaborski 1988d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 199347a39b4SMariusz Zaborski close(result[i]); 200347a39b4SMariusz Zaborski close(fd[i]); 201347a39b4SMariusz Zaborski } 202347a39b4SMariusz Zaborski free(result); 203347a39b4SMariusz Zaborski nvlist_destroy(nvl); 204347a39b4SMariusz Zaborski } 205347a39b4SMariusz Zaborski 206347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_number_array__basic); 207347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_number_array__basic) 208347a39b4SMariusz Zaborski { 209347a39b4SMariusz Zaborski const uint64_t *const_result; 210347a39b4SMariusz Zaborski uint64_t *result; 211347a39b4SMariusz Zaborski nvlist_t *nvl; 2128d86e318SEnji Cooper size_t num_items; 213347a39b4SMariusz Zaborski unsigned int i; 214347a39b4SMariusz Zaborski const char *key; 215347a39b4SMariusz Zaborski const uint64_t number[8] = { 0, UINT_MAX, 7, 123, 90, 216347a39b4SMariusz Zaborski 100000, 8, 1 }; 217347a39b4SMariusz Zaborski 218347a39b4SMariusz Zaborski key = "nvl/number"; 219347a39b4SMariusz Zaborski nvl = nvlist_create(0); 220347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 221347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 222347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 223347a39b4SMariusz Zaborski 224e02f530eSEnji Cooper nvlist_add_number_array(nvl, key, number, nitems(number)); 225347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 226347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 227347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_number_array(nvl, key)); 228347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_number_array(nvl, "nvl/number")); 229347a39b4SMariusz Zaborski 2308d86e318SEnji Cooper const_result = nvlist_get_number_array(nvl, key, &num_items); 231347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 232347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 233e02f530eSEnji Cooper ATF_REQUIRE(num_items == nitems(number)); 2348d86e318SEnji Cooper for (i = 0; i < num_items; i++) 235347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(const_result[i], number[i]); 236347a39b4SMariusz Zaborski 2378d86e318SEnji Cooper result = nvlist_take_number_array(nvl, key, &num_items); 238347a39b4SMariusz Zaborski ATF_REQUIRE(result != NULL); 239e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(number)); 2408d86e318SEnji Cooper for (i = 0; i < num_items; i++) 241347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(result[i], number[i]); 242347a39b4SMariusz Zaborski 243347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 244347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 245347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 246347a39b4SMariusz Zaborski 247347a39b4SMariusz Zaborski free(result); 248347a39b4SMariusz Zaborski nvlist_destroy(nvl); 249347a39b4SMariusz Zaborski } 250347a39b4SMariusz Zaborski 251347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__basic); 252347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_nvlist_array__basic) 253347a39b4SMariusz Zaborski { 254347a39b4SMariusz Zaborski nvlist_t *testnvl[8]; 255347a39b4SMariusz Zaborski const nvlist_t * const *const_result; 256347a39b4SMariusz Zaborski nvlist_t **result; 257347a39b4SMariusz Zaborski nvlist_t *nvl; 2588d86e318SEnji Cooper size_t num_items; 259347a39b4SMariusz Zaborski unsigned int i; 260347a39b4SMariusz Zaborski const char *somestr[8] = { "a", "b", "c", "d", "e", "f", "g", "h" }; 261347a39b4SMariusz Zaborski const char *key; 262347a39b4SMariusz Zaborski 263347a39b4SMariusz Zaborski for (i = 0; i < 8; i++) { 264347a39b4SMariusz Zaborski testnvl[i] = nvlist_create(0); 265347a39b4SMariusz Zaborski ATF_REQUIRE(testnvl[i] != NULL); 266347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(testnvl[i]), 0); 267347a39b4SMariusz Zaborski nvlist_add_string(testnvl[i], "nvl/string", somestr[i]); 268347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(testnvl[i]), 0); 269347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string(testnvl[i], "nvl/string")); 270347a39b4SMariusz Zaborski } 271347a39b4SMariusz Zaborski 272347a39b4SMariusz Zaborski key = "nvl/nvlist"; 273347a39b4SMariusz Zaborski nvl = nvlist_create(0); 274347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 275347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 276347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 277347a39b4SMariusz Zaborski 278347a39b4SMariusz Zaborski nvlist_add_nvlist_array(nvl, key, (const nvlist_t * const *)testnvl, 8); 279347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 280347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 281347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_nvlist_array(nvl, key)); 282347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_nvlist_array(nvl, "nvl/nvlist")); 283347a39b4SMariusz Zaborski 2848d86e318SEnji Cooper const_result = nvlist_get_nvlist_array(nvl, key, &num_items); 285347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 286347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 287e02f530eSEnji Cooper ATF_REQUIRE(num_items == nitems(testnvl)); 288347a39b4SMariusz Zaborski 2898d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 290347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(const_result[i]), 0); 2918d86e318SEnji Cooper if (i < num_items - 1) { 292347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == 293347a39b4SMariusz Zaborski const_result[i + 1]); 294347a39b4SMariusz Zaborski } else { 295347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == 296347a39b4SMariusz Zaborski NULL); 297347a39b4SMariusz Zaborski } 298347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_parent(const_result[i], NULL) == nvl); 299347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_in_array(const_result[i])); 300347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string(const_result[i], 301347a39b4SMariusz Zaborski "nvl/string")); 302347a39b4SMariusz Zaborski ATF_REQUIRE(strcmp(nvlist_get_string(const_result[i], 303347a39b4SMariusz Zaborski "nvl/string"), somestr[i]) == 0); 304347a39b4SMariusz Zaborski } 305347a39b4SMariusz Zaborski 3068d86e318SEnji Cooper result = nvlist_take_nvlist_array(nvl, key, &num_items); 307347a39b4SMariusz Zaborski ATF_REQUIRE(result != NULL); 3088d86e318SEnji Cooper ATF_REQUIRE_EQ(num_items, 8); 3098d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 310347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(result[i]), 0); 311347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_array_next(result[i]) == NULL); 3128f2285b2SMariusz Zaborski ATF_REQUIRE(nvlist_get_parent(result[i], NULL) == NULL); 313347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == NULL); 314347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_in_array(const_result[i])); 315347a39b4SMariusz Zaborski } 316347a39b4SMariusz Zaborski 317347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 318347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 319347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 320347a39b4SMariusz Zaborski 321347a39b4SMariusz Zaborski for (i = 0; i < 8; i++) { 322347a39b4SMariusz Zaborski nvlist_destroy(result[i]); 323347a39b4SMariusz Zaborski nvlist_destroy(testnvl[i]); 324347a39b4SMariusz Zaborski } 325347a39b4SMariusz Zaborski 326347a39b4SMariusz Zaborski free(result); 327347a39b4SMariusz Zaborski nvlist_destroy(nvl); 328347a39b4SMariusz Zaborski } 329347a39b4SMariusz Zaborski 330347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_clone_array); 331347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_clone_array) 332347a39b4SMariusz Zaborski { 333347a39b4SMariusz Zaborski nvlist_t *testnvl[8]; 334347a39b4SMariusz Zaborski nvlist_t *src, *dst; 335347a39b4SMariusz Zaborski const nvlist_t *nvl; 336347a39b4SMariusz Zaborski bool testbool[16]; 337347a39b4SMariusz Zaborski int testfd[16]; 3388d86e318SEnji Cooper size_t i, num_items; 3398d86e318SEnji Cooper const char *string_arr[8] = { "a", "b", "kot", "foo", 340347a39b4SMariusz Zaborski "tests", "nice test", "", "abcdef" }; 341347a39b4SMariusz Zaborski const char *somestr[8] = { "a", "b", "c", "d", "e", "f", "g", "h" }; 342347a39b4SMariusz Zaborski const uint64_t number[8] = { 0, UINT_MAX, 7, 123, 90, 343347a39b4SMariusz Zaborski 100000, 8, 1 }; 344347a39b4SMariusz Zaborski 345e02f530eSEnji Cooper for (i = 0; i < nitems(testfd); i++) { 346347a39b4SMariusz Zaborski testbool[i] = (i % 2 == 0); 347347a39b4SMariusz Zaborski testfd[i] = dup(STDERR_FILENO); 348347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid(testfd[i])); 349347a39b4SMariusz Zaborski } 350e02f530eSEnji Cooper for (i = 0; i < nitems(testnvl); i++) { 351347a39b4SMariusz Zaborski testnvl[i] = nvlist_create(0); 352347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(testnvl[i]) == 0); 353347a39b4SMariusz Zaborski nvlist_add_string(testnvl[i], "nvl/nvl/teststr", somestr[i]); 354347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(testnvl[i]) == 0); 355347a39b4SMariusz Zaborski } 356347a39b4SMariusz Zaborski 357347a39b4SMariusz Zaborski src = nvlist_create(0); 358347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(src) == 0); 359347a39b4SMariusz Zaborski 360347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_bool_array(src, "nvl/bool")); 361e02f530eSEnji Cooper nvlist_add_bool_array(src, "nvl/bool", testbool, nitems(testbool)); 362347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(src), 0); 363347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_bool_array(src, "nvl/bool")); 364347a39b4SMariusz Zaborski 365347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(src, "nvl/string")); 366e02f530eSEnji Cooper nvlist_add_string_array(src, "nvl/string", string_arr, 367e02f530eSEnji Cooper nitems(string_arr)); 368347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(src), 0); 369347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string_array(src, "nvl/string")); 370347a39b4SMariusz Zaborski 371347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_descriptor_array(src, "nvl/fd")); 372e02f530eSEnji Cooper nvlist_add_descriptor_array(src, "nvl/fd", testfd, nitems(testfd)); 373347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(src), 0); 374347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_descriptor_array(src, "nvl/fd")); 375347a39b4SMariusz Zaborski 376347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_number_array(src, "nvl/number")); 377e02f530eSEnji Cooper nvlist_add_number_array(src, "nvl/number", number, 378e02f530eSEnji Cooper nitems(number)); 379347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(src), 0); 380347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_number_array(src, "nvl/number")); 381347a39b4SMariusz Zaborski 382347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_nvlist_array(src, "nvl/array")); 383347a39b4SMariusz Zaborski nvlist_add_nvlist_array(src, "nvl/array", 384e02f530eSEnji Cooper (const nvlist_t * const *)testnvl, nitems(testnvl)); 385347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(src), 0); 386347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_nvlist_array(src, "nvl/array")); 387347a39b4SMariusz Zaborski 388347a39b4SMariusz Zaborski dst = nvlist_clone(src); 389347a39b4SMariusz Zaborski ATF_REQUIRE(dst != NULL); 390347a39b4SMariusz Zaborski 391347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_bool_array(dst, "nvl/bool")); 3928d86e318SEnji Cooper (void) nvlist_get_bool_array(dst, "nvl/bool", &num_items); 393e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(testbool)); 3948d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 395347a39b4SMariusz Zaborski ATF_REQUIRE( 3968d86e318SEnji Cooper nvlist_get_bool_array(dst, "nvl/bool", &num_items)[i] == 3978d86e318SEnji Cooper nvlist_get_bool_array(src, "nvl/bool", &num_items)[i]); 398347a39b4SMariusz Zaborski } 399347a39b4SMariusz Zaborski 400347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string_array(dst, "nvl/string")); 4018d86e318SEnji Cooper (void) nvlist_get_string_array(dst, "nvl/string", &num_items); 402e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(string_arr)); 4038d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 404347a39b4SMariusz Zaborski if (nvlist_get_string_array(dst, "nvl/string", 4058d86e318SEnji Cooper &num_items)[i] == NULL) { 406347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_string_array(dst, "nvl/string", 4078d86e318SEnji Cooper &num_items)[i] == nvlist_get_string_array(src, 4088d86e318SEnji Cooper "nvl/string", &num_items)[i]); 409347a39b4SMariusz Zaborski } else { 410347a39b4SMariusz Zaborski ATF_REQUIRE(strcmp(nvlist_get_string_array(dst, 4118d86e318SEnji Cooper "nvl/string", &num_items)[i], nvlist_get_string_array( 4128d86e318SEnji Cooper src, "nvl/string", &num_items)[i]) == 0); 413347a39b4SMariusz Zaborski } 414347a39b4SMariusz Zaborski } 415347a39b4SMariusz Zaborski 416347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_descriptor_array(dst, "nvl/fd")); 4178d86e318SEnji Cooper (void) nvlist_get_descriptor_array(dst, "nvl/fd", &num_items); 418e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(testfd)); 4198d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 420347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid( 4218d86e318SEnji Cooper nvlist_get_descriptor_array(dst, "nvl/fd", &num_items)[i])); 422347a39b4SMariusz Zaborski } 423347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_number_array(dst, "nvl/number")); 4248d86e318SEnji Cooper (void) nvlist_get_number_array(dst, "nvl/number", &num_items); 425e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(number)); 426347a39b4SMariusz Zaborski 4278d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 428347a39b4SMariusz Zaborski ATF_REQUIRE( 4298d86e318SEnji Cooper nvlist_get_number_array(dst, "nvl/number", &num_items)[i] == 4308d86e318SEnji Cooper nvlist_get_number_array(src, "nvl/number", &num_items)[i]); 431347a39b4SMariusz Zaborski } 432347a39b4SMariusz Zaborski 433347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_nvlist_array(dst, "nvl/array")); 4348d86e318SEnji Cooper (void) nvlist_get_nvlist_array(dst, "nvl/array", &num_items); 435e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(testnvl)); 4368d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 4378d86e318SEnji Cooper nvl = nvlist_get_nvlist_array(dst, "nvl/array", &num_items)[i]; 438347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string(nvl, "nvl/nvl/teststr")); 439347a39b4SMariusz Zaborski ATF_REQUIRE(strcmp(nvlist_get_string(nvl, "nvl/nvl/teststr"), 440347a39b4SMariusz Zaborski somestr[i]) == 0); 441347a39b4SMariusz Zaborski } 442347a39b4SMariusz Zaborski 443e02f530eSEnji Cooper for (i = 0; i < nitems(testfd); i++) { 444347a39b4SMariusz Zaborski close(testfd[i]); 445347a39b4SMariusz Zaborski } 446e02f530eSEnji Cooper for (i = 0; i < nitems(testnvl); i++) { 447e02f530eSEnji Cooper nvlist_destroy(testnvl[i]); 448347a39b4SMariusz Zaborski } 449347a39b4SMariusz Zaborski nvlist_destroy(src); 450347a39b4SMariusz Zaborski nvlist_destroy(dst); 451347a39b4SMariusz Zaborski } 452347a39b4SMariusz Zaborski 453347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_bool_array__move); 454347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_bool_array__move) 455347a39b4SMariusz Zaborski { 456347a39b4SMariusz Zaborski bool *testbool; 457347a39b4SMariusz Zaborski const bool *const_result; 458347a39b4SMariusz Zaborski nvlist_t *nvl; 4598d86e318SEnji Cooper size_t num_items, count; 460347a39b4SMariusz Zaborski unsigned int i; 461347a39b4SMariusz Zaborski const char *key; 462347a39b4SMariusz Zaborski 463347a39b4SMariusz Zaborski key = "nvl/bool"; 464347a39b4SMariusz Zaborski nvl = nvlist_create(0); 465347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 466347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 467347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 468347a39b4SMariusz Zaborski 469347a39b4SMariusz Zaborski count = 16; 470347a39b4SMariusz Zaborski testbool = (bool*)malloc(sizeof(*testbool) * count); 471347a39b4SMariusz Zaborski ATF_REQUIRE(testbool != NULL); 472347a39b4SMariusz Zaborski for (i = 0; i < count; i++) 473347a39b4SMariusz Zaborski testbool[i] = (i % 2 == 0); 474347a39b4SMariusz Zaborski 475347a39b4SMariusz Zaborski nvlist_move_bool_array(nvl, key, testbool, count); 476347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 477347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 478347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_bool_array(nvl, key)); 479347a39b4SMariusz Zaborski 4808d86e318SEnji Cooper const_result = nvlist_get_bool_array(nvl, key, &num_items); 4818d86e318SEnji Cooper ATF_REQUIRE_EQ(num_items, count); 482347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 483347a39b4SMariusz Zaborski ATF_REQUIRE(const_result == testbool); 4848d86e318SEnji Cooper for (i = 0; i < num_items; i++) 485347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(const_result[i], (i % 2 == 0)); 486347a39b4SMariusz Zaborski 487347a39b4SMariusz Zaborski nvlist_destroy(nvl); 488347a39b4SMariusz Zaborski } 489347a39b4SMariusz Zaborski 490347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_string_array__move); 491347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_string_array__move) 492347a39b4SMariusz Zaborski { 493347a39b4SMariusz Zaborski char **teststr; 494347a39b4SMariusz Zaborski const char * const *const_result; 495347a39b4SMariusz Zaborski nvlist_t *nvl; 4968d86e318SEnji Cooper size_t num_items, count; 497347a39b4SMariusz Zaborski unsigned int i; 498347a39b4SMariusz Zaborski const char *key; 499347a39b4SMariusz Zaborski 500347a39b4SMariusz Zaborski key = "nvl/string"; 501347a39b4SMariusz Zaborski nvl = nvlist_create(0); 502347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 503347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 504347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 505347a39b4SMariusz Zaborski 506347a39b4SMariusz Zaborski count = 26; 507347a39b4SMariusz Zaborski teststr = (char**)malloc(sizeof(*teststr) * count); 508347a39b4SMariusz Zaborski ATF_REQUIRE(teststr != NULL); 509347a39b4SMariusz Zaborski for (i = 0; i < count; i++) { 510347a39b4SMariusz Zaborski teststr[i] = (char*)malloc(sizeof(**teststr) * 2); 511347a39b4SMariusz Zaborski ATF_REQUIRE(teststr[i] != NULL); 512347a39b4SMariusz Zaborski teststr[i][0] = 'a' + i; 513347a39b4SMariusz Zaborski teststr[i][1] = '\0'; 514347a39b4SMariusz Zaborski } 515347a39b4SMariusz Zaborski 516347a39b4SMariusz Zaborski nvlist_move_string_array(nvl, key, teststr, count); 517347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 518347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 519347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string_array(nvl, key)); 520347a39b4SMariusz Zaborski 5218d86e318SEnji Cooper const_result = nvlist_get_string_array(nvl, key, &num_items); 5228d86e318SEnji Cooper ATF_REQUIRE_EQ(num_items, count); 523347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 524347a39b4SMariusz Zaborski ATF_REQUIRE((intptr_t)const_result == (intptr_t)teststr); 5258d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 526347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(const_result[i][0], (char)('a' + i)); 527347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(const_result[i][1], '\0'); 528347a39b4SMariusz Zaborski } 529347a39b4SMariusz Zaborski 530347a39b4SMariusz Zaborski nvlist_destroy(nvl); 531347a39b4SMariusz Zaborski } 532347a39b4SMariusz Zaborski 533347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__move); 534347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_nvlist_array__move) 535347a39b4SMariusz Zaborski { 536347a39b4SMariusz Zaborski nvlist **testnv; 537347a39b4SMariusz Zaborski const nvlist * const *const_result; 538347a39b4SMariusz Zaborski nvlist_t *nvl; 5398d86e318SEnji Cooper size_t num_items, count; 540347a39b4SMariusz Zaborski unsigned int i; 541347a39b4SMariusz Zaborski const char *key; 542347a39b4SMariusz Zaborski 543347a39b4SMariusz Zaborski key = "nvl/nvlist"; 544347a39b4SMariusz Zaborski nvl = nvlist_create(0); 545347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 546347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 547347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_nvlist_array(nvl, key)); 548347a39b4SMariusz Zaborski 549347a39b4SMariusz Zaborski count = 26; 550347a39b4SMariusz Zaborski testnv = (nvlist**)malloc(sizeof(*testnv) * count); 551347a39b4SMariusz Zaborski ATF_REQUIRE(testnv != NULL); 552347a39b4SMariusz Zaborski for (i = 0; i < count; i++) { 553347a39b4SMariusz Zaborski testnv[i] = nvlist_create(0); 554347a39b4SMariusz Zaborski ATF_REQUIRE(testnv[i] != NULL); 555347a39b4SMariusz Zaborski } 556347a39b4SMariusz Zaborski 557347a39b4SMariusz Zaborski nvlist_move_nvlist_array(nvl, key, testnv, count); 558347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 559347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 560347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_nvlist_array(nvl, key)); 561347a39b4SMariusz Zaborski 5628d86e318SEnji Cooper const_result = nvlist_get_nvlist_array(nvl, key, &num_items); 5638d86e318SEnji Cooper ATF_REQUIRE_EQ(num_items, count); 564347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 565347a39b4SMariusz Zaborski ATF_REQUIRE((intptr_t)const_result == (intptr_t)testnv); 5668d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 567347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(const_result[i]), 0); 568347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(const_result[i])); 5698d86e318SEnji Cooper if (i < num_items - 1) { 570347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == 571347a39b4SMariusz Zaborski const_result[i + 1]); 572347a39b4SMariusz Zaborski } else { 573347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == 574347a39b4SMariusz Zaborski NULL); 575347a39b4SMariusz Zaborski } 576347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_parent(const_result[i], NULL) == nvl); 577347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_in_array(const_result[i])); 578347a39b4SMariusz Zaborski } 579347a39b4SMariusz Zaborski 580347a39b4SMariusz Zaborski nvlist_destroy(nvl); 581347a39b4SMariusz Zaborski } 582347a39b4SMariusz Zaborski 583347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_number_array__move); 584347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_number_array__move) 585347a39b4SMariusz Zaborski { 586347a39b4SMariusz Zaborski uint64_t *testnumber; 587347a39b4SMariusz Zaborski const uint64_t *const_result; 588347a39b4SMariusz Zaborski nvlist_t *nvl; 5898d86e318SEnji Cooper size_t num_items, count; 590347a39b4SMariusz Zaborski unsigned int i; 591347a39b4SMariusz Zaborski const char *key; 592347a39b4SMariusz Zaborski 593347a39b4SMariusz Zaborski key = "nvl/number"; 594347a39b4SMariusz Zaborski nvl = nvlist_create(0); 595347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 596347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 597347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 598347a39b4SMariusz Zaborski 599347a39b4SMariusz Zaborski count = 1000; 600347a39b4SMariusz Zaborski testnumber = (uint64_t*)malloc(sizeof(*testnumber) * count); 601347a39b4SMariusz Zaborski ATF_REQUIRE(testnumber != NULL); 602347a39b4SMariusz Zaborski for (i = 0; i < count; i++) 603347a39b4SMariusz Zaborski testnumber[i] = i; 604347a39b4SMariusz Zaborski 605347a39b4SMariusz Zaborski nvlist_move_number_array(nvl, key, testnumber, count); 606347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 607347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 608347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_number_array(nvl, key)); 609347a39b4SMariusz Zaborski 6108d86e318SEnji Cooper const_result = nvlist_get_number_array(nvl, key, &num_items); 6118d86e318SEnji Cooper ATF_REQUIRE_EQ(num_items, count); 612347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 613347a39b4SMariusz Zaborski ATF_REQUIRE(const_result == testnumber); 6148d86e318SEnji Cooper for (i = 0; i < num_items; i++) 615347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(const_result[i], i); 616347a39b4SMariusz Zaborski 617347a39b4SMariusz Zaborski nvlist_destroy(nvl); 618347a39b4SMariusz Zaborski } 619347a39b4SMariusz Zaborski 620347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_descriptor_array__move); 621347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_descriptor_array__move) 622347a39b4SMariusz Zaborski { 623347a39b4SMariusz Zaborski int *testfd; 624347a39b4SMariusz Zaborski const int *const_result; 625347a39b4SMariusz Zaborski nvlist_t *nvl; 6268d86e318SEnji Cooper size_t num_items, count; 627347a39b4SMariusz Zaborski unsigned int i; 628347a39b4SMariusz Zaborski const char *key; 629347a39b4SMariusz Zaborski 630347a39b4SMariusz Zaborski key = "nvl/fd"; 631347a39b4SMariusz Zaborski nvl = nvlist_create(0); 632347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 633347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 634347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 635347a39b4SMariusz Zaborski 636347a39b4SMariusz Zaborski count = 50; 637347a39b4SMariusz Zaborski testfd = (int*)malloc(sizeof(*testfd) * count); 638347a39b4SMariusz Zaborski ATF_REQUIRE(testfd != NULL); 639347a39b4SMariusz Zaborski for (i = 0; i < count; i++) { 640347a39b4SMariusz Zaborski testfd[i] = dup(STDERR_FILENO); 641347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid(testfd[i])); 642347a39b4SMariusz Zaborski } 643347a39b4SMariusz Zaborski 644347a39b4SMariusz Zaborski nvlist_move_descriptor_array(nvl, key, testfd, count); 645347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 646347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 647347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_descriptor_array(nvl, key)); 648347a39b4SMariusz Zaborski 6498d86e318SEnji Cooper const_result = nvlist_get_descriptor_array(nvl, key, &num_items); 6508d86e318SEnji Cooper ATF_REQUIRE_EQ(num_items, count); 651347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 652347a39b4SMariusz Zaborski ATF_REQUIRE(const_result == testfd); 6538d86e318SEnji Cooper for (i = 0; i < num_items; i++) 654347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid(const_result[i])); 655347a39b4SMariusz Zaborski 656347a39b4SMariusz Zaborski nvlist_destroy(nvl); 657347a39b4SMariusz Zaborski } 658347a39b4SMariusz Zaborski 659347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_arrays__error_null); 660347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_arrays__error_null) 661347a39b4SMariusz Zaborski { 662347a39b4SMariusz Zaborski nvlist_t *nvl; 663347a39b4SMariusz Zaborski 664347a39b4SMariusz Zaborski nvl = nvlist_create(0); 665347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 666347a39b4SMariusz Zaborski nvlist_add_number_array(nvl, "nvl/number", NULL, 0); 667347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 668347a39b4SMariusz Zaborski nvlist_destroy(nvl); 669347a39b4SMariusz Zaborski 670347a39b4SMariusz Zaborski nvl = nvlist_create(0); 671347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 672347a39b4SMariusz Zaborski nvlist_move_number_array(nvl, "nvl/number", NULL, 0); 673347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 674347a39b4SMariusz Zaborski nvlist_destroy(nvl); 675347a39b4SMariusz Zaborski 676347a39b4SMariusz Zaborski nvl = nvlist_create(0); 677347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 678347a39b4SMariusz Zaborski nvlist_add_descriptor_array(nvl, "nvl/fd", NULL, 0); 679347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 680347a39b4SMariusz Zaborski nvlist_destroy(nvl); 681347a39b4SMariusz Zaborski 682347a39b4SMariusz Zaborski nvl = nvlist_create(0); 683347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 684347a39b4SMariusz Zaborski nvlist_move_descriptor_array(nvl, "nvl/fd", NULL, 0); 685347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 686347a39b4SMariusz Zaborski nvlist_destroy(nvl); 687347a39b4SMariusz Zaborski 688347a39b4SMariusz Zaborski nvl = nvlist_create(0); 689347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 690347a39b4SMariusz Zaborski nvlist_add_string_array(nvl, "nvl/string", NULL, 0); 691347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 692347a39b4SMariusz Zaborski nvlist_destroy(nvl); 693347a39b4SMariusz Zaborski 694347a39b4SMariusz Zaborski nvl = nvlist_create(0); 695347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 696347a39b4SMariusz Zaborski nvlist_move_string_array(nvl, "nvl/string", NULL, 0); 697347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 698347a39b4SMariusz Zaborski nvlist_destroy(nvl); 699347a39b4SMariusz Zaborski 700347a39b4SMariusz Zaborski nvl = nvlist_create(0); 701347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 702347a39b4SMariusz Zaborski nvlist_add_nvlist_array(nvl, "nvl/nvlist", NULL, 0); 703347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 704347a39b4SMariusz Zaborski nvlist_destroy(nvl); 705347a39b4SMariusz Zaborski 706347a39b4SMariusz Zaborski nvl = nvlist_create(0); 707347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 708347a39b4SMariusz Zaborski nvlist_move_nvlist_array(nvl, "nvl/nvlist", NULL, 0); 709347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 710347a39b4SMariusz Zaborski nvlist_destroy(nvl); 711347a39b4SMariusz Zaborski 712347a39b4SMariusz Zaborski nvl = nvlist_create(0); 713347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 714347a39b4SMariusz Zaborski nvlist_add_bool_array(nvl, "nvl/bool", NULL, 0); 715347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 716347a39b4SMariusz Zaborski nvlist_destroy(nvl); 717347a39b4SMariusz Zaborski 718347a39b4SMariusz Zaborski nvl = nvlist_create(0); 719347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 720347a39b4SMariusz Zaborski nvlist_move_bool_array(nvl, "nvl/bool", NULL, 0); 721347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 722347a39b4SMariusz Zaborski nvlist_destroy(nvl); 723347a39b4SMariusz Zaborski } 724347a39b4SMariusz Zaborski 725347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_arrays__bad_value); 726347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_arrays__bad_value) 727347a39b4SMariusz Zaborski { 728347a39b4SMariusz Zaborski nvlist_t *nvl, *nvladd[1], **nvlmove; 729347a39b4SMariusz Zaborski int fdadd[1], *fdmove; 730347a39b4SMariusz Zaborski 731347a39b4SMariusz Zaborski nvladd[0] = NULL; 732347a39b4SMariusz Zaborski nvl = nvlist_create(0); 733347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 734347a39b4SMariusz Zaborski nvlist_add_nvlist_array(nvl, "nvl/nvlist", nvladd, 1); 735347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 736347a39b4SMariusz Zaborski nvlist_destroy(nvl); 737347a39b4SMariusz Zaborski 738347a39b4SMariusz Zaborski nvlmove = (nvlist_t**)malloc(sizeof(*nvlmove)); 739347a39b4SMariusz Zaborski ATF_REQUIRE(nvlmove != NULL); 740347a39b4SMariusz Zaborski nvlmove[0] = NULL; 741347a39b4SMariusz Zaborski nvl = nvlist_create(0); 742347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 743347a39b4SMariusz Zaborski nvlist_move_nvlist_array(nvl, "nvl/nvlist", nvlmove, 1); 744347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 745347a39b4SMariusz Zaborski nvlist_destroy(nvl); 746347a39b4SMariusz Zaborski 747347a39b4SMariusz Zaborski fdadd[0] = -2; 748347a39b4SMariusz Zaborski nvl = nvlist_create(0); 749347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 750347a39b4SMariusz Zaborski nvlist_add_descriptor_array(nvl, "nvl/fd", fdadd, 1); 751347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 752347a39b4SMariusz Zaborski nvlist_destroy(nvl); 753347a39b4SMariusz Zaborski 754347a39b4SMariusz Zaborski fdmove = (int*)malloc(sizeof(*fdmove)); 755347a39b4SMariusz Zaborski ATF_REQUIRE(fdmove != NULL); 756347a39b4SMariusz Zaborski fdmove[0] = -2; 757347a39b4SMariusz Zaborski nvl = nvlist_create(0); 758347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 759347a39b4SMariusz Zaborski nvlist_move_descriptor_array(nvl, "nvl/fd", fdmove, 1); 760347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) != 0); 761347a39b4SMariusz Zaborski nvlist_destroy(nvl); 762347a39b4SMariusz Zaborski } 763347a39b4SMariusz Zaborski 764347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__travel); 765347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_nvlist_array__travel) 766347a39b4SMariusz Zaborski { 767347a39b4SMariusz Zaborski nvlist_t *nvl, *test[5], *nasted; 768347a39b4SMariusz Zaborski const nvlist_t *travel; 769347a39b4SMariusz Zaborski const char *name; 770e02f530eSEnji Cooper void *cookie; 771e02f530eSEnji Cooper int type; 772e02f530eSEnji Cooper unsigned int i, index; 773347a39b4SMariusz Zaborski 774e02f530eSEnji Cooper for (i = 0; i < nitems(test); i++) { 775347a39b4SMariusz Zaborski test[i] = nvlist_create(0); 776347a39b4SMariusz Zaborski ATF_REQUIRE(test[i] != NULL); 777347a39b4SMariusz Zaborski nvlist_add_number(test[i], "nvl/number", i); 778347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(test[i]) == 0); 779347a39b4SMariusz Zaborski } 780347a39b4SMariusz Zaborski nvl = nvlist_create(0); 781347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 782e02f530eSEnji Cooper nvlist_add_nvlist_array(nvl, "nvl/nvlist_array", test, nitems(test)); 783347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) == 0); 784347a39b4SMariusz Zaborski nasted = nvlist_create(0); 785347a39b4SMariusz Zaborski ATF_REQUIRE(nasted != NULL); 786e02f530eSEnji Cooper nvlist_add_nvlist_array(nasted, "nvl/nvl/nvlist_array", test, 787e02f530eSEnji Cooper nitems(test)); 788347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nasted) == 0); 789347a39b4SMariusz Zaborski nvlist_move_nvlist(nvl, "nvl/nvl", nasted); 790347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) == 0); 791347a39b4SMariusz Zaborski nvlist_add_string(nvl, "nvl/string", "END"); 792347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) == 0); 793347a39b4SMariusz Zaborski 794347a39b4SMariusz Zaborski cookie = NULL; 795347a39b4SMariusz Zaborski index = 0; 796347a39b4SMariusz Zaborski travel = nvl; 797347a39b4SMariusz Zaborski do { 798347a39b4SMariusz Zaborski while ((name = nvlist_next(travel, &type, &cookie)) != NULL) { 799347a39b4SMariusz Zaborski if (index == 0) { 800347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_NVLIST_ARRAY); 801e02f530eSEnji Cooper } else if (index >= 1 && index <= nitems(test)) { 802347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_NUMBER); 803e02f530eSEnji Cooper } else if (index == nitems(test) + 1) { 804347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_NVLIST); 805e02f530eSEnji Cooper } else if (index == nitems(test) + 2) { 806347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_NVLIST_ARRAY); 807e02f530eSEnji Cooper } else if (index >= nitems(test) + 3 && 808e02f530eSEnji Cooper index <= 2 * nitems(test) + 2) { 809347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_NUMBER); 810e02f530eSEnji Cooper } else if (index == 2 * nitems(test) + 3) { 811347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_STRING); 812347a39b4SMariusz Zaborski } 813347a39b4SMariusz Zaborski 814347a39b4SMariusz Zaborski if (type == NV_TYPE_NVLIST) { 815347a39b4SMariusz Zaborski travel = nvlist_get_nvlist(travel, name); 816347a39b4SMariusz Zaborski cookie = NULL; 817347a39b4SMariusz Zaborski } else if (type == NV_TYPE_NVLIST_ARRAY) { 818347a39b4SMariusz Zaborski travel = nvlist_get_nvlist_array(travel, name, 819347a39b4SMariusz Zaborski NULL)[0]; 820347a39b4SMariusz Zaborski cookie = NULL; 821347a39b4SMariusz Zaborski } 822347a39b4SMariusz Zaborski index ++; 823347a39b4SMariusz Zaborski } 824347a39b4SMariusz Zaborski } while ((travel = nvlist_get_pararr(travel, &cookie)) != NULL); 825347a39b4SMariusz Zaborski 826e02f530eSEnji Cooper for (i = 0; i < nitems(test); i++) 827347a39b4SMariusz Zaborski nvlist_destroy(test[i]); 828347a39b4SMariusz Zaborski 829347a39b4SMariusz Zaborski nvlist_destroy(nvl); 830347a39b4SMariusz Zaborski } 831347a39b4SMariusz Zaborski 832347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__travel_alternative); 833347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_nvlist_array__travel_alternative) 834347a39b4SMariusz Zaborski { 835347a39b4SMariusz Zaborski nvlist_t *nvl, *test[5], *nasted; 836347a39b4SMariusz Zaborski const nvlist_t *travel, *tmp; 837347a39b4SMariusz Zaborski void *cookie; 838347a39b4SMariusz Zaborski int index, i, type; 839347a39b4SMariusz Zaborski const char *name; 840347a39b4SMariusz Zaborski 841347a39b4SMariusz Zaborski for (i = 0; i < 5; i++) { 842347a39b4SMariusz Zaborski test[i] = nvlist_create(0); 843347a39b4SMariusz Zaborski ATF_REQUIRE(test[i] != NULL); 844347a39b4SMariusz Zaborski nvlist_add_number(test[i], "nvl/number", i); 845347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(test[i]) == 0); 846347a39b4SMariusz Zaborski } 847347a39b4SMariusz Zaborski nvl = nvlist_create(0); 848347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 849347a39b4SMariusz Zaborski nvlist_add_nvlist_array(nvl, "nvl/nvlist_array", test, 5); 850347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) == 0); 851347a39b4SMariusz Zaborski nasted = nvlist_create(0); 852347a39b4SMariusz Zaborski ATF_REQUIRE(nasted != NULL); 853347a39b4SMariusz Zaborski nvlist_add_nvlist_array(nasted, "nvl/nvl/nvlist_array", test, 5); 854347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nasted) == 0); 855347a39b4SMariusz Zaborski nvlist_move_nvlist(nvl, "nvl/nvl", nasted); 856347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) == 0); 857347a39b4SMariusz Zaborski nvlist_add_string(nvl, "nvl/string", "END"); 858347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_error(nvl) == 0); 859347a39b4SMariusz Zaborski 860347a39b4SMariusz Zaborski cookie = NULL; 861347a39b4SMariusz Zaborski index = 0; 862347a39b4SMariusz Zaborski tmp = travel = nvl; 863347a39b4SMariusz Zaborski do { 864347a39b4SMariusz Zaborski do { 865347a39b4SMariusz Zaborski travel = tmp; 866347a39b4SMariusz Zaborski while ((name = nvlist_next(travel, &type, &cookie)) != 867347a39b4SMariusz Zaborski NULL) { 868347a39b4SMariusz Zaborski if (index == 0) { 869347a39b4SMariusz Zaborski ATF_REQUIRE(type == 870347a39b4SMariusz Zaborski NV_TYPE_NVLIST_ARRAY); 871347a39b4SMariusz Zaborski } else if (index >= 1 && index <= 5) { 872347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_NUMBER); 873347a39b4SMariusz Zaborski } else if (index == 6) { 874347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_NVLIST); 875347a39b4SMariusz Zaborski } else if (index == 7) { 876347a39b4SMariusz Zaborski ATF_REQUIRE(type == 877347a39b4SMariusz Zaborski NV_TYPE_NVLIST_ARRAY); 878347a39b4SMariusz Zaborski } else if (index >= 8 && index <= 12) { 879347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_NUMBER); 880347a39b4SMariusz Zaborski } else if (index == 13) { 881347a39b4SMariusz Zaborski ATF_REQUIRE(type == NV_TYPE_STRING); 882347a39b4SMariusz Zaborski } 883347a39b4SMariusz Zaborski 884347a39b4SMariusz Zaborski if (type == NV_TYPE_NVLIST) { 885347a39b4SMariusz Zaborski travel = nvlist_get_nvlist(travel, 886347a39b4SMariusz Zaborski name); 887347a39b4SMariusz Zaborski cookie = NULL; 888347a39b4SMariusz Zaborski } else if (type == NV_TYPE_NVLIST_ARRAY) { 889347a39b4SMariusz Zaborski travel = nvlist_get_nvlist_array(travel, 890347a39b4SMariusz Zaborski name, NULL)[0]; 891347a39b4SMariusz Zaborski cookie = NULL; 892347a39b4SMariusz Zaborski } 893347a39b4SMariusz Zaborski index ++; 894347a39b4SMariusz Zaborski } 895347a39b4SMariusz Zaborski cookie = NULL; 896347a39b4SMariusz Zaborski } while ((tmp = nvlist_get_array_next(travel)) != NULL); 897347a39b4SMariusz Zaborski } while ((tmp = nvlist_get_parent(travel, &cookie)) != NULL); 898347a39b4SMariusz Zaborski 899347a39b4SMariusz Zaborski for (i = 0; i < 5; i++) 900347a39b4SMariusz Zaborski nvlist_destroy(test[i]); 901347a39b4SMariusz Zaborski 902347a39b4SMariusz Zaborski nvlist_destroy(nvl); 903347a39b4SMariusz Zaborski } 904347a39b4SMariusz Zaborski 905347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_bool_array__pack); 906347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_bool_array__pack) 907347a39b4SMariusz Zaborski { 908347a39b4SMariusz Zaborski nvlist_t *nvl, *unpacked; 909347a39b4SMariusz Zaborski const char *key; 910347a39b4SMariusz Zaborski size_t packed_size, count; 911347a39b4SMariusz Zaborski void *packed; 912347a39b4SMariusz Zaborski unsigned int i; 913347a39b4SMariusz Zaborski const bool *const_result; 914347a39b4SMariusz Zaborski bool testbool[16]; 915347a39b4SMariusz Zaborski 916e02f530eSEnji Cooper for (i = 0; i < nitems(testbool); i++) 917347a39b4SMariusz Zaborski testbool[i] = (i % 2 == 0); 918347a39b4SMariusz Zaborski 919347a39b4SMariusz Zaborski key = "nvl/bool"; 920347a39b4SMariusz Zaborski nvl = nvlist_create(0); 921347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 922347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 923347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 924347a39b4SMariusz Zaborski 925e02f530eSEnji Cooper nvlist_add_bool_array(nvl, key, testbool, nitems(testbool)); 926347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 927347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 928347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_bool_array(nvl, key)); 929347a39b4SMariusz Zaborski 930347a39b4SMariusz Zaborski packed = nvlist_pack(nvl, &packed_size); 931347a39b4SMariusz Zaborski ATF_REQUIRE(packed != NULL); 932347a39b4SMariusz Zaborski 933347a39b4SMariusz Zaborski unpacked = nvlist_unpack(packed, packed_size, 0); 934347a39b4SMariusz Zaborski ATF_REQUIRE(unpacked != NULL); 935347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(unpacked), 0); 936347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_bool_array(unpacked, key)); 937347a39b4SMariusz Zaborski 938347a39b4SMariusz Zaborski const_result = nvlist_get_bool_array(unpacked, key, &count); 939e02f530eSEnji Cooper ATF_REQUIRE_EQ(count, nitems(testbool)); 940347a39b4SMariusz Zaborski for (i = 0; i < count; i++) { 941347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(testbool[i], const_result[i]); 942347a39b4SMariusz Zaborski } 943347a39b4SMariusz Zaborski 944347a39b4SMariusz Zaborski nvlist_destroy(nvl); 945347a39b4SMariusz Zaborski nvlist_destroy(unpacked); 946347a39b4SMariusz Zaborski free(packed); 947347a39b4SMariusz Zaborski } 948347a39b4SMariusz Zaborski 949347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_number_array__pack); 950347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_number_array__pack) 951347a39b4SMariusz Zaborski { 952347a39b4SMariusz Zaborski nvlist_t *nvl, *unpacked; 953347a39b4SMariusz Zaborski const char *key; 954347a39b4SMariusz Zaborski size_t packed_size, count; 955347a39b4SMariusz Zaborski void *packed; 956347a39b4SMariusz Zaborski unsigned int i; 957347a39b4SMariusz Zaborski const uint64_t *const_result; 958347a39b4SMariusz Zaborski const uint64_t number[8] = { 0, UINT_MAX, 7, 123, 90, 959347a39b4SMariusz Zaborski 100000, 8, 1 }; 960347a39b4SMariusz Zaborski 961347a39b4SMariusz Zaborski key = "nvl/number"; 962347a39b4SMariusz Zaborski nvl = nvlist_create(0); 963347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 964347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 965347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 966347a39b4SMariusz Zaborski 967347a39b4SMariusz Zaborski nvlist_add_number_array(nvl, key, number, 8); 968347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 969347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 970347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_number_array(nvl, key)); 971347a39b4SMariusz Zaborski 972347a39b4SMariusz Zaborski packed = nvlist_pack(nvl, &packed_size); 973347a39b4SMariusz Zaborski ATF_REQUIRE(packed != NULL); 974347a39b4SMariusz Zaborski 975347a39b4SMariusz Zaborski unpacked = nvlist_unpack(packed, packed_size, 0); 976347a39b4SMariusz Zaborski ATF_REQUIRE(unpacked != NULL); 977347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(unpacked), 0); 978347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_number_array(unpacked, key)); 979347a39b4SMariusz Zaborski 980347a39b4SMariusz Zaborski const_result = nvlist_get_number_array(unpacked, key, &count); 981e02f530eSEnji Cooper ATF_REQUIRE_EQ(count, nitems(number)); 982347a39b4SMariusz Zaborski for (i = 0; i < count; i++) { 983347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(number[i], const_result[i]); 984347a39b4SMariusz Zaborski } 985347a39b4SMariusz Zaborski 986347a39b4SMariusz Zaborski nvlist_destroy(nvl); 987347a39b4SMariusz Zaborski nvlist_destroy(unpacked); 988347a39b4SMariusz Zaborski free(packed); 989347a39b4SMariusz Zaborski } 990347a39b4SMariusz Zaborski 991347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_descriptor_array__pack); 992347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_descriptor_array__pack) 993347a39b4SMariusz Zaborski { 994347a39b4SMariusz Zaborski nvlist_t *nvl; 995347a39b4SMariusz Zaborski const char *key; 9968d86e318SEnji Cooper size_t num_items; 997347a39b4SMariusz Zaborski unsigned int i; 998347a39b4SMariusz Zaborski const int *const_result; 999347a39b4SMariusz Zaborski int desc[32], fd, socks[2]; 1000347a39b4SMariusz Zaborski pid_t pid; 1001347a39b4SMariusz Zaborski 1002347a39b4SMariusz Zaborski key = "nvl/descriptor"; 1003347a39b4SMariusz Zaborski 1004347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(socketpair(PF_UNIX, SOCK_STREAM, 0, socks), 0); 1005347a39b4SMariusz Zaborski 1006347a39b4SMariusz Zaborski pid = atf::utils::fork(); 1007347a39b4SMariusz Zaborski ATF_REQUIRE(pid >= 0); 1008347a39b4SMariusz Zaborski if (pid == 0) { 1009347a39b4SMariusz Zaborski /* Child. */ 1010347a39b4SMariusz Zaborski fd = socks[0]; 1011347a39b4SMariusz Zaborski close(socks[1]); 1012e02f530eSEnji Cooper for (i = 0; i < nitems(desc); i++) { 1013347a39b4SMariusz Zaborski desc[i] = dup(STDERR_FILENO); 1014347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid(desc[i])); 1015347a39b4SMariusz Zaborski } 1016347a39b4SMariusz Zaborski 1017347a39b4SMariusz Zaborski nvl = nvlist_create(0); 1018347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 1019347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 1020347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_descriptor_array(nvl, key)); 1021347a39b4SMariusz Zaborski 1022e02f530eSEnji Cooper nvlist_add_descriptor_array(nvl, key, desc, nitems(desc)); 1023347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 1024347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 1025347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_descriptor_array(nvl, key)); 1026347a39b4SMariusz Zaborski 1027347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_send(fd, nvl) >= 0); 1028347a39b4SMariusz Zaborski 1029e02f530eSEnji Cooper for (i = 0; i < nitems(desc); i++) 1030347a39b4SMariusz Zaborski close(desc[i]); 1031347a39b4SMariusz Zaborski } else { 1032347a39b4SMariusz Zaborski /* Parent */ 1033347a39b4SMariusz Zaborski fd = socks[1]; 1034347a39b4SMariusz Zaborski close(socks[0]); 1035347a39b4SMariusz Zaborski 1036347a39b4SMariusz Zaborski errno = 0; 1037347a39b4SMariusz Zaborski nvl = nvlist_recv(fd, 0); 1038347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 1039347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 1040347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_descriptor_array(nvl, key)); 1041347a39b4SMariusz Zaborski 10428d86e318SEnji Cooper const_result = nvlist_get_descriptor_array(nvl, key, &num_items); 1043347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 1044e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(desc)); 10458d86e318SEnji Cooper for (i = 0; i < num_items; i++) 1046347a39b4SMariusz Zaborski ATF_REQUIRE(fd_is_valid(const_result[i])); 1047347a39b4SMariusz Zaborski 1048347a39b4SMariusz Zaborski atf::utils::wait(pid, 0, "", ""); 1049347a39b4SMariusz Zaborski } 1050347a39b4SMariusz Zaborski 1051347a39b4SMariusz Zaborski nvlist_destroy(nvl); 1052347a39b4SMariusz Zaborski close(fd); 1053347a39b4SMariusz Zaborski } 1054347a39b4SMariusz Zaborski 1055347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_string_array__pack); 1056347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_string_array__pack) 1057347a39b4SMariusz Zaborski { 1058347a39b4SMariusz Zaborski nvlist_t *nvl, *unpacked; 1059347a39b4SMariusz Zaborski const char *key; 1060347a39b4SMariusz Zaborski size_t packed_size, count; 1061347a39b4SMariusz Zaborski void *packed; 1062347a39b4SMariusz Zaborski unsigned int i; 1063347a39b4SMariusz Zaborski const char * const *const_result; 1064bd7f70daSEnji Cooper const char *string_arr[8] = { "a", "b", "kot", "foo", 1065347a39b4SMariusz Zaborski "tests", "nice test", "", "abcdef" }; 1066347a39b4SMariusz Zaborski 1067347a39b4SMariusz Zaborski key = "nvl/string"; 1068347a39b4SMariusz Zaborski nvl = nvlist_create(0); 1069347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 1070347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 1071347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 1072347a39b4SMariusz Zaborski 1073e02f530eSEnji Cooper nvlist_add_string_array(nvl, key, string_arr, nitems(string_arr)); 1074347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 1075347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 1076347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string_array(nvl, key)); 1077347a39b4SMariusz Zaborski 1078347a39b4SMariusz Zaborski packed = nvlist_pack(nvl, &packed_size); 1079347a39b4SMariusz Zaborski ATF_REQUIRE(packed != NULL); 1080347a39b4SMariusz Zaborski 1081347a39b4SMariusz Zaborski unpacked = nvlist_unpack(packed, packed_size, 0); 1082347a39b4SMariusz Zaborski ATF_REQUIRE(unpacked != NULL); 1083347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(unpacked), 0); 1084347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string_array(unpacked, key)); 1085347a39b4SMariusz Zaborski 1086347a39b4SMariusz Zaborski const_result = nvlist_get_string_array(unpacked, key, &count); 1087e02f530eSEnji Cooper ATF_REQUIRE_EQ(count, nitems(string_arr)); 1088347a39b4SMariusz Zaborski for (i = 0; i < count; i++) { 1089bd7f70daSEnji Cooper ATF_REQUIRE_EQ(strcmp(string_arr[i], const_result[i]), 0); 1090347a39b4SMariusz Zaborski } 1091347a39b4SMariusz Zaborski 1092347a39b4SMariusz Zaborski nvlist_destroy(nvl); 1093347a39b4SMariusz Zaborski nvlist_destroy(unpacked); 1094347a39b4SMariusz Zaborski free(packed); 1095347a39b4SMariusz Zaborski } 1096347a39b4SMariusz Zaborski 1097347a39b4SMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_nvlist_array__pack); 1098347a39b4SMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_nvlist_array__pack) 1099347a39b4SMariusz Zaborski { 1100347a39b4SMariusz Zaborski nvlist_t *testnvl[8], *unpacked; 1101347a39b4SMariusz Zaborski const nvlist_t * const *const_result; 1102347a39b4SMariusz Zaborski nvlist_t *nvl; 11038d86e318SEnji Cooper size_t num_items, packed_size; 1104347a39b4SMariusz Zaborski unsigned int i; 1105347a39b4SMariusz Zaborski void *packed; 1106347a39b4SMariusz Zaborski const char *somestr[8] = { "a", "b", "c", "d", "e", "f", "g", "h" }; 1107347a39b4SMariusz Zaborski const char *key; 1108347a39b4SMariusz Zaborski 1109e02f530eSEnji Cooper for (i = 0; i < nitems(testnvl); i++) { 1110347a39b4SMariusz Zaborski testnvl[i] = nvlist_create(0); 1111347a39b4SMariusz Zaborski ATF_REQUIRE(testnvl[i] != NULL); 1112347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(testnvl[i]), 0); 1113347a39b4SMariusz Zaborski nvlist_add_string(testnvl[i], "nvl/string", somestr[i]); 1114347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(testnvl[i]), 0); 1115347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string(testnvl[i], "nvl/string")); 1116347a39b4SMariusz Zaborski } 1117347a39b4SMariusz Zaborski 1118347a39b4SMariusz Zaborski key = "nvl/nvlist"; 1119347a39b4SMariusz Zaborski nvl = nvlist_create(0); 1120347a39b4SMariusz Zaborski ATF_REQUIRE(nvl != NULL); 1121347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_empty(nvl)); 1122347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_exists_string_array(nvl, key)); 1123347a39b4SMariusz Zaborski 1124347a39b4SMariusz Zaborski nvlist_add_nvlist_array(nvl, key, (const nvlist_t * const *)testnvl, 8); 1125347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(nvl), 0); 1126347a39b4SMariusz Zaborski ATF_REQUIRE(!nvlist_empty(nvl)); 1127347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_nvlist_array(nvl, key)); 1128347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_nvlist_array(nvl, "nvl/nvlist")); 1129347a39b4SMariusz Zaborski packed = nvlist_pack(nvl, &packed_size); 1130347a39b4SMariusz Zaborski ATF_REQUIRE(packed != NULL); 1131347a39b4SMariusz Zaborski 1132347a39b4SMariusz Zaborski unpacked = nvlist_unpack(packed, packed_size, 0); 1133347a39b4SMariusz Zaborski ATF_REQUIRE(unpacked != NULL); 1134347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(unpacked), 0); 1135347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_nvlist_array(unpacked, key)); 1136347a39b4SMariusz Zaborski 11378d86e318SEnji Cooper const_result = nvlist_get_nvlist_array(unpacked, key, &num_items); 1138347a39b4SMariusz Zaborski ATF_REQUIRE(const_result != NULL); 1139e02f530eSEnji Cooper ATF_REQUIRE_EQ(num_items, nitems(testnvl)); 11408d86e318SEnji Cooper for (i = 0; i < num_items; i++) { 1141347a39b4SMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(const_result[i]), 0); 11428d86e318SEnji Cooper if (i < num_items - 1) { 1143347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == 1144347a39b4SMariusz Zaborski const_result[i + 1]); 1145347a39b4SMariusz Zaborski } else { 1146347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_array_next(const_result[i]) == 1147347a39b4SMariusz Zaborski NULL); 1148347a39b4SMariusz Zaborski } 1149347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_get_parent(const_result[i], NULL) == unpacked); 1150347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_in_array(const_result[i])); 1151347a39b4SMariusz Zaborski ATF_REQUIRE(nvlist_exists_string(const_result[i], 1152347a39b4SMariusz Zaborski "nvl/string")); 1153347a39b4SMariusz Zaborski ATF_REQUIRE(strcmp(nvlist_get_string(const_result[i], 1154347a39b4SMariusz Zaborski "nvl/string"), somestr[i]) == 0); 1155347a39b4SMariusz Zaborski } 1156347a39b4SMariusz Zaborski 1157e02f530eSEnji Cooper for (i = 0; i < nitems(testnvl); i++) 1158347a39b4SMariusz Zaborski nvlist_destroy(testnvl[i]); 1159347a39b4SMariusz Zaborski nvlist_destroy(nvl); 1160347a39b4SMariusz Zaborski nvlist_destroy(unpacked); 1161347a39b4SMariusz Zaborski free(packed); 1162347a39b4SMariusz Zaborski } 1163347a39b4SMariusz Zaborski 1164*2981431eSMariusz Zaborski 1165*2981431eSMariusz Zaborski ATF_TEST_CASE_WITHOUT_HEAD(nvlist_string_array_nonull__pack); 1166*2981431eSMariusz Zaborski ATF_TEST_CASE_BODY(nvlist_string_array_nonull__pack) 1167*2981431eSMariusz Zaborski { 1168*2981431eSMariusz Zaborski nvlist_t *testnvl, *unpacked; 1169*2981431eSMariusz Zaborski const char *somestr[3] = { "a", "b", "XXX" }; 1170*2981431eSMariusz Zaborski uint8_t *packed, *twopages, *dataptr, *secondpage; 1171*2981431eSMariusz Zaborski size_t packed_size, page_size; 1172*2981431eSMariusz Zaborski bool found; 1173*2981431eSMariusz Zaborski 1174*2981431eSMariusz Zaborski page_size = sysconf(_SC_PAGESIZE); 1175*2981431eSMariusz Zaborski testnvl = nvlist_create(0); 1176*2981431eSMariusz Zaborski ATF_REQUIRE(testnvl != NULL); 1177*2981431eSMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(testnvl), 0); 1178*2981431eSMariusz Zaborski nvlist_add_string_array(testnvl, "nvl/string", somestr, 1179*2981431eSMariusz Zaborski nitems(somestr)); 1180*2981431eSMariusz Zaborski ATF_REQUIRE_EQ(nvlist_error(testnvl), 0); 1181*2981431eSMariusz Zaborski 1182*2981431eSMariusz Zaborski packed = (uint8_t *)nvlist_pack(testnvl, &packed_size); 1183*2981431eSMariusz Zaborski ATF_REQUIRE(packed != NULL); 1184*2981431eSMariusz Zaborski 1185*2981431eSMariusz Zaborski twopages = (uint8_t *)mmap(NULL, page_size * 2, PROT_READ | PROT_WRITE, 1186*2981431eSMariusz Zaborski MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); 1187*2981431eSMariusz Zaborski ATF_REQUIRE(twopages != MAP_FAILED); 1188*2981431eSMariusz Zaborski dataptr = &twopages[page_size - packed_size]; 1189*2981431eSMariusz Zaborski secondpage = &twopages[page_size]; 1190*2981431eSMariusz Zaborski 1191*2981431eSMariusz Zaborski memset(twopages, 'A', page_size * 2); 1192*2981431eSMariusz Zaborski 1193*2981431eSMariusz Zaborski mprotect(secondpage, page_size, PROT_NONE); 1194*2981431eSMariusz Zaborski memcpy(dataptr, packed, packed_size); 1195*2981431eSMariusz Zaborski 1196*2981431eSMariusz Zaborski found = false; 1197*2981431eSMariusz Zaborski for (size_t i = 0; i < packed_size - 3; i++) { 1198*2981431eSMariusz Zaborski if (dataptr[i] == 'X' && dataptr[i + 1] == 'X' && 1199*2981431eSMariusz Zaborski dataptr[i + 2] == 'X' && dataptr[i + 3] == '\0') { 1200*2981431eSMariusz Zaborski dataptr[i + 3] = 'X'; 1201*2981431eSMariusz Zaborski found = true; 1202*2981431eSMariusz Zaborski break; 1203*2981431eSMariusz Zaborski } 1204*2981431eSMariusz Zaborski } 1205*2981431eSMariusz Zaborski ATF_REQUIRE(found == true); 1206*2981431eSMariusz Zaborski 1207*2981431eSMariusz Zaborski unpacked = nvlist_unpack(dataptr, packed_size, 0); 1208*2981431eSMariusz Zaborski ATF_REQUIRE(unpacked == NULL); 1209*2981431eSMariusz Zaborski 1210*2981431eSMariusz Zaborski nvlist_destroy(testnvl); 1211*2981431eSMariusz Zaborski free(packed); 1212*2981431eSMariusz Zaborski munmap(twopages, page_size * 2); 1213*2981431eSMariusz Zaborski } 1214*2981431eSMariusz Zaborski 1215*2981431eSMariusz Zaborski 1216347a39b4SMariusz Zaborski ATF_INIT_TEST_CASES(tp) 1217347a39b4SMariusz Zaborski { 1218347a39b4SMariusz Zaborski 1219347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_bool_array__basic); 1220347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_string_array__basic); 1221347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_descriptor_array__basic); 1222347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_number_array__basic); 1223347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_nvlist_array__basic) 1224347a39b4SMariusz Zaborski 1225347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_clone_array) 1226347a39b4SMariusz Zaborski 1227347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_bool_array__move); 1228347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_string_array__move); 1229347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_nvlist_array__move); 1230347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_number_array__move); 1231347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_descriptor_array__move); 1232347a39b4SMariusz Zaborski 1233347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_arrays__error_null); 1234347a39b4SMariusz Zaborski 1235347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_arrays__bad_value) 1236347a39b4SMariusz Zaborski 1237347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_nvlist_array__travel) 1238347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_nvlist_array__travel_alternative) 1239347a39b4SMariusz Zaborski 1240347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_bool_array__pack) 1241347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_number_array__pack) 1242347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_descriptor_array__pack) 1243347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_string_array__pack) 1244347a39b4SMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_nvlist_array__pack) 1245*2981431eSMariusz Zaborski 1246*2981431eSMariusz Zaborski ATF_ADD_TEST_CASE(tp, nvlist_string_array_nonull__pack) 1247347a39b4SMariusz Zaborski } 1248347a39b4SMariusz Zaborski 1249