1 #include "config-validator.hpp"
2 #include "grouplayout.hpp"
3 #include "ledlayout.hpp"
4
5 #include <gtest/gtest.h>
6
7 using namespace phosphor::led;
8
assertValidationException(const GroupMap & ledMap,error::ConfigValidationError err)9 static void assertValidationException(const GroupMap& ledMap,
10 error::ConfigValidationError err)
11 {
12 try
13 {
14 validateConfigV1(ledMap);
15 ASSERT_FALSE(true);
16 }
17 catch (ConfigValidationException& e)
18 {
19 ASSERT_EQ(e.reason, err);
20 }
21 }
22
TEST(validateConfig,testGoodPathLedPriority)23 TEST(validateConfig, testGoodPathLedPriority)
24 {
25 ActionSet group1ActionSet = {
26 {"led1", Layout::Action::On, 0, 0, Layout::Action::On},
27 {"led2", Layout::Action::On, 0, 0, Layout::Action::Blink},
28 };
29 Layout::GroupLayout group1 = {0, group1ActionSet};
30 GroupMap ledMap = {{"group1", group1}};
31
32 validateConfigV1(ledMap);
33 }
34
TEST(validateConfig,testGoodPathGroupPriority)35 TEST(validateConfig, testGoodPathGroupPriority)
36 {
37 ActionSet group1ActionSet = {
38 {"led1", Layout::Action::On, 0, 0, std::nullopt},
39 {"led2", Layout::Action::On, 0, 0, std::nullopt},
40 };
41 ActionSet group2ActionSet = {
42 {"led1", Layout::Action::On, 0, 0, std::nullopt},
43 {"led2", Layout::Action::On, 0, 0, std::nullopt},
44 };
45 Layout::GroupLayout group1 = {1, group1ActionSet};
46 Layout::GroupLayout group2 = {2, group1ActionSet};
47 GroupMap ledMap = {
48 {"group1", group1},
49 {"group2", group2},
50 };
51
52 validateConfigV1(ledMap);
53 }
54
TEST(validateConfig,testLedPriorityMismatch)55 TEST(validateConfig, testLedPriorityMismatch)
56 {
57 ActionSet group1ActionSet = {
58 {"led1", Layout::Action::On, 0, 0, Layout::Action::On},
59 };
60 ActionSet group2ActionSet = {
61 {"led1", Layout::Action::On, 0, 0, Layout::Action::Off},
62 };
63 Layout::GroupLayout group1 = {0, group1ActionSet};
64 Layout::GroupLayout group2 = {0, group2ActionSet};
65 GroupMap ledMap = {
66 {"group1", group1},
67 {"group2", group2},
68 };
69
70 assertValidationException(ledMap, error::LedPriorityMismatch);
71 }
72
TEST(validateConfig,testMissingLedPriority)73 TEST(validateConfig, testMissingLedPriority)
74 {
75 ActionSet group1ActionSet = {
76 {"led1", Layout::Action::On, 0, 0, Layout::Action::On},
77 };
78 ActionSet group2ActionSet = {
79 {"led1", Layout::Action::On, 0, 0, std::nullopt},
80 };
81 Layout::GroupLayout group1 = {0, group1ActionSet};
82 Layout::GroupLayout group2 = {0, group2ActionSet};
83 GroupMap ledMap = {
84 {"group1", group1},
85 {"group2", group2},
86 };
87
88 assertValidationException(ledMap, error::MissingLedPriority);
89 }
90
TEST(validateConfig,testMixedLedAndGroupPriority)91 TEST(validateConfig, testMixedLedAndGroupPriority)
92 {
93 ActionSet group1ActionSet = {
94 {"led1", Layout::Action::On, 0, 0, Layout::Action::On},
95 };
96 ActionSet group2ActionSet = {
97 {"led1", Layout::Action::On, 0, 0, Layout::Action::On},
98 };
99 Layout::GroupLayout group1 = {0, group1ActionSet};
100 Layout::GroupLayout group2 = {1, group2ActionSet};
101 GroupMap ledMap = {
102 {"group1", group1},
103 {"group2", group2},
104 };
105
106 assertValidationException(ledMap, error::MixedLedAndGroupPriority);
107 }
108
TEST(validateConfig,testInvalidGroupPriority)109 TEST(validateConfig, testInvalidGroupPriority)
110 {
111 ActionSet group1ActionSet = {
112 {"led1", Layout::Action::On, 0, 0, std::nullopt},
113 };
114 ActionSet group2ActionSet = {
115 {"led1", Layout::Action::On, 0, 0, std::nullopt},
116 };
117 Layout::GroupLayout group1 = {0, group1ActionSet};
118 Layout::GroupLayout group2 = {1, group2ActionSet};
119 GroupMap ledMap = {
120 {"group1", group1},
121 {"group2", group2},
122 };
123
124 assertValidationException(ledMap, error::InvalidGroupPriority);
125 }
126
TEST(validateConfig,testDuplicateGroupPriority)127 TEST(validateConfig, testDuplicateGroupPriority)
128 {
129 ActionSet group1ActionSet = {
130 {"led1", Layout::Action::On, 0, 0, std::nullopt},
131 };
132 ActionSet group2ActionSet = {
133 {"led1", Layout::Action::On, 0, 0, std::nullopt},
134 };
135 Layout::GroupLayout group1 = {1, group1ActionSet};
136 Layout::GroupLayout group2 = {1, group2ActionSet};
137 GroupMap ledMap = {
138 {"group1", group1},
139 {"group2", group2},
140 };
141
142 assertValidationException(ledMap, error::DuplicateGroupPriority);
143 }
144