From 962c3df869308725cefb7499135085b487d03ed0 Mon Sep 17 00:00:00 2001 From: Lexi Winter Date: Sat, 29 Mar 2025 06:39:20 +0000 Subject: add tests for pack() and unpack() --- libnvxx/tests/nvxx_basic.cc | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) 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 @@ -316,6 +316,62 @@ TEST_CASE(nvxx_set_error_null) nvl.set_error(std::errc::invalid_argument)); } +/* + * 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(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); -- cgit v1.2.3