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: releng/11.0/lib/libnv/tests/nvlist_free_test.c 285063 2015-07-02 21:58:10Z oshogbo $ 30258070Spjd */ 31258070Spjd 32285063Soshogbo#include <sys/nv.h> 33285063Soshogbo 34258070Spjd#include <stdio.h> 35258070Spjd#include <unistd.h> 36258070Spjd 37258070Spjdstatic int ntest = 1; 38258070Spjd 39258070Spjd#define CHECK(expr) do { \ 40258070Spjd if ((expr)) \ 41258070Spjd printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \ 42258070Spjd else \ 43258070Spjd printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\ 44258070Spjd ntest++; \ 45258070Spjd} while (0) 46258070Spjd 47258070Spjdint 48258070Spjdmain(void) 49258070Spjd{ 50258070Spjd nvlist_t *nvl; 51258070Spjd 52258070Spjd printf("1..114\n"); 53258070Spjd 54258070Spjd nvl = nvlist_create(0); 55258070Spjd 56258070Spjd nvlist_add_null(nvl, "nvlist/null"); 57258070Spjd nvlist_add_bool(nvl, "nvlist/bool", true); 58258070Spjd nvlist_add_number(nvl, "nvlist/number", 0); 59258070Spjd nvlist_add_string(nvl, "nvlist/string", "test"); 60258070Spjd nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl); 61258070Spjd nvlist_add_descriptor(nvl, "nvlist/descriptor", STDERR_FILENO); 62258070Spjd nvlist_add_binary(nvl, "nvlist/binary", "test", 4); 63258070Spjd 64258070Spjd CHECK(nvlist_exists_null(nvl, "nvlist/null")); 65258070Spjd CHECK(nvlist_exists_bool(nvl, "nvlist/bool")); 66258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number")); 67258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string")); 68258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 69258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 70258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 71258070Spjd 72258070Spjd nvlist_free_null(nvl, "nvlist/null"); 73258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 74258070Spjd CHECK(nvlist_exists_bool(nvl, "nvlist/bool")); 75258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number")); 76258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string")); 77258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 78258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 79258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 80258070Spjd 81258070Spjd nvlist_free_bool(nvl, "nvlist/bool"); 82258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 83258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 84258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number")); 85258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string")); 86258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 87258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 88258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 89258070Spjd 90258070Spjd nvlist_free_number(nvl, "nvlist/number"); 91258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 92258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 93258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 94258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string")); 95258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 96258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 97258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 98258070Spjd 99258070Spjd nvlist_free_string(nvl, "nvlist/string"); 100258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 101258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 102258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 103258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 104258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 105258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 106258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 107258070Spjd 108258070Spjd nvlist_free_nvlist(nvl, "nvlist/nvlist"); 109258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 110258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 111258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 112258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 113258070Spjd CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 114258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 115258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 116258070Spjd 117258070Spjd nvlist_free_descriptor(nvl, "nvlist/descriptor"); 118258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 119258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 120258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 121258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 122258070Spjd CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 123258070Spjd CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 124258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 125258070Spjd 126258070Spjd nvlist_free_binary(nvl, "nvlist/binary"); 127258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 128258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 129258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 130258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 131258070Spjd CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 132258070Spjd CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 133258070Spjd CHECK(!nvlist_exists_binary(nvl, "nvlist/binary")); 134258070Spjd 135258070Spjd CHECK(nvlist_empty(nvl)); 136258070Spjd 137258070Spjd nvlist_add_null(nvl, "nvlist/null"); 138258070Spjd nvlist_add_bool(nvl, "nvlist/bool", true); 139258070Spjd nvlist_add_number(nvl, "nvlist/number", 0); 140258070Spjd nvlist_add_string(nvl, "nvlist/string", "test"); 141258070Spjd nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl); 142258070Spjd nvlist_add_descriptor(nvl, "nvlist/descriptor", STDERR_FILENO); 143258070Spjd nvlist_add_binary(nvl, "nvlist/binary", "test", 4); 144258070Spjd 145258070Spjd CHECK(nvlist_exists_null(nvl, "nvlist/null")); 146258070Spjd CHECK(nvlist_exists_bool(nvl, "nvlist/bool")); 147258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number")); 148258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string")); 149258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 150258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 151258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 152258070Spjd 153258070Spjd nvlist_free(nvl, "nvlist/null"); 154258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 155258070Spjd CHECK(nvlist_exists_bool(nvl, "nvlist/bool")); 156258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number")); 157258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string")); 158258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 159258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 160258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 161258070Spjd 162258070Spjd nvlist_free(nvl, "nvlist/bool"); 163258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 164258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 165258070Spjd CHECK(nvlist_exists_number(nvl, "nvlist/number")); 166258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string")); 167258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 168258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 169258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 170258070Spjd 171258070Spjd nvlist_free(nvl, "nvlist/number"); 172258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 173258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 174258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 175258070Spjd CHECK(nvlist_exists_string(nvl, "nvlist/string")); 176258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 177258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 178258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 179258070Spjd 180258070Spjd nvlist_free(nvl, "nvlist/string"); 181258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 182258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 183258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 184258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 185258070Spjd CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 186258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 187258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 188258070Spjd 189258070Spjd nvlist_free(nvl, "nvlist/nvlist"); 190258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 191258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 192258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 193258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 194258070Spjd CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 195258070Spjd CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 196258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 197258070Spjd 198258070Spjd nvlist_free(nvl, "nvlist/descriptor"); 199258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 200258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 201258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 202258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 203258070Spjd CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 204258070Spjd CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 205258070Spjd CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 206258070Spjd 207258070Spjd nvlist_free(nvl, "nvlist/binary"); 208258070Spjd CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 209258070Spjd CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 210258070Spjd CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 211258070Spjd CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 212258070Spjd CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 213258070Spjd CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 214258070Spjd CHECK(!nvlist_exists_binary(nvl, "nvlist/binary")); 215258070Spjd 216258070Spjd CHECK(nvlist_empty(nvl)); 217258070Spjd 218258070Spjd nvlist_destroy(nvl); 219258070Spjd 220258070Spjd return (0); 221258070Spjd} 222