From 7e4e14dde5fbfade46311fbf75386d5371062d7d Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周六, 24 10月 2020 19:59:33 +0800 Subject: [PATCH] review of disk strategy linux --- test/library/os_linux_test.cpp | 67 +++++++++++++++++++++++---------- 1 files changed, 46 insertions(+), 21 deletions(-) diff --git a/test/library/os_linux_test.cpp b/test/library/os_linux_test.cpp index b44beb4..3a481d6 100644 --- a/test/library/os_linux_test.cpp +++ b/test/library/os_linux_test.cpp @@ -9,39 +9,64 @@ #include "../../src/library/os/os.h" #include "../../src/library/os/execution_environment.hpp" +FUNCTION_RETURN parse_blkid(const std::string &blkid_file_content, std::vector<DiskInfo> &diskInfos_out); + namespace license { namespace test { using namespace std; -using namespace os; +// using namespace os; BOOST_AUTO_TEST_CASE(read_disk_id) { os::ExecutionEnvironment exec_env; LCC_API_VIRTUALIZATION_SUMMARY virt = exec_env.virtualization(); + vector<DiskInfo> disk_infos; + FUNCTION_RETURN result = getDiskInfos(disk_infos); if (virt == LCC_API_VIRTUALIZATION_SUMMARY::NONE || virt == LCC_API_VIRTUALIZATION_SUMMARY::VM) { - DiskInfo *diskInfos = NULL; - size_t disk_info_size = 0; - FUNCTION_RETURN result = getDiskInfos(NULL, &disk_info_size); BOOST_CHECK_EQUAL(result, FUNC_RET_OK); - BOOST_CHECK_GT(disk_info_size, 0); - diskInfos = (DiskInfo*) malloc(sizeof(DiskInfo) * disk_info_size); - result = getDiskInfos(diskInfos, &disk_info_size); - BOOST_CHECK_EQUAL(result, FUNC_RET_OK); - BOOST_CHECK_GT(mstrnlen_s(diskInfos[0].device, sizeof(diskInfos[0].device)), 0); - BOOST_CHECK_GT(mstrnlen_s(diskInfos[0].label, sizeof diskInfos[0].label), 0); - bool all_zero = true; - for (int i = 0; i < sizeof(diskInfos[0].disk_sn) && all_zero; i++) { - all_zero = (diskInfos[0].disk_sn[i] == 0); + BOOST_REQUIRE_MESSAGE(disk_infos.size() > 0, "Found some disk"); + bool preferred_found = false; + bool uuid_found = false; + bool label_found = false; + + for (auto disk_info : disk_infos) { + uuid_found |= disk_info.sn_initialized; + preferred_found |= disk_info.preferred; + label_found |= disk_info.label_initialized; + + if (disk_info.sn_initialized) { + bool all_zero = true; + for (int i = 0; i < sizeof(disk_info.disk_sn) && all_zero; i++) { + all_zero = (disk_info.disk_sn[i] == 0); + } + BOOST_CHECK_MESSAGE(!all_zero, "disksn is not all zero"); + } } - BOOST_CHECK_MESSAGE(!all_zero, "disksn is not all zero"); - free(diskInfos); + BOOST_CHECK_MESSAGE(uuid_found, "At least one UUID initialized"); + BOOST_CHECK_MESSAGE(label_found, "At least one label found"); + BOOST_CHECK_MESSAGE(preferred_found, "At least one standard 'root' file system"); } else if (virt == LCC_API_VIRTUALIZATION_SUMMARY::CONTAINER) { - // docker or lxc diskInfo is not meaningful - DiskInfo *diskInfos = NULL; - size_t disk_info_size = 0; - FUNCTION_RETURN result = getDiskInfos(NULL, &disk_info_size); + // in docker or lxc diskInfo is very likely not to find any good disk. BOOST_CHECK_EQUAL(result, FUNC_RET_NOT_AVAIL); + BOOST_REQUIRE_MESSAGE(disk_infos.size() == 0, "Found no disk"); } } -} // namespace test -} // namespace license +BOOST_AUTO_TEST_CASE(parse_blkid_file) { + const string blkid_content = + "<device DEVNO=\"0x0803\" TIME=\"1603155692.238672\" " + "UUID=\"baccfd49-5203-4e34-9b8b-a2bbaf9b4e24\" TYPE=\"swap\" PARTLABEL=\"Linux swap\" " + "PARTUUID=\"7d84b1a8-5492-4651-b720-61c723fb8c69\">/dev/sda3</device>" + "<device DEVNO=\"0x10302\" TIME=\"1603155692.253094\" UUID=\"d1b5b096-5e58-4e4f-af39-be12038c9bed\" " + "TYPE=\"ext4\" PARTLABEL=\"Linux filesystem\" PARTUUID=\"3d742821-3167-43fa-9f22-e9bea9a9ce64\">" + "/dev/nvme0n1p2</device>"; + vector<DiskInfo> disk_infos; + FUNCTION_RETURN result = parse_blkid(blkid_content, disk_infos); + BOOST_CHECK_EQUAL(result, FUNC_RET_OK); + BOOST_CHECK_MESSAGE(disk_infos.size() == 2, "Two disks found"); + BOOST_CHECK_MESSAGE(string("Linux swap") == disk_infos[0].label, "Label parsed OK"); + BOOST_CHECK_MESSAGE(string("/dev/sda3") == disk_infos[0].device, "device parsed"); + BOOST_CHECK_MESSAGE(disk_infos[0].preferred, "Preferred found"); +} + +} // namespace test +} // namespace license -- Gitblit v1.9.1