| Zane Shelley | e90b85d | 2021-12-17 17:24:49 -0600 | [diff] [blame] | 1 | #include <stdio.h> | 
|  | 2 |  | 
|  | 3 | #include <analyzer/plugins/plugin.hpp> | 
|  | 4 | #include <analyzer/util.hpp> | 
|  | 5 | #include <util/pdbg.hpp> | 
|  | 6 | #include <util/trace.hpp> | 
|  | 7 |  | 
|  | 8 | #include "gtest/gtest.h" | 
|  | 9 |  | 
|  | 10 | //------------------------------------------------------------------------------ | 
|  | 11 |  | 
|  | 12 | using namespace analyzer; | 
|  | 13 |  | 
|  | 14 | extern bool g_lpcTimeout; | 
|  | 15 |  | 
|  | 16 | // Test #1: - no LPC timeout | 
|  | 17 | TEST(LpcTimeout, TestSet1) | 
|  | 18 | { | 
|  | 19 | pdbg_targets_init(nullptr); | 
|  | 20 |  | 
|  | 21 | g_lpcTimeout = false; // no timeout | 
|  | 22 |  | 
|  | 23 | libhei::Chip chip{util::pdbg::getTrgt("/proc0"), P10_20}; | 
|  | 24 |  | 
|  | 25 | auto plugin = PluginMap::getSingleton().get(chip.getType(), "lpc_timeout"); | 
|  | 26 |  | 
|  | 27 | ServiceData sd{libhei::Signature{}, AnalysisType::SYSTEM_CHECKSTOP, | 
|  | 28 | libhei::IsolationData{}}; | 
|  | 29 |  | 
|  | 30 | plugin(0, chip, sd); | 
|  | 31 |  | 
|  | 32 | nlohmann::json j{}; | 
|  | 33 | std::string s{}; | 
|  | 34 |  | 
|  | 35 | // Callout list | 
|  | 36 | j = sd.getCalloutList(); | 
|  | 37 | s = R"([ | 
|  | 38 | { | 
|  | 39 | "Priority": "H", | 
|  | 40 | "Procedure": "next_level_support" | 
|  | 41 | } | 
|  | 42 | ])"; | 
|  | 43 | EXPECT_EQ(s, j.dump(4)); | 
|  | 44 |  | 
|  | 45 | // Callout FFDC | 
|  | 46 | j = sd.getCalloutFFDC(); | 
|  | 47 | s = R"([ | 
|  | 48 | { | 
|  | 49 | "Callout Type": "Procedure Callout", | 
|  | 50 | "Priority": "high", | 
|  | 51 | "Procedure": "next_level_support" | 
|  | 52 | } | 
|  | 53 | ])"; | 
|  | 54 | EXPECT_EQ(s, j.dump(4)); | 
|  | 55 | } | 
|  | 56 |  | 
|  | 57 | // Test #2: - LPC timeout | 
|  | 58 | TEST(LpcTimeout, TestSet2) | 
|  | 59 | { | 
|  | 60 | pdbg_targets_init(nullptr); | 
|  | 61 |  | 
|  | 62 | g_lpcTimeout = true; // force timeout | 
|  | 63 |  | 
|  | 64 | libhei::Chip chip{util::pdbg::getTrgt("/proc0"), P10_20}; | 
|  | 65 |  | 
|  | 66 | auto plugin = PluginMap::getSingleton().get(chip.getType(), "lpc_timeout"); | 
|  | 67 |  | 
|  | 68 | ServiceData sd{libhei::Signature{}, AnalysisType::SYSTEM_CHECKSTOP, | 
|  | 69 | libhei::IsolationData{}}; | 
|  | 70 |  | 
|  | 71 | plugin(0, chip, sd); | 
|  | 72 |  | 
|  | 73 | nlohmann::json j{}; | 
|  | 74 | std::string s{}; | 
|  | 75 |  | 
|  | 76 | // Callout list | 
|  | 77 | j = sd.getCalloutList(); | 
|  | 78 | s = R"([ | 
|  | 79 | { | 
|  | 80 | "Deconfigured": false, | 
|  | 81 | "Guarded": false, | 
|  | 82 | "LocationCode": "/bmc0", | 
|  | 83 | "Priority": "M" | 
|  | 84 | }, | 
|  | 85 | { | 
|  | 86 | "Deconfigured": false, | 
|  | 87 | "Guarded": false, | 
|  | 88 | "LocationCode": "P0", | 
|  | 89 | "Priority": "M" | 
|  | 90 | }, | 
|  | 91 | { | 
|  | 92 | "Deconfigured": false, | 
|  | 93 | "Guarded": false, | 
|  | 94 | "LocationCode": "/proc0", | 
|  | 95 | "Priority": "M" | 
|  | 96 | } | 
|  | 97 | ])"; | 
|  | 98 | EXPECT_EQ(s, j.dump(4)); | 
|  | 99 |  | 
|  | 100 | // Callout FFDC | 
|  | 101 | j = sd.getCalloutFFDC(); | 
|  | 102 | s = R"([ | 
|  | 103 | { | 
|  | 104 | "Callout Type": "Part Callout", | 
|  | 105 | "Part Type": "PNOR", | 
|  | 106 | "Priority": "medium" | 
|  | 107 | }, | 
|  | 108 | { | 
|  | 109 | "Callout Type": "Clock Callout", | 
|  | 110 | "Clock Type": "OSC_REF_CLOCK_0", | 
|  | 111 | "Priority": "medium" | 
|  | 112 | }, | 
|  | 113 | { | 
|  | 114 | "Callout Type": "Hardware Callout", | 
|  | 115 | "Guard": false, | 
|  | 116 | "Priority": "medium", | 
|  | 117 | "Target": "/proc0" | 
|  | 118 | } | 
|  | 119 | ])"; | 
|  | 120 | EXPECT_EQ(s, j.dump(4)); | 
|  | 121 | } |