blob: 711d1935a36937473ea01cc01284cc7038ac1c94 [file] [log] [blame]
Caleb Palmer4d8bb502025-03-21 15:46:38 -05001#include <stdio.h>
2
3#include <analyzer/plugins/plugin.hpp>
4#include <analyzer/ras-data/ras-data-parser.hpp>
5#include <hei_util.hpp>
6#include <util/pdbg.hpp>
7#include <util/trace.hpp>
8
9#include "gtest/gtest.h"
10
11using namespace analyzer;
12
13static const auto dstlfirId = static_cast<libhei::NodeId_t>(
14 libhei::hash<libhei::NodeId_t>("MC_DSTL_FIR"));
15
16// Test multiple channel timeouts on at the same time
17TEST(ChnlTimeout, MultipleTimeouts)
18{
19 pdbg_targets_init(nullptr);
20
21 libhei::Chip proc0{util::pdbg::getTrgt("/proc0"), P10_20};
22
23 libhei::Signature sig1{proc0, dstlfirId, 0, 22, libhei::ATTN_TYPE_UNIT_CS};
24 libhei::Signature sig2{proc0, dstlfirId, 0, 23, libhei::ATTN_TYPE_UNIT_CS};
25
26 libhei::IsolationData isoData{};
27 isoData.addSignature(sig1);
28 isoData.addSignature(sig2);
29 ServiceData sd{sig1, AnalysisType::SYSTEM_CHECKSTOP, isoData};
30
31 RasDataParser rasData{};
32 rasData.getResolution(sig1)->resolve(sd);
33
34 nlohmann::json j{};
35 std::string s{};
36
37 // Callout list
38 j = sd.getCalloutList();
39 s = R"([
40 {
41 "Deconfigured": false,
42 "Guarded": false,
43 "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
44 "Priority": "H"
45 },
46 {
47 "Deconfigured": false,
48 "Guarded": false,
49 "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0",
50 "Priority": "L"
51 },
52 {
53 "Deconfigured": false,
54 "Guarded": false,
55 "LocationCode": "P0",
56 "Priority": "L"
57 }
58])";
59 EXPECT_EQ(s, j.dump(4));
60
61 // Callout FFDC
62 j = sd.getCalloutFFDC();
63 s = R"([
64 {
65 "Bus Type": "OMI_BUS",
66 "Callout Type": "Bus Callout",
67 "Guard": false,
68 "Priority": "low",
69 "RX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
70 "TX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0"
71 },
72 {
73 "Callout Type": "Hardware Callout",
74 "Guard": true,
75 "Priority": "high",
76 "Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0"
77 }
78])";
79 EXPECT_EQ(s, j.dump(4));
80}
81
82// Test multiple channel timeouts on different MC_DSTL_FIR instances
83TEST(ChnlTimeout, DifferentInst)
84{
85 pdbg_targets_init(nullptr);
86
87 libhei::Chip proc0{util::pdbg::getTrgt("/proc0"), P10_20};
88
89 libhei::Signature sig1{proc0, dstlfirId, 0, 22, libhei::ATTN_TYPE_UNIT_CS};
90 libhei::Signature sig2{proc0, dstlfirId, 1, 22, libhei::ATTN_TYPE_UNIT_CS};
91
92 libhei::IsolationData isoData{};
93 isoData.addSignature(sig1);
94 isoData.addSignature(sig2);
95 ServiceData sd{sig1, AnalysisType::SYSTEM_CHECKSTOP, isoData};
96
97 RasDataParser rasData{};
98 rasData.getResolution(sig1)->resolve(sd);
99
100 nlohmann::json j{};
101 std::string s{};
102
103 // Callout list
104 j = sd.getCalloutList();
105 s = R"([
106 {
107 "Deconfigured": false,
108 "Guarded": false,
109 "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
110 "Priority": "H"
111 },
112 {
113 "Deconfigured": false,
114 "Guarded": false,
115 "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0",
116 "Priority": "L"
117 },
118 {
119 "Deconfigured": false,
120 "Guarded": false,
121 "LocationCode": "P0",
122 "Priority": "L"
123 }
124])";
125 EXPECT_EQ(s, j.dump(4));
126
127 // Callout FFDC
128 j = sd.getCalloutFFDC();
129 s = R"([
130 {
131 "Bus Type": "OMI_BUS",
132 "Callout Type": "Bus Callout",
133 "Guard": false,
134 "Priority": "low",
135 "RX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
136 "TX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0"
137 },
138 {
139 "Callout Type": "Hardware Callout",
140 "Guard": true,
141 "Priority": "high",
142 "Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0"
143 }
144])";
145 EXPECT_EQ(s, j.dump(4));
146}
147
148// Test multiple channel timeouts on different processors
149TEST(ChnlTimeout, DifferentProc)
150{
151 pdbg_targets_init(nullptr);
152
153 libhei::Chip proc0{util::pdbg::getTrgt("/proc0"), P10_20};
154 libhei::Chip proc1{util::pdbg::getTrgt("/proc1"), P10_20};
155
156 libhei::Signature sig1{proc0, dstlfirId, 0, 22, libhei::ATTN_TYPE_UNIT_CS};
157 libhei::Signature sig2{proc1, dstlfirId, 0, 22, libhei::ATTN_TYPE_UNIT_CS};
158
159 libhei::IsolationData isoData{};
160 isoData.addSignature(sig1);
161 isoData.addSignature(sig2);
162 ServiceData sd{sig1, AnalysisType::SYSTEM_CHECKSTOP, isoData};
163
164 RasDataParser rasData{};
165 rasData.getResolution(sig1)->resolve(sd);
166
167 nlohmann::json j{};
168 std::string s{};
169
170 // Callout list
171 j = sd.getCalloutList();
172 s = R"([
173 {
174 "Deconfigured": false,
175 "Guarded": false,
176 "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
177 "Priority": "L"
178 },
179 {
180 "Deconfigured": false,
181 "Guarded": false,
182 "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0",
183 "Priority": "H"
184 },
185 {
186 "Deconfigured": false,
187 "Guarded": false,
188 "LocationCode": "P0",
189 "Priority": "L"
190 }
191])";
192 EXPECT_EQ(s, j.dump(4));
193
194 // Callout FFDC
195 j = sd.getCalloutFFDC();
196 s = R"([
197 {
198 "Bus Type": "OMI_BUS",
199 "Callout Type": "Bus Callout",
200 "Guard": false,
201 "Priority": "low",
202 "RX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
203 "TX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0"
204 },
205 {
206 "Bus Type": "OMI_BUS",
207 "Callout Type": "Connected Callout",
208 "Guard": true,
209 "Priority": "high",
210 "RX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
211 "TX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0"
212 }
213])";
214 EXPECT_EQ(s, j.dump(4));
215}
216
217// Test a single channel timeout
218TEST(ChnlTimeout, SingleTimeout)
219{
220 pdbg_targets_init(nullptr);
221
222 libhei::Chip proc0{util::pdbg::getTrgt("/proc0"), P10_20};
223
224 libhei::Signature sig1{proc0, dstlfirId, 0, 22, libhei::ATTN_TYPE_UNIT_CS};
225
226 libhei::IsolationData isoData{};
227 isoData.addSignature(sig1);
228 ServiceData sd{sig1, AnalysisType::SYSTEM_CHECKSTOP, isoData};
229
230 RasDataParser rasData{};
231 rasData.getResolution(sig1)->resolve(sd);
232
233 nlohmann::json j{};
234 std::string s{};
235
236 // Callout list
237 j = sd.getCalloutList();
238 s = R"([
239 {
240 "Deconfigured": false,
241 "Guarded": false,
242 "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
243 "Priority": "L"
244 },
245 {
246 "Deconfigured": false,
247 "Guarded": false,
248 "LocationCode": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0",
249 "Priority": "H"
250 },
251 {
252 "Deconfigured": false,
253 "Guarded": false,
254 "LocationCode": "P0",
255 "Priority": "L"
256 }
257])";
258 EXPECT_EQ(s, j.dump(4));
259
260 // Callout FFDC
261 j = sd.getCalloutFFDC();
262 s = R"([
263 {
264 "Bus Type": "OMI_BUS",
265 "Callout Type": "Bus Callout",
266 "Guard": false,
267 "Priority": "low",
268 "RX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
269 "TX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0"
270 },
271 {
272 "Bus Type": "OMI_BUS",
273 "Callout Type": "Connected Callout",
274 "Guard": true,
275 "Priority": "high",
276 "RX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0",
277 "TX Target": "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0"
278 }
279])";
280 EXPECT_EQ(s, j.dump(4));
281}