1 #include <util/data_file.hpp> 2 #include <util/temporary_file.hpp> 3 #include <util/trace.hpp> 4 5 #include "gtest/gtest.h" 6 7 using namespace std; 8 using namespace util; 9 10 using json = nlohmann::json; 11 12 TEST(UtilDataFile, TestFindFiles) 13 { 14 // The parent folder is determined by the file system. 15 // On Linux it is /tmp. 16 fs::path dataDir = fs::temp_directory_path(); 17 // Regex pattern of the temp files used by TemporaryFile class. 18 auto regexPattern = R"(openpower\-hw\-diags\-.*)"; 19 // The vector to store temp files. 20 vector<fs::path> dataPaths; 21 22 // Create two new temp file objects. 23 TemporaryFile tempFile1{}; 24 TemporaryFile tempFile2{}; 25 26 // Get the string of paths of temp files. 27 string fullPathTempFile1 = tempFile1.getPath(); 28 string fullPathTempFile2 = tempFile2.getPath(); 29 EXPECT_NE(fullPathTempFile1, fullPathTempFile2); 30 31 trace::inf("fullPathTempFile1: %s", fullPathTempFile1.c_str()); 32 trace::inf("fullPathTempFile2: %s", fullPathTempFile2.c_str()); 33 34 // Path objects of two temp files 35 // path1 and path2 will be used to test later. 36 fs::path path1 = fullPathTempFile1; 37 fs::path path2 = fullPathTempFile2; 38 39 // After creating new temp files, call the function under test. 40 util::findFiles(dataDir, regexPattern, dataPaths); 41 42 vector<fs::path>::iterator it; 43 // Verify that the newly created temp files were in vector dataPaths 44 it = find(dataPaths.begin(), dataPaths.end(), path1); 45 EXPECT_TRUE(it != dataPaths.end()); 46 it = find(dataPaths.begin(), dataPaths.end(), path2); 47 EXPECT_TRUE(it != dataPaths.end()); 48 49 // Remove the newly created temp files. 50 tempFile1.remove(); 51 tempFile2.remove(); 52 } 53 54 TEST(UtilDataFile, TestValidateJson) 55 { 56 // The json object that is used as schema for other json objects. 57 // Copied/modified from file: 58 // ./analyzer/ras-data/schema/ras-data-schema-v01.json 59 json schema_obj = R"({ 60 "$schema": "https://json-schema.org/draft/2020-12/schema", 61 "title": "RAS Data schema for openpower-hw-diags", 62 "version": 1, 63 "type": "object", 64 "additionalProperties": false, 65 "required": [ "model_ec" ], 66 "properties": { 67 "model_ec": { 68 "type": "string", 69 "pattern": "^[0-9A-Fa-f]{8}$" 70 }, 71 "version": { 72 "type": "integer", 73 "minimum": 1 74 } 75 } 76 })"_json; 77 78 // The json objects 79 // Copied/modified from file: 80 // ./analyzer/ras-data/data/ras-data-p10-20.json 81 json json_obj = R"({ 82 "model_ec" : "20da0020", 83 "version" : 1 84 })"_json; 85 86 EXPECT_TRUE(util::validateJson(schema_obj, json_obj)); 87 88 // Test negative scenario. 89 // The key "version_1" does not exist in the schema. 90 json json_obj1 = R"({ 91 "model_ec" : "20da0020", 92 "version_1" : 1 93 })"_json; 94 95 EXPECT_FALSE(util::validateJson(schema_obj, json_obj1)); 96 } 97