| | |
| | | #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 |