1616a0716SGeorge Liu #include "json-parser.hpp"
2def5f5a2SGeorge Liu 
3def5f5a2SGeorge Liu #include <gtest/gtest.h>
4def5f5a2SGeorge Liu 
TEST(loadJsonConfig,testGoodPath)5def5f5a2SGeorge Liu TEST(loadJsonConfig, testGoodPath)
6def5f5a2SGeorge Liu {
7def5f5a2SGeorge Liu     static constexpr auto jsonPath = "config/led-group-config.json";
8*158b2c14SPatrick Williams     auto ledMap = loadJsonConfig(jsonPath);
9def5f5a2SGeorge Liu 
10def5f5a2SGeorge Liu     std::string objPath = "/xyz/openbmc_project/led/groups";
11def5f5a2SGeorge Liu     std::string bmcBooted = objPath + "/bmc_booted";
12def5f5a2SGeorge Liu     std::string powerOn = objPath + "/power_on";
13def5f5a2SGeorge Liu     std::string enclosureIdentify = objPath + "/enclosure_identify";
14def5f5a2SGeorge Liu 
157f53a037SGeorge Liu     ASSERT_EQ(ledMap.contains(bmcBooted), true);
167f53a037SGeorge Liu     ASSERT_EQ(ledMap.contains(powerOn), true);
177f53a037SGeorge Liu     ASSERT_EQ(ledMap.contains(enclosureIdentify), true);
18def5f5a2SGeorge Liu 
19*158b2c14SPatrick Williams     auto& bmcBootedActions = ledMap.at(bmcBooted);
20*158b2c14SPatrick Williams     auto& powerOnActions = ledMap.at(powerOn);
21*158b2c14SPatrick Williams     auto& enclosureIdentifyActions = ledMap.at(enclosureIdentify);
22def5f5a2SGeorge Liu 
23def5f5a2SGeorge Liu     for (const auto& group : bmcBootedActions)
24def5f5a2SGeorge Liu     {
25def5f5a2SGeorge Liu         ASSERT_EQ(group.name, "heartbeat");
26ed80e885SPatrick Williams         ASSERT_EQ(group.action, phosphor::led::Layout::Action::On);
27def5f5a2SGeorge Liu         ASSERT_EQ(group.dutyOn, 50);
28def5f5a2SGeorge Liu         ASSERT_EQ(group.period, 0);
29ed80e885SPatrick Williams         ASSERT_EQ(group.priority, phosphor::led::Layout::Action::Blink);
30def5f5a2SGeorge Liu     }
31def5f5a2SGeorge Liu 
32def5f5a2SGeorge Liu     for (const auto& group : powerOnActions)
33def5f5a2SGeorge Liu     {
34def5f5a2SGeorge Liu         ASSERT_EQ(group.name, "power");
35ed80e885SPatrick Williams         ASSERT_EQ(group.action, phosphor::led::Layout::Action::On);
36def5f5a2SGeorge Liu         ASSERT_EQ(group.dutyOn, 50);
37def5f5a2SGeorge Liu         ASSERT_EQ(group.period, 0);
38ed80e885SPatrick Williams         ASSERT_EQ(group.priority, phosphor::led::Layout::Action::On);
39def5f5a2SGeorge Liu     }
40def5f5a2SGeorge Liu 
41def5f5a2SGeorge Liu     for (const auto& group : enclosureIdentifyActions)
42def5f5a2SGeorge Liu     {
43def5f5a2SGeorge Liu         if (group.name == "front_id")
44def5f5a2SGeorge Liu         {
45ed80e885SPatrick Williams             ASSERT_EQ(group.action, phosphor::led::Layout::Action::Blink);
46def5f5a2SGeorge Liu             ASSERT_EQ(group.dutyOn, 50);
47def5f5a2SGeorge Liu             ASSERT_EQ(group.period, 1000);
48ed80e885SPatrick Williams             ASSERT_EQ(group.priority, phosphor::led::Layout::Action::Blink);
49def5f5a2SGeorge Liu         }
50def5f5a2SGeorge Liu         else if (group.name == "rear_id")
51def5f5a2SGeorge Liu         {
52ed80e885SPatrick Williams             ASSERT_EQ(group.action, phosphor::led::Layout::Action::Blink);
53def5f5a2SGeorge Liu             ASSERT_EQ(group.dutyOn, 50);
54def5f5a2SGeorge Liu             ASSERT_EQ(group.period, 1000);
55ed80e885SPatrick Williams             ASSERT_EQ(group.priority, phosphor::led::Layout::Action::Blink);
56def5f5a2SGeorge Liu         }
57def5f5a2SGeorge Liu         else
58def5f5a2SGeorge Liu         {
59def5f5a2SGeorge Liu             ASSERT_TRUE(false);
60def5f5a2SGeorge Liu         }
61def5f5a2SGeorge Liu     }
62def5f5a2SGeorge Liu }
63def5f5a2SGeorge Liu 
TEST(loadJsonConfig,testBadPath)64def5f5a2SGeorge Liu TEST(loadJsonConfig, testBadPath)
65def5f5a2SGeorge Liu {
66def5f5a2SGeorge Liu     static constexpr auto jsonPath = "config/led-group-config-malformed.json";
67def5f5a2SGeorge Liu     ASSERT_THROW(loadJsonConfig(jsonPath), std::exception);
68def5f5a2SGeorge Liu }
6917fcb4d9SGeorge Liu 
TEST(validatePriority,testGoodPriority)7017fcb4d9SGeorge Liu TEST(validatePriority, testGoodPriority)
7117fcb4d9SGeorge Liu {
7217fcb4d9SGeorge Liu     PriorityMap priorityMap{};
73ed80e885SPatrick Williams     validatePriority("heartbeat", phosphor::led::Layout::Action::Blink,
74ed80e885SPatrick Williams                      priorityMap);
75ed80e885SPatrick Williams     validatePriority("power", phosphor::led::Layout::Action::On, priorityMap);
7617fcb4d9SGeorge Liu 
77ed80e885SPatrick Williams     ASSERT_EQ(priorityMap.at("heartbeat"),
78ed80e885SPatrick Williams               phosphor::led::Layout::Action::Blink);
79ed80e885SPatrick Williams     ASSERT_EQ(priorityMap.at("power"), phosphor::led::Layout::Action::On);
8017fcb4d9SGeorge Liu }
8117fcb4d9SGeorge Liu 
TEST(validatePriority,testBadPriority)8217fcb4d9SGeorge Liu TEST(validatePriority, testBadPriority)
8317fcb4d9SGeorge Liu {
8417fcb4d9SGeorge Liu     PriorityMap priorityMap{};
85ed80e885SPatrick Williams     validatePriority("heartbeat", phosphor::led::Layout::Action::Blink,
86ed80e885SPatrick Williams                      priorityMap);
8717fcb4d9SGeorge Liu 
88ed80e885SPatrick Williams     ASSERT_EQ(priorityMap.at("heartbeat"),
89ed80e885SPatrick Williams               phosphor::led::Layout::Action::Blink);
90ed80e885SPatrick Williams     ASSERT_THROW(validatePriority("heartbeat",
91ed80e885SPatrick Williams                                   phosphor::led::Layout::Action::On,
92ed80e885SPatrick Williams                                   priorityMap),
9317fcb4d9SGeorge Liu                  std::runtime_error);
9417fcb4d9SGeorge Liu }
95