diff options
| author | Lexi Winter <lexi@hemlock.eden.le-fay.org> | 2025-03-29 06:39:20 +0000 |
|---|---|---|
| committer | Lexi Winter <lexi@hemlock.eden.le-fay.org> | 2025-03-29 06:39:20 +0000 |
| commit | 962c3df869308725cefb7499135085b487d03ed0 (patch) | |
| tree | de86fa69f95789746511d28e1bb970a4697b04eb | |
| parent | 6ae3fb279c468a6f58ff817703cfb483589f61a2 (diff) | |
| download | libnvxx-962c3df869308725cefb7499135085b487d03ed0.tar.gz libnvxx-962c3df869308725cefb7499135085b487d03ed0.tar.bz2 | |
add tests for pack() and unpack()
| -rw-r--r-- | libnvxx/tests/nvxx_basic.cc | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libnvxx/tests/nvxx_basic.cc b/libnvxx/tests/nvxx_basic.cc index 4ea2e40..a7b5086 100644 --- a/libnvxx/tests/nvxx_basic.cc +++ b/libnvxx/tests/nvxx_basic.cc @@ -317,6 +317,62 @@ TEST_CASE(nvxx_set_error_null) } /* + * pack/unpack + */ + +TEST_CASE(nvxx_pack) +{ + using namespace std::literals; + auto key = "test number"sv; + auto value = 42u; + + auto nvl = bsd::nv_list(); + nvl.add_number(key, value); + + auto bytes = nvl.pack(); + + auto *nv = ::nvlist_unpack(bytes.data(), bytes.size(), 0); + ATF_REQUIRE_EQ(true, nv != nullptr); + + ATF_REQUIRE_EQ(value, ::nvlist_get_number(nv, std::string(key).c_str())); +} + +TEST_CASE(nvxx_pack_empty) +{ + auto nvl = bsd::nv_list(); + auto nvl2 = std::move(nvl); + + ATF_REQUIRE_THROW(std::logic_error, (void)nvl.pack()); +} + +TEST_CASE(nvxx_pack_error) +{ + auto nvl = bsd::nv_list(); + nvl.set_error(std::errc::invalid_argument); + ATF_REQUIRE_THROW(bsd::nv_error_state, (void)nvl.pack()); +} + +TEST_CASE(nvxx_unpack) +{ + using namespace std::literals; + auto key = "test number"sv; + auto value = 42u; + + auto *nv = ::nvlist_create(0); + ATF_REQUIRE_EQ(true, nv != nullptr); + ::nvlist_add_number(nv, std::string(key).c_str(), value); + + auto size = std::size_t{}; + auto *data = ::nvlist_pack(nv, &size); + ATF_REQUIRE_EQ(true, data != nullptr); + + auto bytes = std::span{static_cast<std::byte const *>(data), size}; + auto nvl = bsd::nv_list::unpack(bytes); + + ATF_REQUIRE_EQ(value, nvl.get_number(key)); +} + +/* * exists(_type) */ @@ -1850,6 +1906,11 @@ ATF_INIT_TEST_CASES(tcs) ATF_ADD_TEST_CASE(tcs, nvxx_set_error_null); ATF_ADD_TEST_CASE(tcs, nvxx_error_null); + ATF_ADD_TEST_CASE(tcs, nvxx_pack); + ATF_ADD_TEST_CASE(tcs, nvxx_pack_error); + ATF_ADD_TEST_CASE(tcs, nvxx_pack_empty); + ATF_ADD_TEST_CASE(tcs, nvxx_unpack); + ATF_ADD_TEST_CASE(tcs, nvxx_exists); ATF_ADD_TEST_CASE(tcs, nvxx_exists_nul_key); ATF_ADD_TEST_CASE(tcs, nvxx_exists_type); |
