nvlist_add_test.c revision 285063
1258070Spjd/*- 2258070Spjd * Copyright (c) 2013 The FreeBSD Foundation 3258070Spjd * All rights reserved. 4258070Spjd * 5258070Spjd * This software was developed by Pawel Jakub Dawidek under sponsorship from 6258070Spjd * the FreeBSD Foundation. 7258070Spjd * 8258070Spjd * Redistribution and use in source and binary forms, with or without 9258070Spjd * modification, are permitted provided that the following conditions 10258070Spjd * are met: 11258070Spjd * 1. Redistributions of source code must retain the above copyright 12258070Spjd * notice, this list of conditions and the following disclaimer. 13258070Spjd * 2. Redistributions in binary form must reproduce the above copyright 14258070Spjd * notice, this list of conditions and the following disclaimer in the 15258070Spjd * documentation and/or other materials provided with the distribution. 16258070Spjd * 17258070Spjd * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 18258070Spjd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19258070Spjd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20258070Spjd * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE 21258070Spjd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22258070Spjd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23258070Spjd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24258070Spjd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25258070Spjd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26258070Spjd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27258070Spjd * SUCH DAMAGE. 28258070Spjd * 29258070Spjd * $FreeBSD: head/lib/libnv/tests/nvlist_add_test.c 285063 2015-07-02 21:58:10Z oshogbo $ 30258070Spjd */ 31258070Spjd 32285063Soshogbo#include <sys/nv.h> 33285063Soshogbo 34258070Spjd#include <errno.h> 35258070Spjd#include <stdio.h> 36258070Spjd#include <unistd.h> 37258070Spjd 38258070Spjdstatic int ntest = 1; 39258070Spjd 40258070Spjd#define CHECK(expr) do { \ 41258070Spjd if ((expr)) \ 42258070Spjd printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \ 43258070Spjd else \ 44258070Spjd printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\ 45258070Spjd ntest++; \ 46258070Spjd} while (0) 47258070Spjd 48258070Spjdint 49258070Spjdmain(void) 50258070Spjd{ 51258070Spjd const nvlist_t *cnvl; 52258070Spjd nvlist_t *nvl; 53258070Spjd 54258070Spjd printf("1..94\n"); 55258070Spjd 56258070Spjd nvl = nvlist_create(0); 57258070Spjd 58258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 59258070Spjd nvlist_add_null(nvl, "nvlist/null"); 60258070Spjd CHECK(nvlist_error(nvl) == 0); 61258070Spjd CHECK(nvlist_exists_null(nvl, "nvlist/null")); 62258070Spjd 63258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool/true")); 64258070Spjd nvlist_add_bool(nvl, "nvlist/bool/true", true); 65258070Spjd CHECK(nvlist_error(nvl) == 0); 66258070Spjd CHECK(nvlist_exists_bool(nvl, "nvlist/bool/true")); 67258070Spjd 68258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool/false")); 69258070Spjd nvlist_add_bool(nvl, "nvlist/bool/false", false); 70258070Spjd CHECK(nvlist_error(nvl) == 0); 71258070Spjd CHECK(nvlist_exists_bool(nvl, "nvlist/bool/false")); 72258070Spjd 73258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number/0")); 74258070Spjd nvlist_add_number(nvl, "nvlist/number/0", 0); 75258070Spjd CHECK(nvlist_error(nvl) == 0); 76258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/0")); 77258070Spjd 78258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number/1")); 79258070Spjd nvlist_add_number(nvl, "nvlist/number/1", 1); 80258070Spjd CHECK(nvlist_error(nvl) == 0); 81258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/1")); 82258070Spjd 83258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number/-1")); 84258070Spjd nvlist_add_number(nvl, "nvlist/number/-1", -1); 85258070Spjd CHECK(nvlist_error(nvl) == 0); 86258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/-1")); 87258070Spjd 88258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number/UINT64_MAX")); 89258070Spjd nvlist_add_number(nvl, "nvlist/number/UINT64_MAX", UINT64_MAX); 90258070Spjd CHECK(nvlist_error(nvl) == 0); 91258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/UINT64_MAX")); 92258070Spjd 93258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number/INT64_MIN")); 94258070Spjd nvlist_add_number(nvl, "nvlist/number/INT64_MIN", INT64_MIN); 95258070Spjd CHECK(nvlist_error(nvl) == 0); 96258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/INT64_MIN")); 97258070Spjd 98258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number/INT64_MAX")); 99258070Spjd nvlist_add_number(nvl, "nvlist/number/INT64_MAX", INT64_MAX); 100258070Spjd CHECK(nvlist_error(nvl) == 0); 101258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/INT64_MAX")); 102258070Spjd 103258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string/")); 104258070Spjd nvlist_add_string(nvl, "nvlist/string/", ""); 105258070Spjd CHECK(nvlist_error(nvl) == 0); 106258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string/")); 107258070Spjd 108258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string/x")); 109258070Spjd nvlist_add_string(nvl, "nvlist/string/x", "x"); 110258070Spjd CHECK(nvlist_error(nvl) == 0); 111258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string/x")); 112258070Spjd 113258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz")); 114258070Spjd nvlist_add_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz"); 115258070Spjd CHECK(nvlist_error(nvl) == 0); 116258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz")); 117258070Spjd 118258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/stringf/")); 119258070Spjd nvlist_add_stringf(nvl, "nvlist/stringf/", "%s", ""); 120258070Spjd CHECK(nvlist_error(nvl) == 0); 121258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/stringf/")); 122258070Spjd 123258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/stringf/x")); 124258070Spjd nvlist_add_stringf(nvl, "nvlist/stringf/x", "%s", "x"); 125258070Spjd CHECK(nvlist_error(nvl) == 0); 126258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/stringf/x")); 127258070Spjd 128258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/stringf/666Xabc")); 129258070Spjd nvlist_add_stringf(nvl, "nvlist/stringf/666Xabc", "%d%c%s", 666, 'X', "abc"); 130258070Spjd CHECK(nvlist_error(nvl) == 0); 131258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/stringf/666Xabc")); 132258070Spjd 133258070Spjd CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO")); 134258070Spjd nvlist_add_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO", STDERR_FILENO); 135258070Spjd CHECK(nvlist_error(nvl) == 0); 136258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO")); 137258070Spjd 138258070Spjd CHECK(!nvlist_exists_binary(nvl, "nvlist/binary/x")); 139258070Spjd nvlist_add_binary(nvl, "nvlist/binary/x", "x", 1); 140258070Spjd CHECK(nvlist_error(nvl) == 0); 141258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary/x")); 142258070Spjd 143258070Spjd CHECK(!nvlist_exists_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz")); 144258070Spjd nvlist_add_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")); 145258070Spjd CHECK(nvlist_error(nvl) == 0); 146258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz")); 147258070Spjd 148258070Spjd CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 149258070Spjd nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl); 150258070Spjd CHECK(nvlist_error(nvl) == 0); 151258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 152258070Spjd 153258070Spjd CHECK(nvlist_exists_null(nvl, "nvlist/null")); 154258070Spjd CHECK(nvlist_exists_bool(nvl, "nvlist/bool/true")); 155258070Spjd CHECK(nvlist_exists_bool(nvl, "nvlist/bool/false")); 156258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/0")); 157258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/1")); 158258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/-1")); 159258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/UINT64_MAX")); 160258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/INT64_MIN")); 161258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number/INT64_MAX")); 162258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string/")); 163258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string/x")); 164258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz")); 165258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/stringf/")); 166258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/stringf/x")); 167258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/stringf/666Xabc")); 168258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO")); 169258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary/x")); 170258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz")); 171258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 172258070Spjd 173258070Spjd cnvl = nvlist_get_nvlist(nvl, "nvlist/nvlist"); 174258070Spjd CHECK(nvlist_exists_null(cnvl, "nvlist/null")); 175258070Spjd CHECK(nvlist_exists_bool(cnvl, "nvlist/bool/true")); 176258070Spjd CHECK(nvlist_exists_bool(cnvl, "nvlist/bool/false")); 177258070Spjd CHECK(nvlist_exists_number(cnvl, "nvlist/number/0")); 178258070Spjd CHECK(nvlist_exists_number(cnvl, "nvlist/number/1")); 179258070Spjd CHECK(nvlist_exists_number(cnvl, "nvlist/number/-1")); 180258070Spjd CHECK(nvlist_exists_number(cnvl, "nvlist/number/UINT64_MAX")); 181258070Spjd CHECK(nvlist_exists_number(cnvl, "nvlist/number/INT64_MIN")); 182258070Spjd CHECK(nvlist_exists_number(cnvl, "nvlist/number/INT64_MAX")); 183258070Spjd CHECK(nvlist_exists_string(cnvl, "nvlist/string/")); 184258070Spjd CHECK(nvlist_exists_string(cnvl, "nvlist/string/x")); 185258070Spjd CHECK(nvlist_exists_string(cnvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz")); 186258070Spjd CHECK(nvlist_exists_string(cnvl, "nvlist/stringf/")); 187258070Spjd CHECK(nvlist_exists_string(cnvl, "nvlist/stringf/x")); 188258070Spjd CHECK(nvlist_exists_string(cnvl, "nvlist/stringf/666Xabc")); 189258070Spjd CHECK(nvlist_exists_descriptor(cnvl, "nvlist/descriptor/STDERR_FILENO")); 190258070Spjd CHECK(nvlist_exists_binary(cnvl, "nvlist/binary/x")); 191258070Spjd CHECK(nvlist_exists_binary(cnvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz")); 192258070Spjd 193258070Spjd nvlist_destroy(nvl); 194258070Spjd 195258070Spjd return (0); 196258070Spjd} 197