1*616a0716SGeorge Liu #include "json-parser.hpp"
2def5f5a2SGeorge Liu 
3def5f5a2SGeorge Liu #include <gtest/gtest.h>
4def5f5a2SGeorge Liu 
5def5f5a2SGeorge Liu TEST(loadJsonConfig, testGoodPath)
6def5f5a2SGeorge Liu {
7def5f5a2SGeorge Liu     static constexpr auto jsonPath = "config/led-group-config.json";
8def5f5a2SGeorge Liu     LedMap 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 
15def5f5a2SGeorge Liu     ASSERT_NE(ledMap.find(bmcBooted), ledMap.end());
16def5f5a2SGeorge Liu     ASSERT_NE(ledMap.find(powerOn), ledMap.end());
17def5f5a2SGeorge Liu     ASSERT_NE(ledMap.find(enclosureIdentify), ledMap.end());
18def5f5a2SGeorge Liu 
19def5f5a2SGeorge Liu     LedAction bmcBootedActions = ledMap.at(bmcBooted);
20def5f5a2SGeorge Liu     LedAction powerOnActions = ledMap.at(powerOn);
21def5f5a2SGeorge Liu     LedAction enclosureIdentifyActions = ledMap.at(enclosureIdentify);
22def5f5a2SGeorge Liu 
23def5f5a2SGeorge Liu     for (const auto& group : bmcBootedActions)
24def5f5a2SGeorge Liu     {
25def5f5a2SGeorge Liu         ASSERT_EQ(group.name, "heartbeat");
26def5f5a2SGeorge Liu         ASSERT_EQ(group.action, phosphor::led::Layout::On);
27def5f5a2SGeorge Liu         ASSERT_EQ(group.dutyOn, 50);
28def5f5a2SGeorge Liu         ASSERT_EQ(group.period, 0);
29def5f5a2SGeorge Liu         ASSERT_EQ(group.priority, phosphor::led::Layout::Blink);
30def5f5a2SGeorge Liu     }
31def5f5a2SGeorge Liu 
32def5f5a2SGeorge Liu     for (const auto& group : powerOnActions)
33def5f5a2SGeorge Liu     {
34def5f5a2SGeorge Liu         ASSERT_EQ(group.name, "power");
35def5f5a2SGeorge Liu         ASSERT_EQ(group.action, phosphor::led::Layout::On);
36def5f5a2SGeorge Liu         ASSERT_EQ(group.dutyOn, 50);
37def5f5a2SGeorge Liu         ASSERT_EQ(group.period, 0);
38def5f5a2SGeorge Liu         ASSERT_EQ(group.priority, phosphor::led::Layout::On);
39def5f5a2SGeorge Liu     }
40def5f5a2SGeorge Liu 
41def5f5a2SGeorge Liu     for (const auto& group : enclosureIdentifyActions)
42def5f5a2SGeorge Liu     {
43def5f5a2SGeorge Liu         if (group.name == "front_id")
44def5f5a2SGeorge Liu         {
45def5f5a2SGeorge Liu             ASSERT_EQ(group.action, phosphor::led::Layout::Blink);
46def5f5a2SGeorge Liu             ASSERT_EQ(group.dutyOn, 50);
47def5f5a2SGeorge Liu             ASSERT_EQ(group.period, 1000);
48def5f5a2SGeorge Liu             ASSERT_EQ(group.priority, phosphor::led::Layout::Blink);
49def5f5a2SGeorge Liu         }
50def5f5a2SGeorge Liu         else if (group.name == "rear_id")
51def5f5a2SGeorge Liu         {
52def5f5a2SGeorge Liu             ASSERT_EQ(group.action, phosphor::led::Layout::Blink);
53def5f5a2SGeorge Liu             ASSERT_EQ(group.dutyOn, 50);
54def5f5a2SGeorge Liu             ASSERT_EQ(group.period, 1000);
55def5f5a2SGeorge Liu             ASSERT_EQ(group.priority, phosphor::led::Layout::Blink);
56def5f5a2SGeorge Liu         }
57def5f5a2SGeorge Liu         else
58def5f5a2SGeorge Liu         {
59def5f5a2SGeorge Liu             ASSERT_TRUE(false);
60def5f5a2SGeorge Liu         }
61def5f5a2SGeorge Liu     }
62def5f5a2SGeorge Liu }
63def5f5a2SGeorge Liu 
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 
7017fcb4d9SGeorge Liu TEST(validatePriority, testGoodPriority)
7117fcb4d9SGeorge Liu {
7217fcb4d9SGeorge Liu     PriorityMap priorityMap{};
7317fcb4d9SGeorge Liu     validatePriority("heartbeat", phosphor::led::Layout::Blink, priorityMap);
7417fcb4d9SGeorge Liu     validatePriority("power", phosphor::led::Layout::On, priorityMap);
7517fcb4d9SGeorge Liu 
7617fcb4d9SGeorge Liu     ASSERT_EQ(priorityMap.at("heartbeat"), phosphor::led::Layout::Blink);
7717fcb4d9SGeorge Liu     ASSERT_EQ(priorityMap.at("power"), phosphor::led::Layout::On);
7817fcb4d9SGeorge Liu }
7917fcb4d9SGeorge Liu 
8017fcb4d9SGeorge Liu TEST(validatePriority, testBadPriority)
8117fcb4d9SGeorge Liu {
8217fcb4d9SGeorge Liu     PriorityMap priorityMap{};
8317fcb4d9SGeorge Liu     validatePriority("heartbeat", phosphor::led::Layout::Blink, priorityMap);
8417fcb4d9SGeorge Liu 
8517fcb4d9SGeorge Liu     ASSERT_EQ(priorityMap.at("heartbeat"), phosphor::led::Layout::Blink);
8617fcb4d9SGeorge Liu     ASSERT_THROW(
8717fcb4d9SGeorge Liu         validatePriority("heartbeat", phosphor::led::Layout::On, priorityMap),
8817fcb4d9SGeorge Liu         std::runtime_error);
8917fcb4d9SGeorge Liu }