aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLexi Winter <lexi@hemlock.eden.le-fay.org>2025-03-29 06:39:20 +0000
committerLexi Winter <lexi@hemlock.eden.le-fay.org>2025-03-29 06:39:20 +0000
commit962c3df869308725cefb7499135085b487d03ed0 (patch)
treede86fa69f95789746511d28e1bb970a4697b04eb
parent6ae3fb279c468a6f58ff817703cfb483589f61a2 (diff)
downloadlibnvxx-962c3df869308725cefb7499135085b487d03ed0.tar.gz
libnvxx-962c3df869308725cefb7499135085b487d03ed0.tar.bz2
add tests for pack() and unpack()
-rw-r--r--libnvxx/tests/nvxx_basic.cc61
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);