197f7abcfSMatt Spinler /**
297f7abcfSMatt Spinler * Copyright © 2019 IBM Corporation
397f7abcfSMatt Spinler *
497f7abcfSMatt Spinler * Licensed under the Apache License, Version 2.0 (the "License");
597f7abcfSMatt Spinler * you may not use this file except in compliance with the License.
697f7abcfSMatt Spinler * You may obtain a copy of the License at
797f7abcfSMatt Spinler *
897f7abcfSMatt Spinler * http://www.apache.org/licenses/LICENSE-2.0
997f7abcfSMatt Spinler *
1097f7abcfSMatt Spinler * Unless required by applicable law or agreed to in writing, software
1197f7abcfSMatt Spinler * distributed under the License is distributed on an "AS IS" BASIS,
1297f7abcfSMatt Spinler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1397f7abcfSMatt Spinler * See the License for the specific language governing permissions and
1497f7abcfSMatt Spinler * limitations under the License.
1597f7abcfSMatt Spinler */
16367144cfSMatt Spinler #include "extensions/openpower-pels/registry.hpp"
17367144cfSMatt Spinler
182544b419SPatrick Williams #include <nlohmann/json.hpp>
192544b419SPatrick Williams
20367144cfSMatt Spinler #include <filesystem>
21367144cfSMatt Spinler #include <fstream>
22367144cfSMatt Spinler
23367144cfSMatt Spinler #include <gtest/gtest.h>
24367144cfSMatt Spinler
25367144cfSMatt Spinler using namespace openpower::pels::message;
266b427cc8SMatt Spinler using namespace openpower::pels;
27367144cfSMatt Spinler namespace fs = std::filesystem;
28367144cfSMatt Spinler
29367144cfSMatt Spinler const auto registryData = R"(
30367144cfSMatt Spinler {
31367144cfSMatt Spinler "PELs":
32367144cfSMatt Spinler [
33367144cfSMatt Spinler {
34367144cfSMatt Spinler "Name": "xyz.openbmc_project.Power.Fault",
35367144cfSMatt Spinler "Subsystem": "power_supply",
36367144cfSMatt Spinler
37367144cfSMatt Spinler "SRC":
38367144cfSMatt Spinler {
39367144cfSMatt Spinler "ReasonCode": "0x2030"
400f717e10SHarisuddin Mohamed Isa },
410f717e10SHarisuddin Mohamed Isa
420f717e10SHarisuddin Mohamed Isa "Documentation":
430f717e10SHarisuddin Mohamed Isa {
440f717e10SHarisuddin Mohamed Isa "Description": "A PGOOD Fault",
450f717e10SHarisuddin Mohamed Isa "Message": "PS had a PGOOD Fault"
46367144cfSMatt Spinler }
47367144cfSMatt Spinler },
48367144cfSMatt Spinler
49367144cfSMatt Spinler {
50367144cfSMatt Spinler "Name": "xyz.openbmc_project.Power.OverVoltage",
51367144cfSMatt Spinler "Subsystem": "power_control_hw",
52aadccc85SMatt Spinler "Severity":
53aadccc85SMatt Spinler [
54aadccc85SMatt Spinler {
55aadccc85SMatt Spinler "System": "systemA",
56aadccc85SMatt Spinler "SevValue": "unrecoverable"
57aadccc85SMatt Spinler },
58aadccc85SMatt Spinler {
59aadccc85SMatt Spinler "System": "systemB",
60aadccc85SMatt Spinler "SevValue": "recovered"
61aadccc85SMatt Spinler },
62aadccc85SMatt Spinler {
63aadccc85SMatt Spinler "SevValue": "predictive"
64aadccc85SMatt Spinler }
65aadccc85SMatt Spinler ],
66367144cfSMatt Spinler "MfgSeverity": "non_error",
67367144cfSMatt Spinler "ActionFlags": ["service_action", "report", "call_home"],
68367144cfSMatt Spinler "MfgActionFlags": ["hidden"],
69367144cfSMatt Spinler
70367144cfSMatt Spinler "SRC":
71367144cfSMatt Spinler {
72367144cfSMatt Spinler "ReasonCode": "0x2333",
73367144cfSMatt Spinler "Type": "BD",
74367144cfSMatt Spinler "SymptomIDFields": ["SRCWord5", "SRCWord6", "SRCWord7"],
75367144cfSMatt Spinler "Words6To9":
76367144cfSMatt Spinler {
77367144cfSMatt Spinler "6":
78367144cfSMatt Spinler {
791a1b0dfbSHarisuddin Mohamed Isa "Description": "Failing unit number",
80367144cfSMatt Spinler "AdditionalDataPropSource": "PS_NUM"
81367144cfSMatt Spinler },
82367144cfSMatt Spinler
83367144cfSMatt Spinler "7":
84367144cfSMatt Spinler {
851a1b0dfbSHarisuddin Mohamed Isa "Description": "bad voltage",
86367144cfSMatt Spinler "AdditionalDataPropSource": "VOLTAGE"
87367144cfSMatt Spinler }
883fe93e96SMatt Spinler },
89da5b76b2SMatt Spinler "DeconfigFlag": true,
90da5b76b2SMatt Spinler "CheckstopFlag": true
910f717e10SHarisuddin Mohamed Isa },
920f717e10SHarisuddin Mohamed Isa
930f717e10SHarisuddin Mohamed Isa "Documentation":
940f717e10SHarisuddin Mohamed Isa {
950f717e10SHarisuddin Mohamed Isa "Description": "A PGOOD Fault",
960f717e10SHarisuddin Mohamed Isa "Message": "PS %1 had a PGOOD Fault",
970f717e10SHarisuddin Mohamed Isa "MessageArgSources":
980f717e10SHarisuddin Mohamed Isa [
990f717e10SHarisuddin Mohamed Isa "SRCWord6"
1000f717e10SHarisuddin Mohamed Isa ],
1010f717e10SHarisuddin Mohamed Isa "Notes": [
1020f717e10SHarisuddin Mohamed Isa "In the UserData section there is a JSON",
1030f717e10SHarisuddin Mohamed Isa "dump that provides debug information."
1040f717e10SHarisuddin Mohamed Isa ]
105711f1129SMatt Spinler },
106711f1129SMatt Spinler
107711f1129SMatt Spinler "JournalCapture":
108711f1129SMatt Spinler {
109711f1129SMatt Spinler "NumLines": 7
110367144cfSMatt Spinler }
11123970b0dSMatt Spinler },
11223970b0dSMatt Spinler
11323970b0dSMatt Spinler {
11423970b0dSMatt Spinler "Name": "xyz.openbmc_project.Common.Error.Timeout",
11523970b0dSMatt Spinler "PossibleSubsystems": ["processor", "memory"],
11623970b0dSMatt Spinler
11723970b0dSMatt Spinler "SRC":
11823970b0dSMatt Spinler {
11923970b0dSMatt Spinler "ReasonCode": "0x2030"
12023970b0dSMatt Spinler },
12123970b0dSMatt Spinler "Documentation":
12223970b0dSMatt Spinler {
12323970b0dSMatt Spinler "Description": "A PGOOD Fault",
12423970b0dSMatt Spinler "Message": "PS had a PGOOD Fault"
12523970b0dSMatt Spinler }
126711f1129SMatt Spinler },
127711f1129SMatt Spinler
128711f1129SMatt Spinler {
129711f1129SMatt Spinler "Name": "xyz.openbmc_project.Journal.Capture",
130711f1129SMatt Spinler "Subsystem": "power_supply",
131711f1129SMatt Spinler
132711f1129SMatt Spinler "SRC":
133711f1129SMatt Spinler {
134711f1129SMatt Spinler "ReasonCode": "0x2030"
135711f1129SMatt Spinler },
136711f1129SMatt Spinler
137711f1129SMatt Spinler "Documentation":
138711f1129SMatt Spinler {
139711f1129SMatt Spinler "Description": "journal capture test",
140711f1129SMatt Spinler "Message": "journal capture test"
141711f1129SMatt Spinler },
142711f1129SMatt Spinler
143711f1129SMatt Spinler "JournalCapture":
144711f1129SMatt Spinler {
145711f1129SMatt Spinler "Sections": [
146711f1129SMatt Spinler {
147711f1129SMatt Spinler "NumLines": 5,
148711f1129SMatt Spinler "SyslogID": "test1"
149711f1129SMatt Spinler },
150711f1129SMatt Spinler {
151711f1129SMatt Spinler "NumLines": 6,
152711f1129SMatt Spinler "SyslogID": "test2"
153711f1129SMatt Spinler }
154711f1129SMatt Spinler ]
155711f1129SMatt Spinler }
1569972716fSharsh-agarwal1 },
1579972716fSharsh-agarwal1
1589972716fSharsh-agarwal1 {
1599972716fSharsh-agarwal1 "Name": "org.open_power.PHAL.Info.ClockDailyLog",
1609972716fSharsh-agarwal1 "Subsystem": "cec_clocks",
1619972716fSharsh-agarwal1 "ComponentID": "0x3000",
1629972716fSharsh-agarwal1 "Severity": "non_error",
1639972716fSharsh-agarwal1 "ActionFlags": ["report", "call_home", "heartbeat_call_home"],
1649972716fSharsh-agarwal1
1659972716fSharsh-agarwal1 "SRC":
1669972716fSharsh-agarwal1 {
1679972716fSharsh-agarwal1 "ReasonCode": "0x300A",
1689972716fSharsh-agarwal1 "Words6To9": {}
1699972716fSharsh-agarwal1 },
1709972716fSharsh-agarwal1
1719972716fSharsh-agarwal1 "Documentation":
1729972716fSharsh-agarwal1 {
1739972716fSharsh-agarwal1 "Description": "Informational error to house clock debug info",
1749972716fSharsh-agarwal1 "Message": "Informational error to house clock debug info",
1759972716fSharsh-agarwal1 "Notes": [
1769972716fSharsh-agarwal1 "User data includes processor and clock register state information."
1779972716fSharsh-agarwal1 ]
1789972716fSharsh-agarwal1 }
179367144cfSMatt Spinler }
180367144cfSMatt Spinler ]
181367144cfSMatt Spinler }
182367144cfSMatt Spinler )";
183367144cfSMatt Spinler
184367144cfSMatt Spinler class RegistryTest : public ::testing::Test
185367144cfSMatt Spinler {
186367144cfSMatt Spinler protected:
SetUpTestCase()187367144cfSMatt Spinler static void SetUpTestCase()
188367144cfSMatt Spinler {
189367144cfSMatt Spinler char path[] = "/tmp/regtestXXXXXX";
190367144cfSMatt Spinler regDir = mkdtemp(path);
191367144cfSMatt Spinler }
192367144cfSMatt Spinler
TearDownTestCase()193367144cfSMatt Spinler static void TearDownTestCase()
194367144cfSMatt Spinler {
195367144cfSMatt Spinler fs::remove_all(regDir);
196367144cfSMatt Spinler }
197367144cfSMatt Spinler
writeData(const char * data)198367144cfSMatt Spinler static std::string writeData(const char* data)
199367144cfSMatt Spinler {
200367144cfSMatt Spinler fs::path path = regDir / "registry.json";
201367144cfSMatt Spinler std::ofstream stream{path};
202367144cfSMatt Spinler stream << data;
203367144cfSMatt Spinler return path;
204367144cfSMatt Spinler }
205367144cfSMatt Spinler
206367144cfSMatt Spinler static fs::path regDir;
207367144cfSMatt Spinler };
208367144cfSMatt Spinler
209367144cfSMatt Spinler fs::path RegistryTest::regDir{};
210367144cfSMatt Spinler
TEST_F(RegistryTest,TestNoEntry)211367144cfSMatt Spinler TEST_F(RegistryTest, TestNoEntry)
212367144cfSMatt Spinler {
213367144cfSMatt Spinler auto path = RegistryTest::writeData(registryData);
214367144cfSMatt Spinler Registry registry{path};
215367144cfSMatt Spinler
2160f717e10SHarisuddin Mohamed Isa auto entry = registry.lookup("foo", LookupType::name);
217367144cfSMatt Spinler EXPECT_FALSE(entry);
218367144cfSMatt Spinler }
219367144cfSMatt Spinler
TEST_F(RegistryTest,TestFindEntry)220367144cfSMatt Spinler TEST_F(RegistryTest, TestFindEntry)
221367144cfSMatt Spinler {
222367144cfSMatt Spinler auto path = RegistryTest::writeData(registryData);
223367144cfSMatt Spinler Registry registry{path};
224367144cfSMatt Spinler
2250f717e10SHarisuddin Mohamed Isa auto entry = registry.lookup("xyz.openbmc_project.Power.OverVoltage",
2260f717e10SHarisuddin Mohamed Isa LookupType::name);
227367144cfSMatt Spinler ASSERT_TRUE(entry);
228367144cfSMatt Spinler EXPECT_EQ(entry->name, "xyz.openbmc_project.Power.OverVoltage");
229367144cfSMatt Spinler EXPECT_EQ(entry->subsystem, 0x62);
230aadccc85SMatt Spinler
231aadccc85SMatt Spinler ASSERT_EQ(entry->severity->size(), 3);
232aadccc85SMatt Spinler EXPECT_EQ((*entry->severity)[0].severity, 0x40);
233aadccc85SMatt Spinler EXPECT_EQ((*entry->severity)[0].system, "systemA");
234aadccc85SMatt Spinler EXPECT_EQ((*entry->severity)[1].severity, 0x10);
235aadccc85SMatt Spinler EXPECT_EQ((*entry->severity)[1].system, "systemB");
236aadccc85SMatt Spinler EXPECT_EQ((*entry->severity)[2].severity, 0x20);
237aadccc85SMatt Spinler EXPECT_EQ((*entry->severity)[2].system, "");
238aadccc85SMatt Spinler
239aadccc85SMatt Spinler EXPECT_EQ(entry->mfgSeverity->size(), 1);
240aadccc85SMatt Spinler EXPECT_EQ((*entry->mfgSeverity)[0].severity, 0x00);
241aadccc85SMatt Spinler
242e07f915bSMatt Spinler EXPECT_EQ(*(entry->actionFlags), 0xA800);
243367144cfSMatt Spinler EXPECT_EQ(*(entry->mfgActionFlags), 0x4000);
24493e2932fSMatt Spinler EXPECT_EQ(entry->componentID, 0x2300);
245367144cfSMatt Spinler EXPECT_FALSE(entry->eventType);
246367144cfSMatt Spinler EXPECT_FALSE(entry->eventScope);
247367144cfSMatt Spinler
24893e2932fSMatt Spinler EXPECT_EQ(entry->src.type, 0xBD);
24993e2932fSMatt Spinler EXPECT_EQ(entry->src.reasonCode, 0x2333);
2503fe93e96SMatt Spinler EXPECT_TRUE(entry->src.deconfigFlag);
251da5b76b2SMatt Spinler EXPECT_TRUE(entry->src.checkstopFlag);
25293e2932fSMatt Spinler
25393e2932fSMatt Spinler auto& hexwords = entry->src.hexwordADFields;
25493e2932fSMatt Spinler EXPECT_TRUE(hexwords);
25593e2932fSMatt Spinler EXPECT_EQ((*hexwords).size(), 2);
25693e2932fSMatt Spinler
25793e2932fSMatt Spinler auto word = (*hexwords).find(6);
25893e2932fSMatt Spinler EXPECT_NE(word, (*hexwords).end());
2591a1b0dfbSHarisuddin Mohamed Isa EXPECT_EQ(std::get<0>(word->second), "PS_NUM");
26093e2932fSMatt Spinler
26193e2932fSMatt Spinler word = (*hexwords).find(7);
26293e2932fSMatt Spinler EXPECT_NE(word, (*hexwords).end());
2631a1b0dfbSHarisuddin Mohamed Isa EXPECT_EQ(std::get<0>(word->second), "VOLTAGE");
26493e2932fSMatt Spinler
26593e2932fSMatt Spinler auto& sid = entry->src.symptomID;
26693e2932fSMatt Spinler EXPECT_TRUE(sid);
26793e2932fSMatt Spinler EXPECT_EQ((*sid).size(), 3);
26893e2932fSMatt Spinler EXPECT_NE(std::find((*sid).begin(), (*sid).end(), 5), (*sid).end());
26993e2932fSMatt Spinler EXPECT_NE(std::find((*sid).begin(), (*sid).end(), 6), (*sid).end());
27093e2932fSMatt Spinler EXPECT_NE(std::find((*sid).begin(), (*sid).end(), 7), (*sid).end());
2710f717e10SHarisuddin Mohamed Isa
2720f717e10SHarisuddin Mohamed Isa EXPECT_EQ(entry->doc.description, "A PGOOD Fault");
2730f717e10SHarisuddin Mohamed Isa EXPECT_EQ(entry->doc.message, "PS %1 had a PGOOD Fault");
2740f717e10SHarisuddin Mohamed Isa auto& hexwordSource = entry->doc.messageArgSources;
2750f717e10SHarisuddin Mohamed Isa EXPECT_TRUE(hexwordSource);
2760f717e10SHarisuddin Mohamed Isa EXPECT_EQ((*hexwordSource).size(), 1);
2770f717e10SHarisuddin Mohamed Isa EXPECT_EQ((*hexwordSource).front(), "SRCWord6");
2780f717e10SHarisuddin Mohamed Isa
279711f1129SMatt Spinler const auto& jc = entry->journalCapture;
280711f1129SMatt Spinler ASSERT_TRUE(jc);
281711f1129SMatt Spinler ASSERT_TRUE(std::holds_alternative<size_t>(*jc));
282711f1129SMatt Spinler EXPECT_EQ(std::get<size_t>(*jc), 7);
283711f1129SMatt Spinler
2840f717e10SHarisuddin Mohamed Isa entry = registry.lookup("0x2333", LookupType::reasonCode);
2850f717e10SHarisuddin Mohamed Isa ASSERT_TRUE(entry);
2860f717e10SHarisuddin Mohamed Isa EXPECT_EQ(entry->name, "xyz.openbmc_project.Power.OverVoltage");
2879972716fSharsh-agarwal1
2889972716fSharsh-agarwal1 entry = registry.lookup("org.open_power.PHAL.Info.ClockDailyLog",
2899972716fSharsh-agarwal1 LookupType::name);
2909972716fSharsh-agarwal1 ASSERT_TRUE(entry);
2919972716fSharsh-agarwal1 EXPECT_EQ(entry->name, "org.open_power.PHAL.Info.ClockDailyLog");
2929972716fSharsh-agarwal1 EXPECT_EQ(*(entry->actionFlags), 0x2820);
293367144cfSMatt Spinler }
294367144cfSMatt Spinler
295367144cfSMatt Spinler // Check the entry that mostly uses defaults
TEST_F(RegistryTest,TestFindEntryMinimal)296367144cfSMatt Spinler TEST_F(RegistryTest, TestFindEntryMinimal)
297367144cfSMatt Spinler {
298367144cfSMatt Spinler auto path = RegistryTest::writeData(registryData);
299367144cfSMatt Spinler Registry registry{path};
300367144cfSMatt Spinler
301075c7923SPatrick Williams auto entry =
302075c7923SPatrick Williams registry.lookup("xyz.openbmc_project.Power.Fault", LookupType::name);
303367144cfSMatt Spinler ASSERT_TRUE(entry);
304367144cfSMatt Spinler EXPECT_EQ(entry->name, "xyz.openbmc_project.Power.Fault");
305367144cfSMatt Spinler EXPECT_EQ(entry->subsystem, 0x61);
306367144cfSMatt Spinler EXPECT_FALSE(entry->severity);
307367144cfSMatt Spinler EXPECT_FALSE(entry->mfgSeverity);
308367144cfSMatt Spinler EXPECT_FALSE(entry->mfgActionFlags);
309e07f915bSMatt Spinler EXPECT_FALSE(entry->actionFlags);
31093e2932fSMatt Spinler EXPECT_EQ(entry->componentID, 0x2000);
311367144cfSMatt Spinler EXPECT_FALSE(entry->eventType);
312367144cfSMatt Spinler EXPECT_FALSE(entry->eventScope);
31393e2932fSMatt Spinler
31493e2932fSMatt Spinler EXPECT_EQ(entry->src.reasonCode, 0x2030);
31593e2932fSMatt Spinler EXPECT_EQ(entry->src.type, 0xBD);
31693e2932fSMatt Spinler EXPECT_FALSE(entry->src.hexwordADFields);
31793e2932fSMatt Spinler EXPECT_FALSE(entry->src.symptomID);
3183fe93e96SMatt Spinler EXPECT_FALSE(entry->src.deconfigFlag);
319da5b76b2SMatt Spinler EXPECT_FALSE(entry->src.checkstopFlag);
320367144cfSMatt Spinler }
321367144cfSMatt Spinler
TEST_F(RegistryTest,TestBadJSON)322367144cfSMatt Spinler TEST_F(RegistryTest, TestBadJSON)
323367144cfSMatt Spinler {
324367144cfSMatt Spinler auto path = RegistryTest::writeData("bad {} json");
325367144cfSMatt Spinler
326367144cfSMatt Spinler Registry registry{path};
327367144cfSMatt Spinler
3280f717e10SHarisuddin Mohamed Isa EXPECT_FALSE(registry.lookup("foo", LookupType::name));
329367144cfSMatt Spinler }
330367144cfSMatt Spinler
331367144cfSMatt Spinler // Test the helper functions the use the pel_values data.
TEST_F(RegistryTest,TestHelperFunctions)332367144cfSMatt Spinler TEST_F(RegistryTest, TestHelperFunctions)
333367144cfSMatt Spinler {
334367144cfSMatt Spinler using namespace openpower::pels::message::helper;
335367144cfSMatt Spinler EXPECT_EQ(getSubsystem("input_power_source"), 0xA1);
336367144cfSMatt Spinler EXPECT_THROW(getSubsystem("foo"), std::runtime_error);
337367144cfSMatt Spinler
338367144cfSMatt Spinler EXPECT_EQ(getSeverity("symptom_recovered"), 0x71);
339367144cfSMatt Spinler EXPECT_THROW(getSeverity("foo"), std::runtime_error);
340367144cfSMatt Spinler
341367144cfSMatt Spinler EXPECT_EQ(getEventType("dump_notification"), 0x08);
342367144cfSMatt Spinler EXPECT_THROW(getEventType("foo"), std::runtime_error);
343367144cfSMatt Spinler
344367144cfSMatt Spinler EXPECT_EQ(getEventScope("possibly_multiple_platforms"), 0x04);
345367144cfSMatt Spinler EXPECT_THROW(getEventScope("foo"), std::runtime_error);
346367144cfSMatt Spinler
347367144cfSMatt Spinler std::vector<std::string> flags{"service_action", "dont_report",
348367144cfSMatt Spinler "termination"};
349367144cfSMatt Spinler EXPECT_EQ(getActionFlags(flags), 0x9100);
350367144cfSMatt Spinler
3519972716fSharsh-agarwal1 flags.push_back("heartbeat_call_home");
3529972716fSharsh-agarwal1 EXPECT_EQ(getActionFlags(flags), 0x9120);
3539972716fSharsh-agarwal1 flags.clear();
3549972716fSharsh-agarwal1 flags.push_back("heartbeat_call_home");
3559972716fSharsh-agarwal1 EXPECT_EQ(getActionFlags(flags), 0x0020);
3569972716fSharsh-agarwal1
357367144cfSMatt Spinler flags.clear();
358367144cfSMatt Spinler flags.push_back("foo");
359367144cfSMatt Spinler EXPECT_THROW(getActionFlags(flags), std::runtime_error);
360367144cfSMatt Spinler }
36193e2932fSMatt Spinler
TEST_F(RegistryTest,TestGetSRCReasonCode)36293e2932fSMatt Spinler TEST_F(RegistryTest, TestGetSRCReasonCode)
36393e2932fSMatt Spinler {
36493e2932fSMatt Spinler using namespace openpower::pels::message::helper;
36593e2932fSMatt Spinler EXPECT_EQ(getSRCReasonCode(R"({"ReasonCode": "0x5555"})"_json, "foo"),
36693e2932fSMatt Spinler 0x5555);
36793e2932fSMatt Spinler
36893e2932fSMatt Spinler EXPECT_THROW(getSRCReasonCode(R"({"ReasonCode": "ZZZZ"})"_json, "foo"),
36993e2932fSMatt Spinler std::runtime_error);
37093e2932fSMatt Spinler }
37193e2932fSMatt Spinler
TEST_F(RegistryTest,TestGetSRCType)37293e2932fSMatt Spinler TEST_F(RegistryTest, TestGetSRCType)
37393e2932fSMatt Spinler {
37493e2932fSMatt Spinler using namespace openpower::pels::message::helper;
37593e2932fSMatt Spinler EXPECT_EQ(getSRCType(R"({"Type": "11"})"_json, "foo"), 0x11);
37693e2932fSMatt Spinler EXPECT_EQ(getSRCType(R"({"Type": "BF"})"_json, "foo"), 0xBF);
37793e2932fSMatt Spinler
37893e2932fSMatt Spinler EXPECT_THROW(getSRCType(R"({"Type": "1"})"_json, "foo"),
37993e2932fSMatt Spinler std::runtime_error);
38093e2932fSMatt Spinler
38193e2932fSMatt Spinler EXPECT_THROW(getSRCType(R"({"Type": "111"})"_json, "foo"),
38293e2932fSMatt Spinler std::runtime_error);
38393e2932fSMatt Spinler }
38493e2932fSMatt Spinler
TEST_F(RegistryTest,TestGetSRCHexwordFields)38593e2932fSMatt Spinler TEST_F(RegistryTest, TestGetSRCHexwordFields)
38693e2932fSMatt Spinler {
38793e2932fSMatt Spinler using namespace openpower::pels::message::helper;
38893e2932fSMatt Spinler const auto hexwords = R"(
38993e2932fSMatt Spinler {"Words6To9":
39093e2932fSMatt Spinler {
39193e2932fSMatt Spinler "8":
39293e2932fSMatt Spinler {
3931a1b0dfbSHarisuddin Mohamed Isa "Description": "TEST",
39493e2932fSMatt Spinler "AdditionalDataPropSource": "TEST"
39593e2932fSMatt Spinler }
39693e2932fSMatt Spinler }
39793e2932fSMatt Spinler })"_json;
39893e2932fSMatt Spinler
39993e2932fSMatt Spinler auto fields = getSRCHexwordFields(hexwords, "foo");
40093e2932fSMatt Spinler EXPECT_TRUE(fields);
40193e2932fSMatt Spinler auto word = fields->find(8);
40293e2932fSMatt Spinler EXPECT_NE(word, fields->end());
40393e2932fSMatt Spinler
40493e2932fSMatt Spinler const auto theInvalidRWord = R"(
40593e2932fSMatt Spinler {"Words6To9":
40693e2932fSMatt Spinler {
40793e2932fSMatt Spinler "R":
40893e2932fSMatt Spinler {
4091a1b0dfbSHarisuddin Mohamed Isa "Description": "TEST",
41093e2932fSMatt Spinler "AdditionalDataPropSource": "TEST"
41193e2932fSMatt Spinler }
41293e2932fSMatt Spinler }
41393e2932fSMatt Spinler })"_json;
41493e2932fSMatt Spinler
41593e2932fSMatt Spinler EXPECT_THROW(getSRCHexwordFields(theInvalidRWord, "foo"),
41693e2932fSMatt Spinler std::runtime_error);
41793e2932fSMatt Spinler }
41893e2932fSMatt Spinler
TEST_F(RegistryTest,TestGetSRCSymptomIDFields)41993e2932fSMatt Spinler TEST_F(RegistryTest, TestGetSRCSymptomIDFields)
42093e2932fSMatt Spinler {
42193e2932fSMatt Spinler using namespace openpower::pels::message::helper;
42293e2932fSMatt Spinler const auto sID = R"(
42393e2932fSMatt Spinler {
42493e2932fSMatt Spinler "SymptomIDFields": ["SRCWord3", "SRCWord4", "SRCWord5"]
42593e2932fSMatt Spinler })"_json;
42693e2932fSMatt Spinler
42793e2932fSMatt Spinler auto fields = getSRCSymptomIDFields(sID, "foo");
42893e2932fSMatt Spinler EXPECT_NE(std::find(fields->begin(), fields->end(), 3), fields->end());
42993e2932fSMatt Spinler EXPECT_NE(std::find(fields->begin(), fields->end(), 4), fields->end());
43093e2932fSMatt Spinler EXPECT_NE(std::find(fields->begin(), fields->end(), 5), fields->end());
43193e2932fSMatt Spinler
43293e2932fSMatt Spinler const auto badField = R"(
43393e2932fSMatt Spinler {
43493e2932fSMatt Spinler "SymptomIDFields": ["SRCWord3", "SRCWord4", "SRCWord"]
43593e2932fSMatt Spinler })"_json;
43693e2932fSMatt Spinler
43793e2932fSMatt Spinler EXPECT_THROW(getSRCSymptomIDFields(badField, "foo"), std::runtime_error);
43893e2932fSMatt Spinler }
43993e2932fSMatt Spinler
TEST_F(RegistryTest,TestGetComponentID)44093e2932fSMatt Spinler TEST_F(RegistryTest, TestGetComponentID)
44193e2932fSMatt Spinler {
44293e2932fSMatt Spinler using namespace openpower::pels::message::helper;
44393e2932fSMatt Spinler
44493e2932fSMatt Spinler // Get it from the JSON
445075c7923SPatrick Williams auto id =
446075c7923SPatrick Williams getComponentID(0xBD, 0x4200, R"({"ComponentID":"0x4200"})"_json, "foo");
44793e2932fSMatt Spinler EXPECT_EQ(id, 0x4200);
44893e2932fSMatt Spinler
44993e2932fSMatt Spinler // Get it from the reason code on a 0xBD SRC
45093e2932fSMatt Spinler id = getComponentID(0xBD, 0x6700, R"({})"_json, "foo");
45193e2932fSMatt Spinler EXPECT_EQ(id, 0x6700);
45293e2932fSMatt Spinler
45393e2932fSMatt Spinler // Not present on a 0x11 SRC
45493e2932fSMatt Spinler EXPECT_THROW(getComponentID(0x11, 0x8800, R"({})"_json, "foo"),
45593e2932fSMatt Spinler std::runtime_error);
45693e2932fSMatt Spinler }
4576b427cc8SMatt Spinler
4586b427cc8SMatt Spinler // Test when callouts are in the JSON.
TEST_F(RegistryTest,TestGetCallouts)4596b427cc8SMatt Spinler TEST_F(RegistryTest, TestGetCallouts)
4606b427cc8SMatt Spinler {
46115370292SArya K Padman std::vector<std::string> systemNames;
4626ea4d5f7SMatt Spinler
4636b427cc8SMatt Spinler {
4646b427cc8SMatt Spinler // Callouts without AD, that depend on system type,
4656b427cc8SMatt Spinler // where there is a default entry without a system type.
4666b427cc8SMatt Spinler auto json = R"(
4676b427cc8SMatt Spinler [
4686b427cc8SMatt Spinler {
4696b427cc8SMatt Spinler "System": "system1",
4706b427cc8SMatt Spinler "CalloutList":
4716b427cc8SMatt Spinler [
4726b427cc8SMatt Spinler {
4736b427cc8SMatt Spinler "Priority": "high",
4746b427cc8SMatt Spinler "LocCode": "P1-C1"
4756b427cc8SMatt Spinler },
4766b427cc8SMatt Spinler {
4776b427cc8SMatt Spinler "Priority": "low",
4786b427cc8SMatt Spinler "LocCode": "P1"
4796b427cc8SMatt Spinler },
4806b427cc8SMatt Spinler {
4816b427cc8SMatt Spinler "Priority": "low",
4826b427cc8SMatt Spinler "SymbolicFRU": "service_docs"
483f00f9d0fSMatt Spinler },
484f00f9d0fSMatt Spinler {
485f00f9d0fSMatt Spinler "Priority": "low",
486f00f9d0fSMatt Spinler "SymbolicFRUTrusted": "air_mover",
487f00f9d0fSMatt Spinler "UseInventoryLocCode": true
4886b427cc8SMatt Spinler }
4896b427cc8SMatt Spinler ]
4906b427cc8SMatt Spinler },
4916b427cc8SMatt Spinler {
4926b427cc8SMatt Spinler "CalloutList":
4936b427cc8SMatt Spinler [
4946b427cc8SMatt Spinler {
4956b427cc8SMatt Spinler "Priority": "medium",
4962edce4e2SMatt Spinler "Procedure": "BMC0001"
4976b427cc8SMatt Spinler },
4986b427cc8SMatt Spinler {
4996b427cc8SMatt Spinler "Priority": "low",
5006b427cc8SMatt Spinler "LocCode": "P3-C8",
5016b427cc8SMatt Spinler "SymbolicFRUTrusted": "service_docs"
5026b427cc8SMatt Spinler }
5036b427cc8SMatt Spinler ]
5046b427cc8SMatt Spinler
5056b427cc8SMatt Spinler }
5066b427cc8SMatt Spinler ])"_json;
5076b427cc8SMatt Spinler
5086b427cc8SMatt Spinler AdditionalData ad;
50915370292SArya K Padman systemNames.push_back("system1");
5106b427cc8SMatt Spinler
51115370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
512f00f9d0fSMatt Spinler EXPECT_EQ(callouts.size(), 4);
5136b427cc8SMatt Spinler EXPECT_EQ(callouts[0].priority, "high");
5146b427cc8SMatt Spinler EXPECT_EQ(callouts[0].locCode, "P1-C1");
5156b427cc8SMatt Spinler EXPECT_EQ(callouts[0].procedure, "");
5166b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRU, "");
5176b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
5186b427cc8SMatt Spinler EXPECT_EQ(callouts[1].priority, "low");
5196b427cc8SMatt Spinler EXPECT_EQ(callouts[1].locCode, "P1");
5206b427cc8SMatt Spinler EXPECT_EQ(callouts[1].procedure, "");
5216b427cc8SMatt Spinler EXPECT_EQ(callouts[1].symbolicFRU, "");
5226b427cc8SMatt Spinler EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
5236b427cc8SMatt Spinler EXPECT_EQ(callouts[2].priority, "low");
5246b427cc8SMatt Spinler EXPECT_EQ(callouts[2].locCode, "");
5256b427cc8SMatt Spinler EXPECT_EQ(callouts[2].procedure, "");
5266b427cc8SMatt Spinler EXPECT_EQ(callouts[2].symbolicFRU, "service_docs");
5276b427cc8SMatt Spinler EXPECT_EQ(callouts[2].symbolicFRUTrusted, "");
528f00f9d0fSMatt Spinler EXPECT_EQ(callouts[3].priority, "low");
529f00f9d0fSMatt Spinler EXPECT_EQ(callouts[3].locCode, "");
530f00f9d0fSMatt Spinler EXPECT_EQ(callouts[3].procedure, "");
531f00f9d0fSMatt Spinler EXPECT_EQ(callouts[3].symbolicFRU, "");
532f00f9d0fSMatt Spinler EXPECT_EQ(callouts[3].symbolicFRUTrusted, "air_mover");
533f00f9d0fSMatt Spinler EXPECT_EQ(callouts[3].useInventoryLocCode, true);
5346b427cc8SMatt Spinler
5356b427cc8SMatt Spinler // system2 isn't in the JSON, so it will pick the default one
53615370292SArya K Padman systemNames[0] = "system2";
53715370292SArya K Padman callouts = Registry::getCallouts(json, systemNames, ad);
5386b427cc8SMatt Spinler EXPECT_EQ(callouts.size(), 2);
5396b427cc8SMatt Spinler EXPECT_EQ(callouts[0].priority, "medium");
5406b427cc8SMatt Spinler EXPECT_EQ(callouts[0].locCode, "");
5412edce4e2SMatt Spinler EXPECT_EQ(callouts[0].procedure, "BMC0001");
5426b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRU, "");
5436b427cc8SMatt Spinler EXPECT_EQ(callouts[1].priority, "low");
5446b427cc8SMatt Spinler EXPECT_EQ(callouts[1].locCode, "P3-C8");
5456b427cc8SMatt Spinler EXPECT_EQ(callouts[1].procedure, "");
5466b427cc8SMatt Spinler EXPECT_EQ(callouts[1].symbolicFRU, "");
5476b427cc8SMatt Spinler EXPECT_EQ(callouts[1].symbolicFRUTrusted, "service_docs");
548f00f9d0fSMatt Spinler EXPECT_EQ(callouts[1].useInventoryLocCode, false);
5496b427cc8SMatt Spinler }
5506b427cc8SMatt Spinler
5516b427cc8SMatt Spinler // Empty JSON array (treated as an error)
5526b427cc8SMatt Spinler {
5536b427cc8SMatt Spinler auto json = R"([])"_json;
5546b427cc8SMatt Spinler AdditionalData ad;
55515370292SArya K Padman systemNames[0] = "system1";
55615370292SArya K Padman EXPECT_THROW(Registry::getCallouts(json, systemNames, ad),
5576b427cc8SMatt Spinler std::runtime_error);
5586b427cc8SMatt Spinler }
5596b427cc8SMatt Spinler
5606b427cc8SMatt Spinler {
5616b427cc8SMatt Spinler // Callouts without AD, that depend on system type,
5626b427cc8SMatt Spinler // where there isn't a default entry without a system type.
5636b427cc8SMatt Spinler auto json = R"(
5646b427cc8SMatt Spinler [
5656b427cc8SMatt Spinler {
5666b427cc8SMatt Spinler "System": "system1",
5676b427cc8SMatt Spinler "CalloutList":
5686b427cc8SMatt Spinler [
5696b427cc8SMatt Spinler {
5706b427cc8SMatt Spinler "Priority": "high",
5716b427cc8SMatt Spinler "LocCode": "P1-C1"
5726b427cc8SMatt Spinler },
5736b427cc8SMatt Spinler {
5746b427cc8SMatt Spinler "Priority": "low",
5756b427cc8SMatt Spinler "LocCode": "P1",
5766b427cc8SMatt Spinler "SymbolicFRU": "1234567"
5776b427cc8SMatt Spinler }
5786b427cc8SMatt Spinler ]
5796b427cc8SMatt Spinler },
5806b427cc8SMatt Spinler {
5816b427cc8SMatt Spinler "System": "system2",
5826b427cc8SMatt Spinler "CalloutList":
5836b427cc8SMatt Spinler [
5846b427cc8SMatt Spinler {
5856b427cc8SMatt Spinler "Priority": "medium",
5866b427cc8SMatt Spinler "LocCode": "P7",
5876b427cc8SMatt Spinler "CalloutType": "tool_fru"
5886b427cc8SMatt Spinler }
5896b427cc8SMatt Spinler ]
5906b427cc8SMatt Spinler
5916b427cc8SMatt Spinler }
5926b427cc8SMatt Spinler ])"_json;
5936b427cc8SMatt Spinler
5946b427cc8SMatt Spinler AdditionalData ad;
59515370292SArya K Padman systemNames[0] = "system1";
5966b427cc8SMatt Spinler
59715370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
5986b427cc8SMatt Spinler EXPECT_EQ(callouts.size(), 2);
5996b427cc8SMatt Spinler EXPECT_EQ(callouts[0].priority, "high");
6006b427cc8SMatt Spinler EXPECT_EQ(callouts[0].locCode, "P1-C1");
6016b427cc8SMatt Spinler EXPECT_EQ(callouts[0].procedure, "");
6026b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRU, "");
6036b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
6046b427cc8SMatt Spinler EXPECT_EQ(callouts[1].priority, "low");
6056b427cc8SMatt Spinler EXPECT_EQ(callouts[1].locCode, "P1");
6066b427cc8SMatt Spinler EXPECT_EQ(callouts[1].procedure, "");
6076b427cc8SMatt Spinler EXPECT_EQ(callouts[1].symbolicFRU, "1234567");
6086b427cc8SMatt Spinler EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
6096b427cc8SMatt Spinler
61015370292SArya K Padman systemNames[0] = "system2";
61115370292SArya K Padman callouts = Registry::getCallouts(json, systemNames, ad);
6126b427cc8SMatt Spinler EXPECT_EQ(callouts.size(), 1);
6136b427cc8SMatt Spinler EXPECT_EQ(callouts[0].priority, "medium");
6146b427cc8SMatt Spinler EXPECT_EQ(callouts[0].locCode, "P7");
6156b427cc8SMatt Spinler EXPECT_EQ(callouts[0].procedure, "");
6166b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRU, "");
6176b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
6186b427cc8SMatt Spinler
6196b427cc8SMatt Spinler // There is no entry for system3 or a default system,
6206b427cc8SMatt Spinler // so this should fail.
62115370292SArya K Padman systemNames[0] = "system3";
62215370292SArya K Padman EXPECT_THROW(Registry::getCallouts(json, systemNames, ad),
6236b427cc8SMatt Spinler std::runtime_error);
6246b427cc8SMatt Spinler }
6256b427cc8SMatt Spinler
6266b427cc8SMatt Spinler {
6276b427cc8SMatt Spinler // Callouts that use the AdditionalData key PROC_NUM
6286b427cc8SMatt Spinler // as an index into them, along with a system type.
6296b427cc8SMatt Spinler // It supports PROC_NUMs 0 and 1.
6306b427cc8SMatt Spinler auto json = R"(
6316b427cc8SMatt Spinler {
6326b427cc8SMatt Spinler "ADName": "PROC_NUM",
6336b427cc8SMatt Spinler "CalloutsWithTheirADValues":
6346b427cc8SMatt Spinler [
6356b427cc8SMatt Spinler {
6366b427cc8SMatt Spinler "ADValue": "0",
6376b427cc8SMatt Spinler "Callouts":
6386b427cc8SMatt Spinler [
6396b427cc8SMatt Spinler {
6406b427cc8SMatt Spinler "System": "system3",
6416b427cc8SMatt Spinler "CalloutList":
6426b427cc8SMatt Spinler [
6436b427cc8SMatt Spinler {
6446b427cc8SMatt Spinler "Priority": "high",
6456b427cc8SMatt Spinler "LocCode": "P1-C5"
6466b427cc8SMatt Spinler },
6476b427cc8SMatt Spinler {
6486b427cc8SMatt Spinler "Priority": "medium",
6496b427cc8SMatt Spinler "LocCode": "P1-C6",
6506b427cc8SMatt Spinler "SymbolicFRU": "1234567"
6516b427cc8SMatt Spinler },
6526b427cc8SMatt Spinler {
6536b427cc8SMatt Spinler "Priority": "low",
6542edce4e2SMatt Spinler "Procedure": "BMC0001",
6556b427cc8SMatt Spinler "CalloutType": "config_procedure"
6566b427cc8SMatt Spinler }
6576b427cc8SMatt Spinler ]
6586b427cc8SMatt Spinler },
6596b427cc8SMatt Spinler {
6606b427cc8SMatt Spinler "CalloutList":
6616b427cc8SMatt Spinler [
6626b427cc8SMatt Spinler {
6636b427cc8SMatt Spinler "Priority": "low",
6646b427cc8SMatt Spinler "LocCode": "P55"
6656b427cc8SMatt Spinler }
6666b427cc8SMatt Spinler ]
6676b427cc8SMatt Spinler }
6686b427cc8SMatt Spinler ]
6696b427cc8SMatt Spinler },
6706b427cc8SMatt Spinler {
6716b427cc8SMatt Spinler "ADValue": "1",
6726b427cc8SMatt Spinler "Callouts":
6736b427cc8SMatt Spinler [
6746b427cc8SMatt Spinler {
6756b427cc8SMatt Spinler "CalloutList":
6766b427cc8SMatt Spinler [
6776b427cc8SMatt Spinler {
6786b427cc8SMatt Spinler "Priority": "high",
6796b427cc8SMatt Spinler "LocCode": "P1-C6",
6806b427cc8SMatt Spinler "CalloutType": "external_fru"
6816b427cc8SMatt Spinler }
6826b427cc8SMatt Spinler ]
6836b427cc8SMatt Spinler }
6846b427cc8SMatt Spinler ]
6856b427cc8SMatt Spinler }
6866b427cc8SMatt Spinler ]
6876b427cc8SMatt Spinler })"_json;
6886b427cc8SMatt Spinler
6896b427cc8SMatt Spinler {
6906b427cc8SMatt Spinler // Find callouts for PROC_NUM 0 on system3
691*e5940634SPatrick Williams std::map<std::string, std::string> adData{{"PROC_NUM", "0"}};
6926b427cc8SMatt Spinler AdditionalData ad{adData};
69315370292SArya K Padman systemNames[0] = "system3";
6946b427cc8SMatt Spinler
69515370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
6966b427cc8SMatt Spinler EXPECT_EQ(callouts.size(), 3);
6976b427cc8SMatt Spinler EXPECT_EQ(callouts[0].priority, "high");
6986b427cc8SMatt Spinler EXPECT_EQ(callouts[0].locCode, "P1-C5");
6996b427cc8SMatt Spinler EXPECT_EQ(callouts[0].procedure, "");
7006b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRU, "");
7016b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
7026b427cc8SMatt Spinler EXPECT_EQ(callouts[1].priority, "medium");
7036b427cc8SMatt Spinler EXPECT_EQ(callouts[1].locCode, "P1-C6");
7046b427cc8SMatt Spinler EXPECT_EQ(callouts[1].procedure, "");
7056b427cc8SMatt Spinler EXPECT_EQ(callouts[1].symbolicFRU, "1234567");
7066b427cc8SMatt Spinler EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
7076b427cc8SMatt Spinler EXPECT_EQ(callouts[2].priority, "low");
7086b427cc8SMatt Spinler EXPECT_EQ(callouts[2].locCode, "");
7092edce4e2SMatt Spinler EXPECT_EQ(callouts[2].procedure, "BMC0001");
7106b427cc8SMatt Spinler EXPECT_EQ(callouts[2].symbolicFRU, "");
7116b427cc8SMatt Spinler EXPECT_EQ(callouts[2].symbolicFRUTrusted, "");
7126b427cc8SMatt Spinler
7136b427cc8SMatt Spinler // Find callouts for PROC_NUM 0 that uses the default system entry.
71415370292SArya K Padman systemNames[0] = "system99";
7156ea4d5f7SMatt Spinler
71615370292SArya K Padman callouts = Registry::getCallouts(json, systemNames, ad);
7176b427cc8SMatt Spinler EXPECT_EQ(callouts.size(), 1);
7186b427cc8SMatt Spinler EXPECT_EQ(callouts[0].priority, "low");
7196b427cc8SMatt Spinler EXPECT_EQ(callouts[0].locCode, "P55");
7206b427cc8SMatt Spinler EXPECT_EQ(callouts[0].procedure, "");
7216b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRU, "");
7226b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
7236b427cc8SMatt Spinler }
7246b427cc8SMatt Spinler {
7256b427cc8SMatt Spinler // Find callouts for PROC_NUM 1 that uses a default system entry.
726*e5940634SPatrick Williams std::map<std::string, std::string> adData{{"PROC_NUM", "1"}};
7276b427cc8SMatt Spinler AdditionalData ad{adData};
72815370292SArya K Padman systemNames[0] = "system1";
7296b427cc8SMatt Spinler
73015370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
7316b427cc8SMatt Spinler EXPECT_EQ(callouts.size(), 1);
7326b427cc8SMatt Spinler EXPECT_EQ(callouts[0].priority, "high");
7336b427cc8SMatt Spinler EXPECT_EQ(callouts[0].locCode, "P1-C6");
7346b427cc8SMatt Spinler EXPECT_EQ(callouts[0].procedure, "");
7356b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRU, "");
7366b427cc8SMatt Spinler EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
7376b427cc8SMatt Spinler }
7386b427cc8SMatt Spinler {
739f397afccSMatt Spinler // There is no entry for PROC_NUM 2, so no callouts
740*e5940634SPatrick Williams std::map<std::string, std::string> adData{{"PROC_NUM", "2"}};
7416b427cc8SMatt Spinler AdditionalData ad{adData};
7426b427cc8SMatt Spinler
74315370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
744f397afccSMatt Spinler EXPECT_TRUE(callouts.empty());
7456b427cc8SMatt Spinler }
7466b427cc8SMatt Spinler }
7473d923311SMatt Spinler
7483d923311SMatt Spinler {
7493d923311SMatt Spinler // Callouts with a 'CalloutsWhenNoADMatch' section that will
7503d923311SMatt Spinler // be used when the AdditionalData value doesn't match.
7513d923311SMatt Spinler auto json = R"(
7523d923311SMatt Spinler {
7533d923311SMatt Spinler "ADName": "PROC_NUM",
7543d923311SMatt Spinler "CalloutsWithTheirADValues":
7553d923311SMatt Spinler [
7563d923311SMatt Spinler {
7573d923311SMatt Spinler "ADValue": "0",
7583d923311SMatt Spinler "Callouts":
7593d923311SMatt Spinler [
7603d923311SMatt Spinler {
7613d923311SMatt Spinler "CalloutList":
7623d923311SMatt Spinler [
7633d923311SMatt Spinler {
7643d923311SMatt Spinler "Priority": "high",
7653d923311SMatt Spinler "LocCode": "P0-C0"
7663d923311SMatt Spinler }
7673d923311SMatt Spinler ]
7683d923311SMatt Spinler }
7693d923311SMatt Spinler ]
7703d923311SMatt Spinler }
7713d923311SMatt Spinler ],
7723d923311SMatt Spinler "CalloutsWhenNoADMatch": [
7733d923311SMatt Spinler {
7743d923311SMatt Spinler "CalloutList": [
7753d923311SMatt Spinler {
7763d923311SMatt Spinler "Priority": "medium",
7773d923311SMatt Spinler "LocCode": "P1-C1"
7783d923311SMatt Spinler }
7793d923311SMatt Spinler ]
7803d923311SMatt Spinler }
7813d923311SMatt Spinler ]
7823d923311SMatt Spinler })"_json;
7833d923311SMatt Spinler
7843d923311SMatt Spinler // There isn't an entry in the JSON for a PROC_NUM of 8
7853d923311SMatt Spinler // so it should choose the P1-C1 callout.
786*e5940634SPatrick Williams std::map<std::string, std::string> adData{{"PROC_NUM", "8"}};
7873d923311SMatt Spinler AdditionalData ad{adData};
78815370292SArya K Padman systemNames.clear();
7893d923311SMatt Spinler
79015370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
7913d923311SMatt Spinler EXPECT_EQ(callouts.size(), 1);
7923d923311SMatt Spinler EXPECT_EQ(callouts[0].priority, "medium");
7933d923311SMatt Spinler EXPECT_EQ(callouts[0].locCode, "P1-C1");
7943d923311SMatt Spinler }
7956b427cc8SMatt Spinler }
79623970b0dSMatt Spinler
TEST_F(RegistryTest,TestGetCalloutsWithSystems)79715370292SArya K Padman TEST_F(RegistryTest, TestGetCalloutsWithSystems)
79815370292SArya K Padman {
79915370292SArya K Padman std::vector<std::string> systemNames;
80015370292SArya K Padman
80115370292SArya K Padman auto json = R"(
80215370292SArya K Padman [
80315370292SArya K Padman {
80415370292SArya K Padman "Systems": ["system1", "system2"],
80515370292SArya K Padman "CalloutList":
80615370292SArya K Padman [
80715370292SArya K Padman {
80815370292SArya K Padman "Priority": "high",
80915370292SArya K Padman "LocCode": "P1-C1"
81015370292SArya K Padman },
81115370292SArya K Padman {
81215370292SArya K Padman "Priority": "low",
81315370292SArya K Padman "LocCode": "P1"
81415370292SArya K Padman },
81515370292SArya K Padman {
81615370292SArya K Padman "Priority": "low",
81715370292SArya K Padman "SymbolicFRU": "service_docs"
81815370292SArya K Padman },
81915370292SArya K Padman {
82015370292SArya K Padman "Priority": "low",
82115370292SArya K Padman "SymbolicFRUTrusted": "air_mover",
82215370292SArya K Padman "UseInventoryLocCode": true
82315370292SArya K Padman }
82415370292SArya K Padman ]
82515370292SArya K Padman },
82615370292SArya K Padman {
82715370292SArya K Padman "CalloutList":
82815370292SArya K Padman [
82915370292SArya K Padman {
83015370292SArya K Padman "Priority": "medium",
83115370292SArya K Padman "Procedure": "BMC0001"
83215370292SArya K Padman },
83315370292SArya K Padman {
83415370292SArya K Padman "Priority": "low",
83515370292SArya K Padman "LocCode": "P3-C8",
83615370292SArya K Padman "SymbolicFRUTrusted": "service_docs"
83715370292SArya K Padman }
83815370292SArya K Padman ]
83915370292SArya K Padman
84015370292SArya K Padman }
84115370292SArya K Padman ])"_json;
84215370292SArya K Padman
84315370292SArya K Padman AdditionalData ad;
84415370292SArya K Padman systemNames.push_back("system1");
84515370292SArya K Padman
84615370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
84715370292SArya K Padman EXPECT_EQ(callouts.size(), 4);
84815370292SArya K Padman EXPECT_EQ(callouts[0].priority, "high");
84915370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "P1-C1");
85015370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "");
85115370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
85215370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
85315370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
85415370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P1");
85515370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
85615370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
85715370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
85815370292SArya K Padman EXPECT_EQ(callouts[2].priority, "low");
85915370292SArya K Padman EXPECT_EQ(callouts[2].locCode, "");
86015370292SArya K Padman EXPECT_EQ(callouts[2].procedure, "");
86115370292SArya K Padman EXPECT_EQ(callouts[2].symbolicFRU, "service_docs");
86215370292SArya K Padman EXPECT_EQ(callouts[2].symbolicFRUTrusted, "");
86315370292SArya K Padman EXPECT_EQ(callouts[3].priority, "low");
86415370292SArya K Padman EXPECT_EQ(callouts[3].locCode, "");
86515370292SArya K Padman EXPECT_EQ(callouts[3].procedure, "");
86615370292SArya K Padman EXPECT_EQ(callouts[3].symbolicFRU, "");
86715370292SArya K Padman EXPECT_EQ(callouts[3].symbolicFRUTrusted, "air_mover");
86815370292SArya K Padman EXPECT_EQ(callouts[3].useInventoryLocCode, true);
86915370292SArya K Padman
87015370292SArya K Padman // System3 isn't in the JSON, so it will pick the default one
87115370292SArya K Padman systemNames[0] = "system3";
87215370292SArya K Padman
87315370292SArya K Padman callouts = Registry::getCallouts(json, systemNames, ad);
87415370292SArya K Padman EXPECT_EQ(callouts.size(), 2);
87515370292SArya K Padman EXPECT_EQ(callouts[0].priority, "medium");
87615370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "");
87715370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "BMC0001");
87815370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
87915370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
88015370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P3-C8");
88115370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
88215370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
88315370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "service_docs");
88415370292SArya K Padman EXPECT_EQ(callouts[1].useInventoryLocCode, false);
88515370292SArya K Padman }
88615370292SArya K Padman
TEST_F(RegistryTest,TestGetCalloutsWithSystemAndSystems)88715370292SArya K Padman TEST_F(RegistryTest, TestGetCalloutsWithSystemAndSystems)
88815370292SArya K Padman {
88915370292SArya K Padman std::vector<std::string> systemNames;
89015370292SArya K Padman
89115370292SArya K Padman auto json = R"(
89215370292SArya K Padman [
89315370292SArya K Padman {
89415370292SArya K Padman "Systems": ["system1", "system2"],
89515370292SArya K Padman "CalloutList":
89615370292SArya K Padman [
89715370292SArya K Padman {
89815370292SArya K Padman "Priority": "high",
89915370292SArya K Padman "LocCode": "P1-C1"
90015370292SArya K Padman },
90115370292SArya K Padman {
90215370292SArya K Padman "Priority": "low",
90315370292SArya K Padman "LocCode": "P1"
90415370292SArya K Padman }
90515370292SArya K Padman ]
90615370292SArya K Padman },
90715370292SArya K Padman {
90815370292SArya K Padman "System": "system1",
90915370292SArya K Padman "CalloutList":
91015370292SArya K Padman [
91115370292SArya K Padman {
91215370292SArya K Padman "Priority": "low",
91315370292SArya K Padman "SymbolicFRU": "service_docs"
91415370292SArya K Padman },
91515370292SArya K Padman {
91615370292SArya K Padman "Priority": "low",
91715370292SArya K Padman "SymbolicFRUTrusted": "air_mover",
91815370292SArya K Padman "UseInventoryLocCode": true
91915370292SArya K Padman }
92015370292SArya K Padman ]
92115370292SArya K Padman },
92215370292SArya K Padman {
92315370292SArya K Padman "CalloutList":
92415370292SArya K Padman [
92515370292SArya K Padman {
92615370292SArya K Padman "Priority": "medium",
92715370292SArya K Padman "Procedure": "BMC0001"
92815370292SArya K Padman },
92915370292SArya K Padman {
93015370292SArya K Padman "Priority": "low",
93115370292SArya K Padman "LocCode": "P3-C8",
93215370292SArya K Padman "SymbolicFRUTrusted": "service_docs"
93315370292SArya K Padman }
93415370292SArya K Padman ]
93515370292SArya K Padman }
93615370292SArya K Padman ])"_json;
93715370292SArya K Padman
93815370292SArya K Padman AdditionalData ad;
93915370292SArya K Padman systemNames.push_back("system1");
94015370292SArya K Padman
94115370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
94215370292SArya K Padman EXPECT_EQ(callouts.size(), 4);
94315370292SArya K Padman EXPECT_EQ(callouts[0].priority, "high");
94415370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "P1-C1");
94515370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "");
94615370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
94715370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
94815370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
94915370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P1");
95015370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
95115370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
95215370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
95315370292SArya K Padman EXPECT_EQ(callouts[2].priority, "low");
95415370292SArya K Padman EXPECT_EQ(callouts[2].locCode, "");
95515370292SArya K Padman EXPECT_EQ(callouts[2].procedure, "");
95615370292SArya K Padman EXPECT_EQ(callouts[2].symbolicFRU, "service_docs");
95715370292SArya K Padman EXPECT_EQ(callouts[2].symbolicFRUTrusted, "");
95815370292SArya K Padman EXPECT_EQ(callouts[3].priority, "low");
95915370292SArya K Padman EXPECT_EQ(callouts[3].locCode, "");
96015370292SArya K Padman EXPECT_EQ(callouts[3].procedure, "");
96115370292SArya K Padman EXPECT_EQ(callouts[3].symbolicFRU, "");
96215370292SArya K Padman EXPECT_EQ(callouts[3].symbolicFRUTrusted, "air_mover");
96315370292SArya K Padman EXPECT_EQ(callouts[3].useInventoryLocCode, true);
96415370292SArya K Padman
96515370292SArya K Padman // if system name is "System2"
96615370292SArya K Padman systemNames[0] = "system2";
96715370292SArya K Padman
96815370292SArya K Padman callouts = Registry::getCallouts(json, systemNames, ad);
96915370292SArya K Padman EXPECT_EQ(callouts.size(), 2);
97015370292SArya K Padman EXPECT_EQ(callouts[0].priority, "high");
97115370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "P1-C1");
97215370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "");
97315370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
97415370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
97515370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
97615370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P1");
97715370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
97815370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
97915370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
98015370292SArya K Padman
98115370292SArya K Padman // system name is System3 which is not in json thereby will take default
98215370292SArya K Padman systemNames[0] = "system3";
98315370292SArya K Padman
98415370292SArya K Padman callouts = Registry::getCallouts(json, systemNames, ad);
98515370292SArya K Padman EXPECT_EQ(callouts.size(), 2);
98615370292SArya K Padman EXPECT_EQ(callouts[0].priority, "medium");
98715370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "");
98815370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "BMC0001");
98915370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
99015370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
99115370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P3-C8");
99215370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
99315370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
99415370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "service_docs");
99515370292SArya K Padman EXPECT_EQ(callouts[1].useInventoryLocCode, false);
99615370292SArya K Padman }
99715370292SArya K Padman
TEST_F(RegistryTest,TestGetCalloutsWithOnlySystemAndSystems)99815370292SArya K Padman TEST_F(RegistryTest, TestGetCalloutsWithOnlySystemAndSystems)
99915370292SArya K Padman {
100015370292SArya K Padman std::vector<std::string> systemNames;
100115370292SArya K Padman
100215370292SArya K Padman auto json = R"(
100315370292SArya K Padman [
100415370292SArya K Padman {
100515370292SArya K Padman "Systems": ["system1", "system2"],
100615370292SArya K Padman "CalloutList":
100715370292SArya K Padman [
100815370292SArya K Padman {
100915370292SArya K Padman "Priority": "high",
101015370292SArya K Padman "LocCode": "P1-C1"
101115370292SArya K Padman },
101215370292SArya K Padman {
101315370292SArya K Padman "Priority": "low",
101415370292SArya K Padman "LocCode": "P1"
101515370292SArya K Padman }
101615370292SArya K Padman ]
101715370292SArya K Padman },
101815370292SArya K Padman {
101915370292SArya K Padman "System": "system1",
102015370292SArya K Padman "CalloutList":
102115370292SArya K Padman [
102215370292SArya K Padman {
102315370292SArya K Padman "Priority": "low",
102415370292SArya K Padman "SymbolicFRU": "service_docs"
102515370292SArya K Padman },
102615370292SArya K Padman {
102715370292SArya K Padman "Priority": "low",
102815370292SArya K Padman "SymbolicFRUTrusted": "air_mover",
102915370292SArya K Padman "UseInventoryLocCode": true
103015370292SArya K Padman }
103115370292SArya K Padman ]
103215370292SArya K Padman }
103315370292SArya K Padman ])"_json;
103415370292SArya K Padman
103515370292SArya K Padman AdditionalData ad;
103615370292SArya K Padman systemNames.push_back("system1");
103715370292SArya K Padman
103815370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
103915370292SArya K Padman EXPECT_EQ(callouts.size(), 4);
104015370292SArya K Padman EXPECT_EQ(callouts[0].priority, "high");
104115370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "P1-C1");
104215370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "");
104315370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
104415370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
104515370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
104615370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P1");
104715370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
104815370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
104915370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
105015370292SArya K Padman EXPECT_EQ(callouts[2].priority, "low");
105115370292SArya K Padman EXPECT_EQ(callouts[2].locCode, "");
105215370292SArya K Padman EXPECT_EQ(callouts[2].procedure, "");
105315370292SArya K Padman EXPECT_EQ(callouts[2].symbolicFRU, "service_docs");
105415370292SArya K Padman EXPECT_EQ(callouts[2].symbolicFRUTrusted, "");
105515370292SArya K Padman EXPECT_EQ(callouts[3].priority, "low");
105615370292SArya K Padman EXPECT_EQ(callouts[3].locCode, "");
105715370292SArya K Padman EXPECT_EQ(callouts[3].procedure, "");
105815370292SArya K Padman EXPECT_EQ(callouts[3].symbolicFRU, "");
105915370292SArya K Padman EXPECT_EQ(callouts[3].symbolicFRUTrusted, "air_mover");
106015370292SArya K Padman EXPECT_EQ(callouts[3].useInventoryLocCode, true);
106115370292SArya K Padman
106215370292SArya K Padman // if system name is "System2"
106315370292SArya K Padman systemNames[0] = "system2";
106415370292SArya K Padman
106515370292SArya K Padman callouts = Registry::getCallouts(json, systemNames, ad);
106615370292SArya K Padman EXPECT_EQ(callouts.size(), 2);
106715370292SArya K Padman EXPECT_EQ(callouts[0].priority, "high");
106815370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "P1-C1");
106915370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "");
107015370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
107115370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
107215370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
107315370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P1");
107415370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
107515370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
107615370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
107715370292SArya K Padman
107815370292SArya K Padman // There is no entry for system3 or a default system,
107915370292SArya K Padman // so this should fail.
108015370292SArya K Padman systemNames[0] = "system3";
108115370292SArya K Padman EXPECT_THROW(Registry::getCallouts(json, systemNames, ad),
108215370292SArya K Padman std::runtime_error);
108315370292SArya K Padman }
108415370292SArya K Padman
TEST_F(RegistryTest,TestGetCalloutsWithOnlySystems)108515370292SArya K Padman TEST_F(RegistryTest, TestGetCalloutsWithOnlySystems)
108615370292SArya K Padman {
108715370292SArya K Padman std::vector<std::string> systemNames;
108815370292SArya K Padman
108915370292SArya K Padman auto json = R"(
109015370292SArya K Padman [
109115370292SArya K Padman {
109215370292SArya K Padman "Systems": ["system1", "system2"],
109315370292SArya K Padman "CalloutList":
109415370292SArya K Padman [
109515370292SArya K Padman {
109615370292SArya K Padman "Priority": "high",
109715370292SArya K Padman "LocCode": "P1-C1"
109815370292SArya K Padman },
109915370292SArya K Padman {
110015370292SArya K Padman "Priority": "low",
110115370292SArya K Padman "LocCode": "P1"
110215370292SArya K Padman }
110315370292SArya K Padman ]
110415370292SArya K Padman }
110515370292SArya K Padman ])"_json;
110615370292SArya K Padman
110715370292SArya K Padman AdditionalData ad;
110815370292SArya K Padman systemNames.push_back("system1");
110915370292SArya K Padman
111015370292SArya K Padman // system1 is available in JSON array
111115370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
111215370292SArya K Padman EXPECT_EQ(callouts.size(), 2);
111315370292SArya K Padman EXPECT_EQ(callouts[0].priority, "high");
111415370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "P1-C1");
111515370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "");
111615370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
111715370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
111815370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
111915370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P1");
112015370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
112115370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
112215370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
112315370292SArya K Padman
112415370292SArya K Padman // There is no entry for system3 or a default system,
112515370292SArya K Padman // so this should fail.
112615370292SArya K Padman systemNames[0] = "system3";
112715370292SArya K Padman EXPECT_THROW(Registry::getCallouts(json, systemNames, ad),
112815370292SArya K Padman std::runtime_error);
112915370292SArya K Padman }
113015370292SArya K Padman
TEST_F(RegistryTest,TestGetCalloutsWithOnlyDefaults)113115370292SArya K Padman TEST_F(RegistryTest, TestGetCalloutsWithOnlyDefaults)
113215370292SArya K Padman {
113315370292SArya K Padman std::vector<std::string> systemNames;
113415370292SArya K Padman
113515370292SArya K Padman auto json = R"(
113615370292SArya K Padman [
113715370292SArya K Padman {
113815370292SArya K Padman "CalloutList":
113915370292SArya K Padman [
114015370292SArya K Padman {
114115370292SArya K Padman "Priority": "high",
114215370292SArya K Padman "LocCode": "P1-C1"
114315370292SArya K Padman },
114415370292SArya K Padman {
114515370292SArya K Padman "Priority": "low",
114615370292SArya K Padman "LocCode": "P1"
114715370292SArya K Padman }
114815370292SArya K Padman ]
114915370292SArya K Padman }
115015370292SArya K Padman ])"_json;
115115370292SArya K Padman
115215370292SArya K Padman AdditionalData ad;
115315370292SArya K Padman systemNames.push_back("system1");
115415370292SArya K Padman
115515370292SArya K Padman // Since neither System or Systems available, it will pick the default one
115615370292SArya K Padman // only
115715370292SArya K Padman auto callouts = Registry::getCallouts(json, systemNames, ad);
115815370292SArya K Padman EXPECT_EQ(callouts.size(), 2);
115915370292SArya K Padman EXPECT_EQ(callouts[0].priority, "high");
116015370292SArya K Padman EXPECT_EQ(callouts[0].locCode, "P1-C1");
116115370292SArya K Padman EXPECT_EQ(callouts[0].procedure, "");
116215370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRU, "");
116315370292SArya K Padman EXPECT_EQ(callouts[0].symbolicFRUTrusted, "");
116415370292SArya K Padman EXPECT_EQ(callouts[1].priority, "low");
116515370292SArya K Padman EXPECT_EQ(callouts[1].locCode, "P1");
116615370292SArya K Padman EXPECT_EQ(callouts[1].procedure, "");
116715370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRU, "");
116815370292SArya K Padman EXPECT_EQ(callouts[1].symbolicFRUTrusted, "");
116915370292SArya K Padman }
117015370292SArya K Padman
TEST_F(RegistryTest,TestNoSubsystem)117123970b0dSMatt Spinler TEST_F(RegistryTest, TestNoSubsystem)
117223970b0dSMatt Spinler {
117323970b0dSMatt Spinler auto path = RegistryTest::writeData(registryData);
117423970b0dSMatt Spinler Registry registry{path};
117523970b0dSMatt Spinler
117623970b0dSMatt Spinler auto entry = registry.lookup("xyz.openbmc_project.Common.Error.Timeout",
117723970b0dSMatt Spinler LookupType::name);
117823970b0dSMatt Spinler ASSERT_TRUE(entry);
117923970b0dSMatt Spinler EXPECT_FALSE(entry->subsystem);
118023970b0dSMatt Spinler }
1181711f1129SMatt Spinler
TEST_F(RegistryTest,TestJournalSectionCapture)1182711f1129SMatt Spinler TEST_F(RegistryTest, TestJournalSectionCapture)
1183711f1129SMatt Spinler {
1184711f1129SMatt Spinler auto path = RegistryTest::writeData(registryData);
1185711f1129SMatt Spinler Registry registry{path};
1186711f1129SMatt Spinler
1187711f1129SMatt Spinler auto entry = registry.lookup("xyz.openbmc_project.Journal.Capture",
1188711f1129SMatt Spinler LookupType::name);
1189711f1129SMatt Spinler ASSERT_TRUE(entry);
1190711f1129SMatt Spinler
1191711f1129SMatt Spinler const auto& jc = entry->journalCapture;
1192711f1129SMatt Spinler ASSERT_TRUE(jc);
1193711f1129SMatt Spinler ASSERT_TRUE(std::holds_alternative<AppCaptureList>(*jc));
1194711f1129SMatt Spinler const auto& acl = std::get<AppCaptureList>(*jc);
1195711f1129SMatt Spinler
1196711f1129SMatt Spinler ASSERT_EQ(acl.size(), 2);
1197711f1129SMatt Spinler
1198711f1129SMatt Spinler EXPECT_EQ(acl[0].syslogID, "test1");
1199711f1129SMatt Spinler EXPECT_EQ(acl[0].numLines, 5);
1200711f1129SMatt Spinler
1201711f1129SMatt Spinler EXPECT_EQ(acl[1].syslogID, "test2");
1202711f1129SMatt Spinler EXPECT_EQ(acl[1].numLines, 6);
1203711f1129SMatt Spinler }
1204