1 #include "led-test-map.hpp"
2 #include "manager.hpp"
3
4 #include <sdbusplus/bus.hpp>
5
6 #include <algorithm>
7 #include <set>
8
9 #include <gtest/gtest.h>
10 using namespace phosphor::led;
11 class LedTest : public ::testing::Test
12 {
13 public:
14 sdbusplus::bus_t bus;
LedTest()15 LedTest() : bus(sdbusplus::bus::new_default())
16 {
17 // Nothing here
18 }
~LedTest()19 ~LedTest()
20 {
21 // Leaving up to auto cleanup.
22 }
23 };
24
25 /** @brief Assert Single LED to On */
TEST_F(LedTest,assertSingleLedOn)26 TEST_F(LedTest, assertSingleLedOn)
27 {
28 Manager manager(bus, singleLedOn);
29 {
30 // Assert the LEDs.
31 ActionSet ledsAssert{};
32 ActionSet ledsDeAssert{};
33
34 auto group = "/xyz/openbmc_project/ledmanager/groups/SingleLed";
35 auto result = manager.setGroupState(group, true, ledsAssert,
36 ledsDeAssert);
37 EXPECT_EQ(true, result);
38
39 // Need just the ledsAssserted populated with these.
40 ActionSet refAssert = {
41 {"One", phosphor::led::Layout::Action::On, 0, 0,
42 phosphor::led::Layout::Action::Blink},
43 };
44 EXPECT_EQ(refAssert.size(), ledsAssert.size());
45 EXPECT_EQ(0, ledsDeAssert.size());
46
47 // difference of refAssert and ledsAssert must be null.
48 ActionSet temp{};
49 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
50 refAssert.begin(), refAssert.end(),
51 std::inserter(temp, temp.begin()));
52 EXPECT_EQ(0, temp.size());
53 }
54 }
55
56 /** @brief Assert Single LED to Blink */
TEST_F(LedTest,assertSingleLedBlink)57 TEST_F(LedTest, assertSingleLedBlink)
58 {
59 Manager manager(bus, singleLedBlink);
60 {
61 // Assert the LEDs.
62 ActionSet ledsAssert{};
63 ActionSet ledsDeAssert{};
64
65 auto group = "/xyz/openbmc_project/ledmanager/groups/SingleLed";
66 auto result = manager.setGroupState(group, true, ledsAssert,
67 ledsDeAssert);
68 EXPECT_EQ(true, result);
69
70 // Need just the ledsAssserted populated with these.
71 ActionSet refAssert = {
72 {"One", phosphor::led::Layout::Action::Blink, 0, 0,
73 phosphor::led::Layout::Action::Blink},
74 };
75 EXPECT_EQ(refAssert.size(), ledsAssert.size());
76 EXPECT_EQ(0, ledsDeAssert.size());
77
78 // difference of refAssert and ledsAssert must be null.
79 ActionSet temp{};
80 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
81 refAssert.begin(), refAssert.end(),
82 std::inserter(temp, temp.begin()));
83 EXPECT_EQ(0, temp.size());
84 }
85 }
86
87 /** @brief Assert Single LED to On and Try Assert Again */
TEST_F(LedTest,assertSingleLedOnAndreAssert)88 TEST_F(LedTest, assertSingleLedOnAndreAssert)
89 {
90 Manager manager(bus, singleLedOn);
91 {
92 // Assert the LEDs.
93 ActionSet ledsAssert{};
94 ActionSet ledsDeAssert{};
95
96 auto group = "/xyz/openbmc_project/ledmanager/groups/SingleLed";
97 auto result = manager.setGroupState(group, true, ledsAssert,
98 ledsDeAssert);
99 EXPECT_EQ(true, result);
100
101 // Need just the ledsAssserted populated with these.
102 ActionSet refAssert = {
103 {"One", phosphor::led::Layout::Action::On, 0, 0,
104 phosphor::led::Layout::Action::Blink},
105 };
106 EXPECT_EQ(refAssert.size(), ledsAssert.size());
107 EXPECT_EQ(0, ledsDeAssert.size());
108
109 // difference of refAssert and ledsAssert must be null.
110 ActionSet temp{};
111 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
112 refAssert.begin(), refAssert.end(),
113 std::inserter(temp, temp.begin()));
114 EXPECT_EQ(0, temp.size());
115 }
116 {
117 // Assert the LEDs.
118 ActionSet ledsAssert{};
119 ActionSet ledsDeAssert{};
120
121 auto group = "/xyz/openbmc_project/ledmanager/groups/SingleLed";
122 auto result = manager.setGroupState(group, true, ledsAssert,
123 ledsDeAssert);
124 EXPECT_EQ(true, result);
125
126 EXPECT_EQ(0, ledsAssert.size());
127 EXPECT_EQ(0, ledsDeAssert.size());
128 }
129 }
130
131 /** @brief Assert Multiple LEDs to On */
TEST_F(LedTest,assertMultipleLedOn)132 TEST_F(LedTest, assertMultipleLedOn)
133 {
134 Manager manager(bus, multipleLedsOn);
135 {
136 // Assert the LEDs.
137 ActionSet ledsAssert{};
138 ActionSet ledsDeAssert{};
139
140 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLeds";
141 auto result = manager.setGroupState(group, true, ledsAssert,
142 ledsDeAssert);
143 EXPECT_EQ(true, result);
144
145 // Need just the ledsAssserted populated with these.
146 ActionSet refAssert = {
147 {"One", phosphor::led::Layout::Action::On, 0, 0,
148 phosphor::led::Layout::Action::On},
149 {"Two", phosphor::led::Layout::Action::On, 0, 0,
150 phosphor::led::Layout::Action::On},
151 {"Three", phosphor::led::Layout::Action::On, 0, 0,
152 phosphor::led::Layout::Action::On},
153 };
154 EXPECT_EQ(refAssert.size(), ledsAssert.size());
155 EXPECT_EQ(0, ledsDeAssert.size());
156
157 // difference of refAssert and ledsAssert must be null.
158 ActionSet temp{};
159 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
160 refAssert.begin(), refAssert.end(),
161 std::inserter(temp, temp.begin()));
162 EXPECT_EQ(0, temp.size());
163 }
164 }
165
166 /** @brief Assert Multiple LEDs to Blink */
TEST_F(LedTest,assertMultipleLedBlink)167 TEST_F(LedTest, assertMultipleLedBlink)
168 {
169 Manager manager(bus, multipleLedsBlink);
170 {
171 // Assert the LEDs.
172 ActionSet ledsAssert{};
173 ActionSet ledsDeAssert{};
174
175 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLeds";
176 auto result = manager.setGroupState(group, true, ledsAssert,
177 ledsDeAssert);
178 EXPECT_EQ(true, result);
179
180 // Need just the ledsAssserted populated with these.
181 ActionSet refAssert = {
182 {"One", phosphor::led::Layout::Action::Blink, 0, 0,
183 phosphor::led::Layout::Action::Blink},
184 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
185 phosphor::led::Layout::Action::Blink},
186 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
187 phosphor::led::Layout::Action::Blink},
188 };
189 EXPECT_EQ(refAssert.size(), ledsAssert.size());
190 EXPECT_EQ(0, ledsDeAssert.size());
191
192 // difference of refAssert and ledsAssert must be null.
193 ActionSet temp{};
194 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
195 refAssert.begin(), refAssert.end(),
196 std::inserter(temp, temp.begin()));
197 EXPECT_EQ(0, temp.size());
198 }
199 }
200
201 /** @brief Assert Multiple LEDs to Blink, DeAssert */
TEST_F(LedTest,assertMultipleLedBlinkAndDeAssert)202 TEST_F(LedTest, assertMultipleLedBlinkAndDeAssert)
203 {
204 Manager manager(bus, multipleLedsBlink);
205 {
206 // Assert the LEDs.
207 ActionSet ledsAssert{};
208 ActionSet ledsDeAssert{};
209
210 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLeds";
211 auto result = manager.setGroupState(group, true, ledsAssert,
212 ledsDeAssert);
213 EXPECT_EQ(true, result);
214
215 // Need just the ledsAssserted populated with these.
216 ActionSet refAssert = {
217 {"One", phosphor::led::Layout::Action::Blink, 0, 0,
218 phosphor::led::Layout::Action::Blink},
219 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
220 phosphor::led::Layout::Action::Blink},
221 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
222 phosphor::led::Layout::Action::Blink},
223 };
224 EXPECT_EQ(refAssert.size(), ledsAssert.size());
225 EXPECT_EQ(0, ledsDeAssert.size());
226
227 // difference of refAssert and ledsAssert must be null.
228 ActionSet temp{};
229 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
230 refAssert.begin(), refAssert.end(),
231 std::inserter(temp, temp.begin()));
232 EXPECT_EQ(0, temp.size());
233 }
234 {
235 // Assert the LEDs.
236 ActionSet ledsAssert{};
237 ActionSet ledsDeAssert{};
238
239 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLeds";
240 auto result = manager.setGroupState(group, false, ledsAssert,
241 ledsDeAssert);
242 EXPECT_EQ(false, result);
243
244 // Need just the ledsAssserted populated with these.
245 ActionSet refDeAssert = {
246 {"One", phosphor::led::Layout::Action::Blink, 0, 0,
247 phosphor::led::Layout::Action::Blink},
248 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
249 phosphor::led::Layout::Action::Blink},
250 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
251 phosphor::led::Layout::Action::Blink},
252 };
253 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
254 EXPECT_EQ(0, ledsAssert.size());
255
256 // difference of refDeAssert and ledsDeAssert must be null.
257 ActionSet temp{};
258 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
259 refDeAssert.begin(), refDeAssert.end(),
260 std::inserter(temp, temp.begin()));
261 EXPECT_EQ(0, temp.size());
262 }
263 }
264
265 /** @brief Assert Multiple LEDs to Blink, DeAssert Twice */
TEST_F(LedTest,assertMultipleLedBlinkAndDeAssertTwice)266 TEST_F(LedTest, assertMultipleLedBlinkAndDeAssertTwice)
267 {
268 Manager manager(bus, multipleLedsBlink);
269 {
270 // Assert the LEDs.
271 ActionSet ledsAssert{};
272 ActionSet ledsDeAssert{};
273
274 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLeds";
275 auto result = manager.setGroupState(group, true, ledsAssert,
276 ledsDeAssert);
277 EXPECT_EQ(true, result);
278
279 // Need just the ledsAssserted populated with these.
280 ActionSet refAssert = {
281 {"One", phosphor::led::Layout::Action::Blink, 0, 0,
282 phosphor::led::Layout::Action::Blink},
283 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
284 phosphor::led::Layout::Action::Blink},
285 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
286 phosphor::led::Layout::Action::Blink},
287 };
288 EXPECT_EQ(refAssert.size(), ledsAssert.size());
289 EXPECT_EQ(0, ledsDeAssert.size());
290
291 // difference of refAssert and ledsAssert must be null.
292 ActionSet temp{};
293 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
294 refAssert.begin(), refAssert.end(),
295 std::inserter(temp, temp.begin()));
296 EXPECT_EQ(0, temp.size());
297 }
298 {
299 // DeAssert the LEDs.
300 ActionSet ledsAssert{};
301 ActionSet ledsDeAssert{};
302
303 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLeds";
304 auto result = manager.setGroupState(group, false, ledsAssert,
305 ledsDeAssert);
306 EXPECT_EQ(false, result);
307
308 // Need just the ledsAssserted populated with these.
309 ActionSet refDeAssert = {
310 {"One", phosphor::led::Layout::Action::Blink, 0, 0,
311 phosphor::led::Layout::Action::Blink},
312 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
313 phosphor::led::Layout::Action::Blink},
314 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
315 phosphor::led::Layout::Action::Blink},
316 };
317 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
318 EXPECT_EQ(0, ledsAssert.size());
319
320 // difference of refDeAssert and ledsDeAssert must be null.
321 ActionSet temp{};
322 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
323 refDeAssert.begin(), refDeAssert.end(),
324 std::inserter(temp, temp.begin()));
325 EXPECT_EQ(0, temp.size());
326 }
327 {
328 // DeAssert the LEDs.
329 ActionSet ledsAssert{};
330 ActionSet ledsDeAssert{};
331
332 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLeds";
333 auto result = manager.setGroupState(group, false, ledsAssert,
334 ledsDeAssert);
335 EXPECT_EQ(false, result);
336 EXPECT_EQ(0, ledsDeAssert.size());
337 EXPECT_EQ(0, ledsAssert.size());
338 }
339 }
340
341 /** @brief Assert Multiple LEDs to mix of On and Blink */
TEST_F(LedTest,assertMultipleLedOnAndBlink)342 TEST_F(LedTest, assertMultipleLedOnAndBlink)
343 {
344 Manager manager(bus, multipleLedsOnAndBlink);
345 {
346 // Assert the LEDs.
347 ActionSet ledsAssert{};
348 ActionSet ledsDeAssert{};
349
350 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsMix";
351 auto result = manager.setGroupState(group, true, ledsAssert,
352 ledsDeAssert);
353 EXPECT_EQ(true, result);
354
355 // Need just the ledsAssserted populated with these.
356 ActionSet refAssert = {
357 {"One", phosphor::led::Layout::Action::Blink, 0, 0,
358 phosphor::led::Layout::Action::Blink},
359 {"Two", phosphor::led::Layout::Action::On, 0, 0,
360 phosphor::led::Layout::Action::Blink},
361 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
362 phosphor::led::Layout::Action::On},
363 {"Four", phosphor::led::Layout::Action::On, 0, 0,
364 phosphor::led::Layout::Action::Blink},
365 {"Five", phosphor::led::Layout::Action::On, 0, 0,
366 phosphor::led::Layout::Action::Blink},
367 };
368 EXPECT_EQ(refAssert.size(), ledsAssert.size());
369 EXPECT_EQ(0, ledsDeAssert.size());
370
371 // difference of refAssert and ledsAssert must be null.
372 ActionSet temp{};
373 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
374 refAssert.begin(), refAssert.end(),
375 std::inserter(temp, temp.begin()));
376 EXPECT_EQ(0, temp.size());
377 }
378 }
379
380 /** @brief Assert 2 groups having distinct LEDs */
TEST_F(LedTest,assertTwoGroupsOnWithDistinctLEDOn)381 TEST_F(LedTest, assertTwoGroupsOnWithDistinctLEDOn)
382 {
383 Manager manager(bus, twoGroupsWithDistinctLEDsOn);
384 {
385 // Assert Set-A
386 ActionSet ledsAssert{};
387 ActionSet ledsDeAssert{};
388
389 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
390 auto result = manager.setGroupState(group, true, ledsAssert,
391 ledsDeAssert);
392 EXPECT_EQ(true, result);
393
394 // Need just the ledsAssserted populated with these.
395 ActionSet refAssert = {
396 {"One", phosphor::led::Layout::Action::On, 0, 0,
397 phosphor::led::Layout::Action::Blink},
398 {"Two", phosphor::led::Layout::Action::On, 0, 0,
399 phosphor::led::Layout::Action::On},
400 {"Three", phosphor::led::Layout::Action::On, 0, 0,
401 phosphor::led::Layout::Action::Blink},
402 };
403 EXPECT_EQ(refAssert.size(), ledsAssert.size());
404 EXPECT_EQ(0, ledsDeAssert.size());
405
406 // difference of refAssert and ledsAssert must be null.
407 ActionSet temp{};
408 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
409 refAssert.begin(), refAssert.end(),
410 std::inserter(temp, temp.begin()));
411 EXPECT_EQ(0, temp.size());
412 }
413 {
414 // Assert Set-B
415 ActionSet ledsAssert{};
416 ActionSet ledsDeAssert{};
417
418 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
419 auto result = manager.setGroupState(group, true, ledsAssert,
420 ledsDeAssert);
421 EXPECT_EQ(true, result);
422
423 // Need just the ledsAssserted populated with these.
424 ActionSet refAssert = {
425 {"Four", phosphor::led::Layout::Action::On, 0, 0,
426 phosphor::led::Layout::Action::Blink},
427 {"Five", phosphor::led::Layout::Action::On, 0, 0,
428 phosphor::led::Layout::Action::Blink},
429 {"Six", phosphor::led::Layout::Action::On, 0, 0,
430 phosphor::led::Layout::Action::On},
431 };
432 EXPECT_EQ(refAssert.size(), ledsAssert.size());
433 EXPECT_EQ(0, ledsDeAssert.size());
434
435 // difference of refAssert and ledsAssert must be null.
436 ActionSet temp{};
437 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
438 refAssert.begin(), refAssert.end(),
439 std::inserter(temp, temp.begin()));
440 EXPECT_EQ(0, temp.size());
441 }
442 }
443
444 /** @brief Assert 2 groups having one of the LEDs common */
TEST_F(LedTest,asserttwoGroupsWithOneComonLEDOn)445 TEST_F(LedTest, asserttwoGroupsWithOneComonLEDOn)
446 {
447 Manager manager(bus, twoGroupsWithOneComonLEDOn);
448 {
449 // Assert Set-A
450 ActionSet ledsAssert{};
451 ActionSet ledsDeAssert{};
452
453 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
454 auto result = manager.setGroupState(group, true, ledsAssert,
455 ledsDeAssert);
456 EXPECT_EQ(true, result);
457
458 // Need just the ledsAssserted populated with these.
459 ActionSet refAssert = {
460 {"One", phosphor::led::Layout::Action::On, 0, 0,
461 phosphor::led::Layout::Action::On},
462 {"Two", phosphor::led::Layout::Action::On, 0, 0,
463 phosphor::led::Layout::Action::On},
464 {"Three", phosphor::led::Layout::Action::On, 0, 0,
465 phosphor::led::Layout::Action::On},
466 };
467 EXPECT_EQ(refAssert.size(), ledsAssert.size());
468 EXPECT_EQ(0, ledsDeAssert.size());
469
470 // difference of refAssert and ledsAssert must be null.
471 ActionSet temp{};
472 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
473 refAssert.begin(), refAssert.end(),
474 std::inserter(temp, temp.begin()));
475 EXPECT_EQ(0, temp.size());
476 }
477 {
478 // Assert Set-B
479 ActionSet ledsAssert{};
480 ActionSet ledsDeAssert{};
481
482 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
483 auto result = manager.setGroupState(group, true, ledsAssert,
484 ledsDeAssert);
485 EXPECT_EQ(true, result);
486
487 // Need just the ledsAssserted populated with these.
488 ActionSet refAssert = {
489 {"Four", phosphor::led::Layout::Action::On, 0, 0,
490 phosphor::led::Layout::Action::On},
491 {"Six", phosphor::led::Layout::Action::On, 0, 0,
492 phosphor::led::Layout::Action::On},
493 };
494 EXPECT_EQ(refAssert.size(), ledsAssert.size());
495 EXPECT_EQ(0, ledsDeAssert.size());
496
497 // difference of refAssert and ledsAssert must be null.
498 ActionSet temp{};
499 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
500 refAssert.begin(), refAssert.end(),
501 std::inserter(temp, temp.begin()));
502 EXPECT_EQ(0, temp.size());
503 }
504 }
505
506 /** @brief Assert 2 groups having one of the LEDs common but having Blink as
507 * priority and Deassert*/
TEST_F(LedTest,asserttwoGroupsWithOneComonLEDOnOneLEDBlinkPriorityAndDeAssertB)508 TEST_F(LedTest, asserttwoGroupsWithOneComonLEDOnOneLEDBlinkPriorityAndDeAssertB)
509 {
510 Manager manager(bus, twoGroupsWithOneComonLEDOnOneLEDBlinkPriority);
511 {
512 // Assert Set-A
513 ActionSet ledsAssert{};
514 ActionSet ledsDeAssert{};
515
516 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
517 auto result = manager.setGroupState(group, true, ledsAssert,
518 ledsDeAssert);
519 EXPECT_EQ(true, result);
520
521 // Need just the ledsAssserted populated with these.
522 ActionSet refAssert = {
523 {"One", phosphor::led::Layout::Action::On, 0, 0,
524 phosphor::led::Layout::Action::On},
525 {"Two", phosphor::led::Layout::Action::On, 0, 0,
526 phosphor::led::Layout::Action::On},
527 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
528 phosphor::led::Layout::Action::Blink},
529 };
530 EXPECT_EQ(refAssert.size(), ledsAssert.size());
531 EXPECT_EQ(0, ledsDeAssert.size());
532
533 // difference of refAssert and ledsAssert must be null.
534 ActionSet temp{};
535 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
536 refAssert.begin(), refAssert.end(),
537 std::inserter(temp, temp.begin()));
538 EXPECT_EQ(0, temp.size());
539 }
540 {
541 // Assert Set-B
542 ActionSet ledsAssert{};
543 ActionSet ledsDeAssert{};
544
545 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
546 auto result = manager.setGroupState(group, true, ledsAssert,
547 ledsDeAssert);
548 EXPECT_EQ(true, result);
549
550 // Need just the ledsAssserted populated with these.
551 // Does not action on [Three] since priority is [Blink]
552 ActionSet refAssert = {
553 {"Four", phosphor::led::Layout::Action::On, 0, 0,
554 phosphor::led::Layout::Action::On},
555 {"Six", phosphor::led::Layout::Action::On, 0, 0,
556 phosphor::led::Layout::Action::On},
557 };
558 EXPECT_EQ(refAssert.size(), ledsAssert.size());
559 EXPECT_EQ(0, ledsDeAssert.size());
560
561 // difference of refAssert and ledsAssert must be null.
562 ActionSet temp{};
563 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
564 refAssert.begin(), refAssert.end(),
565 std::inserter(temp, temp.begin()));
566 EXPECT_EQ(0, temp.size());
567 }
568 {
569 // De-Assert Set-B
570 ActionSet ledsAssert{};
571 ActionSet ledsDeAssert{};
572
573 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
574 auto result = manager.setGroupState(group, false, ledsAssert,
575 ledsDeAssert);
576 EXPECT_EQ(false, result);
577
578 // Need just the ledsDeAssserted populated with these.
579 ActionSet refDeAssert = {
580 {"Four", phosphor::led::Layout::Action::On, 0, 0,
581 phosphor::led::Layout::Action::On},
582 {"Six", phosphor::led::Layout::Action::On, 0, 0,
583 phosphor::led::Layout::Action::On},
584 };
585 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
586 EXPECT_EQ(0, ledsAssert.size());
587
588 // difference of refDeAssert and ledsDeAssert must be null.
589 // [Three] is not touched since its already [Blink]
590 ActionSet temp{};
591 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
592 refDeAssert.begin(), refDeAssert.end(),
593 std::inserter(temp, temp.begin()));
594 EXPECT_EQ(0, temp.size());
595 }
596 }
597
598 /** @brief Assert 2 groups having one of the LEDs common but having Blink as
599 * priority and Deassert A */
TEST_F(LedTest,asserttwoGroupsWithOneComonLEDOnOneLEDBlinkPriorityAndDeAssertA)600 TEST_F(LedTest, asserttwoGroupsWithOneComonLEDOnOneLEDBlinkPriorityAndDeAssertA)
601 {
602 Manager manager(bus, twoGroupsWithOneComonLEDOnOneLEDBlinkPriority);
603 {
604 // Assert Set-A
605 ActionSet ledsAssert{};
606 ActionSet ledsDeAssert{};
607
608 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
609 auto result = manager.setGroupState(group, true, ledsAssert,
610 ledsDeAssert);
611 EXPECT_EQ(true, result);
612
613 // Need just the ledsAssserted populated with these.
614 ActionSet refAssert = {
615 {"One", phosphor::led::Layout::Action::On, 0, 0,
616 phosphor::led::Layout::Action::On},
617 {"Two", phosphor::led::Layout::Action::On, 0, 0,
618 phosphor::led::Layout::Action::On},
619 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
620 phosphor::led::Layout::Action::Blink},
621 };
622 EXPECT_EQ(refAssert.size(), ledsAssert.size());
623 EXPECT_EQ(0, ledsDeAssert.size());
624
625 // difference of refAssert and ledsAssert must be null.
626 ActionSet temp{};
627 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
628 refAssert.begin(), refAssert.end(),
629 std::inserter(temp, temp.begin()));
630 EXPECT_EQ(0, temp.size());
631 }
632 {
633 // Assert Set-B
634 ActionSet ledsAssert{};
635 ActionSet ledsDeAssert{};
636
637 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
638 auto result = manager.setGroupState(group, true, ledsAssert,
639 ledsDeAssert);
640 EXPECT_EQ(true, result);
641
642 // Need just the ledsAssserted populated with these.
643 // [Three] does not get actioned since it has Blink priority
644 ActionSet refAssert = {
645 {"Four", phosphor::led::Layout::Action::On, 0, 0,
646 phosphor::led::Layout::Action::On},
647 {"Six", phosphor::led::Layout::Action::On, 0, 0,
648 phosphor::led::Layout::Action::On},
649 };
650 EXPECT_EQ(refAssert.size(), ledsAssert.size());
651 EXPECT_EQ(0, ledsDeAssert.size());
652
653 // difference of refAssert and ledsAssert must be null.
654 ActionSet temp{};
655 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
656 refAssert.begin(), refAssert.end(),
657 std::inserter(temp, temp.begin()));
658 EXPECT_EQ(0, temp.size());
659 }
660 {
661 // De-Assert Set-A
662 ActionSet ledsAssert{};
663 ActionSet ledsDeAssert{};
664
665 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
666 auto result = manager.setGroupState(group, false, ledsAssert,
667 ledsDeAssert);
668 EXPECT_EQ(false, result);
669
670 // Need just the ledsDeAssserted populated with these.
671 ActionSet refDeAssert = {
672 {"One", phosphor::led::Layout::Action::On, 0, 0,
673 phosphor::led::Layout::Action::On},
674 {"Two", phosphor::led::Layout::Action::On, 0, 0,
675 phosphor::led::Layout::Action::On},
676 };
677 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
678
679 // difference of refDeAssert and ledsDeAssert must be null.
680 ActionSet temp{};
681 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
682 refDeAssert.begin(), refDeAssert.end(),
683 std::inserter(temp, temp.begin()));
684 EXPECT_EQ(0, temp.size());
685
686 // Need just the ledsAssert populated with these.
687 ActionSet refAssert = {
688 {"Three", phosphor::led::Layout::Action::On, 0, 0,
689 phosphor::led::Layout::Action::Blink},
690 };
691 EXPECT_EQ(refAssert.size(), ledsAssert.size());
692
693 // difference of refAssert and ledsAssert must be null.
694 ActionSet temp1{};
695 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
696 refAssert.begin(), refAssert.end(),
697 std::inserter(temp1, temp1.begin()));
698 EXPECT_EQ(0, temp1.size());
699 }
700 }
701
702 /** @brief Assert 2 groups having one of the LEDs common but having ON as
703 * priority And Deassert A */
TEST_F(LedTest,asserttwoGroupsWithOneComonLEDOnOneLEDOnPriorityAndDeAssertA)704 TEST_F(LedTest, asserttwoGroupsWithOneComonLEDOnOneLEDOnPriorityAndDeAssertA)
705 {
706 Manager manager(bus, twoGroupsWithOneComonLEDOnPriority);
707 {
708 // Assert Set-A
709 ActionSet ledsAssert{};
710 ActionSet ledsDeAssert{};
711
712 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
713 auto result = manager.setGroupState(group, true, ledsAssert,
714 ledsDeAssert);
715 EXPECT_EQ(true, result);
716
717 // Need just the ledsAssserted populated with these.
718 ActionSet refAssert = {
719 {"One", phosphor::led::Layout::Action::On, 0, 0,
720 phosphor::led::Layout::Action::On},
721 {"Two", phosphor::led::Layout::Action::On, 0, 0,
722 phosphor::led::Layout::Action::On},
723 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
724 phosphor::led::Layout::Action::On},
725 };
726 EXPECT_EQ(refAssert.size(), ledsAssert.size());
727 EXPECT_EQ(0, ledsDeAssert.size());
728
729 // difference of refAssert and ledsAssert must be null.
730 ActionSet temp{};
731 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
732 refAssert.begin(), refAssert.end(),
733 std::inserter(temp, temp.begin()));
734 EXPECT_EQ(0, temp.size());
735 }
736 {
737 // Assert Set-B
738 ActionSet ledsAssert{};
739 ActionSet ledsDeAssert{};
740
741 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
742 auto result = manager.setGroupState(group, true, ledsAssert,
743 ledsDeAssert);
744 EXPECT_EQ(true, result);
745
746 // Need just the ledsAssserted populated with these.
747 // Three is set to ON due to ON priority.
748 ActionSet refAssert = {
749 {"Three", phosphor::led::Layout::Action::On, 0, 0,
750 phosphor::led::Layout::Action::On},
751 {"Four", phosphor::led::Layout::Action::On, 0, 0,
752 phosphor::led::Layout::Action::On},
753 {"Six", phosphor::led::Layout::Action::On, 0, 0,
754 phosphor::led::Layout::Action::On},
755 };
756 EXPECT_EQ(refAssert.size(), ledsAssert.size());
757 EXPECT_EQ(0, ledsDeAssert.size());
758
759 // difference of refAssert and ledsAssert must be null.
760 ActionSet temp{};
761 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
762 refAssert.begin(), refAssert.end(),
763 std::inserter(temp, temp.begin()));
764 }
765 {
766 // De-Assert Set-A
767 ActionSet ledsAssert{};
768 ActionSet ledsDeAssert{};
769
770 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
771 auto result = manager.setGroupState(group, false, ledsAssert,
772 ledsDeAssert);
773 EXPECT_EQ(false, result);
774
775 // Need just the ledsDeAssserted populated with these.
776 // [Three] stays in [On] since [B] has it [On]
777 ActionSet refDeAssert = {
778 {"One", phosphor::led::Layout::Action::On, 0, 0,
779 phosphor::led::Layout::Action::On},
780 {"Two", phosphor::led::Layout::Action::On, 0, 0,
781 phosphor::led::Layout::Action::On},
782 };
783 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
784 EXPECT_EQ(0, ledsAssert.size());
785
786 // difference of refDeAssert and ledsDeAssert must be null.
787 ActionSet temp{};
788 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
789 refDeAssert.begin(), refDeAssert.end(),
790 std::inserter(temp, temp.begin()));
791 EXPECT_EQ(0, temp.size());
792 }
793 }
794
795 /** @brief Assert 2 groups having one of the LEDs common but having ON as
796 * priority And Deassert B */
TEST_F(LedTest,asserttwoGroupsWithOneComonLEDOnOneLEDOnPriorityAndDeAssertB)797 TEST_F(LedTest, asserttwoGroupsWithOneComonLEDOnOneLEDOnPriorityAndDeAssertB)
798 {
799 Manager manager(bus, twoGroupsWithOneComonLEDOnPriority);
800 {
801 // Assert Set-A
802 ActionSet ledsAssert{};
803 ActionSet ledsDeAssert{};
804
805 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
806 auto result = manager.setGroupState(group, true, ledsAssert,
807 ledsDeAssert);
808 EXPECT_EQ(true, result);
809
810 // Need just the ledsAssserted populated with these.
811 ActionSet refAssert = {
812 {"One", phosphor::led::Layout::Action::On, 0, 0,
813 phosphor::led::Layout::Action::On},
814 {"Two", phosphor::led::Layout::Action::On, 0, 0,
815 phosphor::led::Layout::Action::On},
816 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
817 phosphor::led::Layout::Action::On},
818 };
819 EXPECT_EQ(refAssert.size(), ledsAssert.size());
820 EXPECT_EQ(0, ledsDeAssert.size());
821
822 // difference of refAssert and ledsAssert must be null.
823 ActionSet temp{};
824 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
825 refAssert.begin(), refAssert.end(),
826 std::inserter(temp, temp.begin()));
827 EXPECT_EQ(0, temp.size());
828 }
829 {
830 // Assert Set-B
831 ActionSet ledsAssert{};
832 ActionSet ledsDeAssert{};
833
834 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
835 auto result = manager.setGroupState(group, true, ledsAssert,
836 ledsDeAssert);
837 EXPECT_EQ(true, result);
838
839 // Need just the ledsAssserted populated with these.
840 // Three is set to ON due to ON priority.
841 ActionSet refAssert = {
842 {"Three", phosphor::led::Layout::Action::On, 0, 0,
843 phosphor::led::Layout::Action::On},
844 {"Four", phosphor::led::Layout::Action::On, 0, 0,
845 phosphor::led::Layout::Action::On},
846 {"Six", phosphor::led::Layout::Action::On, 0, 0,
847 phosphor::led::Layout::Action::On},
848 };
849 EXPECT_EQ(refAssert.size(), ledsAssert.size());
850 EXPECT_EQ(0, ledsDeAssert.size());
851
852 // difference of refAssert and ledsAssert must be null.
853 ActionSet temp{};
854 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
855 refAssert.begin(), refAssert.end(),
856 std::inserter(temp, temp.begin()));
857 }
858 {
859 // De-Assert Set-B
860 ActionSet ledsAssert{};
861 ActionSet ledsDeAssert{};
862
863 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
864 auto result = manager.setGroupState(group, false, ledsAssert,
865 ledsDeAssert);
866 EXPECT_EQ(false, result);
867
868 // Need just the ledsDeAssserted populated with these.
869 ActionSet refDeAssert = {
870 {"Four", phosphor::led::Layout::Action::On, 0, 0,
871 phosphor::led::Layout::Action::On},
872 {"Six", phosphor::led::Layout::Action::On, 0, 0,
873 phosphor::led::Layout::Action::On},
874 };
875 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
876
877 // difference of refDeAssert and ledsDeAssert must be null.
878 ActionSet temp{};
879 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
880 refDeAssert.begin(), refDeAssert.end(),
881 std::inserter(temp, temp.begin()));
882 EXPECT_EQ(0, temp.size());
883
884 // Need just the ledsAssert populated with these.
885 // Since [Three] stood [On], need to go back to [Blink]
886 ActionSet refAssert = {
887 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
888 phosphor::led::Layout::Action::On},
889 };
890 EXPECT_EQ(refAssert.size(), ledsAssert.size());
891
892 // difference of refAssert and ledsAssert must be null.
893 ActionSet temp1{};
894 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
895 refAssert.begin(), refAssert.end(),
896 std::inserter(temp, temp.begin()));
897 EXPECT_EQ(0, temp.size());
898 }
899 }
900
901 /** @brief Assert 2 groups having multiple common LEDs in Same State */
TEST_F(LedTest,assertTwoGroupsWithMultiplComonLEDOnAndDeAssert)902 TEST_F(LedTest, assertTwoGroupsWithMultiplComonLEDOnAndDeAssert)
903 {
904 Manager manager(bus, twoGroupsWithMultiplComonLEDOn);
905 {
906 // Assert Set-B
907 ActionSet ledsAssert{};
908 ActionSet ledsDeAssert{};
909
910 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
911 auto result = manager.setGroupState(group, true, ledsAssert,
912 ledsDeAssert);
913 EXPECT_EQ(true, result);
914
915 // Need just the ledsAssserted populated with these.
916 ActionSet refAssert = {
917 {"Two", phosphor::led::Layout::Action::On, 0, 0,
918 phosphor::led::Layout::Action::On},
919 {"Six", phosphor::led::Layout::Action::On, 0, 0,
920 phosphor::led::Layout::Action::On},
921 {"Three", phosphor::led::Layout::Action::On, 0, 0,
922 phosphor::led::Layout::Action::On},
923 {"Seven", phosphor::led::Layout::Action::On, 0, 0,
924 phosphor::led::Layout::Action::On},
925 };
926 EXPECT_EQ(refAssert.size(), ledsAssert.size());
927 EXPECT_EQ(0, ledsDeAssert.size());
928
929 // difference of refAssert and ledsAssert must be null.
930 ActionSet temp{};
931 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
932 refAssert.begin(), refAssert.end(),
933 std::inserter(temp, temp.begin()));
934 EXPECT_EQ(0, temp.size());
935 }
936 {
937 // Assert Set-A
938 ActionSet ledsAssert{};
939 ActionSet ledsDeAssert{};
940
941 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
942 auto result = manager.setGroupState(group, true, ledsAssert,
943 ledsDeAssert);
944 EXPECT_EQ(true, result);
945
946 // Need just the ledsAssserted populated with these.
947 ActionSet refAssert = {
948 {"One", phosphor::led::Layout::Action::On, 0, 0,
949 phosphor::led::Layout::Action::On},
950 };
951 EXPECT_EQ(refAssert.size(), ledsAssert.size());
952 EXPECT_EQ(0, ledsDeAssert.size());
953
954 // difference of refAssert and ledsAssert must be null.
955 ActionSet temp{};
956 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
957 refAssert.begin(), refAssert.end(),
958 std::inserter(temp, temp.begin()));
959 EXPECT_EQ(0, temp.size());
960 }
961 {
962 // De-Assert Set-B
963 ActionSet ledsAssert{};
964 ActionSet ledsDeAssert{};
965
966 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
967 auto result = manager.setGroupState(group, false, ledsAssert,
968 ledsDeAssert);
969 EXPECT_EQ(false, result);
970
971 // Need just the ledsDeAssserted populated with these.
972 ActionSet refDeAssert = {
973 {"Six", phosphor::led::Layout::Action::On, 0, 0,
974 phosphor::led::Layout::Action::On},
975 {"Seven", phosphor::led::Layout::Action::On, 0, 0,
976 phosphor::led::Layout::Action::On},
977 };
978 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
979 EXPECT_EQ(0, ledsAssert.size());
980
981 // difference of refDeAssert and ledsDeAssert must be null.
982 ActionSet temp{};
983 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
984 refDeAssert.begin(), refDeAssert.end(),
985 std::inserter(temp, temp.begin()));
986 EXPECT_EQ(0, temp.size());
987 }
988 }
989
990 /** @brief Assert 2 groups having multiple LEDs common in different state */
TEST_F(LedTest,assertTwoGroupsWithMultipleComonLEDInDifferentStateBandA)991 TEST_F(LedTest, assertTwoGroupsWithMultipleComonLEDInDifferentStateBandA)
992 {
993 Manager manager(bus, twoGroupsWithMultipleComonLEDInDifferentState);
994 {
995 // Assert Set-B
996 ActionSet ledsAssert{};
997 ActionSet ledsDeAssert{};
998
999 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1000 auto result = manager.setGroupState(group, true, ledsAssert,
1001 ledsDeAssert);
1002 EXPECT_EQ(true, result);
1003
1004 // Need just the ledsAssserted populated with these.
1005 ActionSet refAssert = {
1006 {"Two", phosphor::led::Layout::Action::On, 0, 0,
1007 phosphor::led::Layout::Action::On},
1008 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
1009 phosphor::led::Layout::Action::On},
1010 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1011 phosphor::led::Layout::Action::On},
1012 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1013 phosphor::led::Layout::Action::On},
1014 };
1015 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1016 EXPECT_EQ(0, ledsDeAssert.size());
1017
1018 // difference of refAssert and ledsAssert must be null.
1019 ActionSet temp{};
1020 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1021 refAssert.begin(), refAssert.end(),
1022 std::inserter(temp, temp.begin()));
1023 EXPECT_EQ(0, temp.size());
1024 }
1025 {
1026 // Assert Set-A
1027 ActionSet ledsAssert{};
1028 ActionSet ledsDeAssert{};
1029
1030 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1031 auto result = manager.setGroupState(group, true, ledsAssert,
1032 ledsDeAssert);
1033 EXPECT_EQ(true, result);
1034
1035 // Need just the ledsAssserted populated with these
1036 // [Two] remains [On] due to higher priority.
1037 // [Three] remains [Blink]
1038 ActionSet refAssert = {
1039 {"One", phosphor::led::Layout::Action::On, 0, 0,
1040 phosphor::led::Layout::Action::On},
1041 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1042 phosphor::led::Layout::Action::On},
1043 };
1044 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1045 EXPECT_EQ(0, ledsDeAssert.size());
1046
1047 // difference of refAssert and ledsAssert must be null.
1048 ActionSet temp{};
1049 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1050 refAssert.begin(), refAssert.end(),
1051 std::inserter(temp, temp.begin()));
1052 EXPECT_EQ(0, temp.size());
1053 }
1054 }
1055
1056 /** @brief Assert 2 groups having multiple LEDs common in different state */
TEST_F(LedTest,assertTwoGroupsWithMultipleComonLEDInDifferentStateAtoB)1057 TEST_F(LedTest, assertTwoGroupsWithMultipleComonLEDInDifferentStateAtoB)
1058 {
1059 Manager manager(bus, twoGroupsWithMultipleComonLEDInDifferentState);
1060 {
1061 // Assert Set-A
1062 ActionSet ledsAssert{};
1063 ActionSet ledsDeAssert{};
1064
1065 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1066 auto result = manager.setGroupState(group, true, ledsAssert,
1067 ledsDeAssert);
1068 EXPECT_EQ(true, result);
1069
1070 // Need just the ledsAssserted populated with these.'Two' gets to Blink
1071 // due to higher priority.
1072 ActionSet refAssert = {
1073 {"One", phosphor::led::Layout::Action::On, 0, 0,
1074 phosphor::led::Layout::Action::On},
1075 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1076 phosphor::led::Layout::Action::On},
1077 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
1078 phosphor::led::Layout::Action::On},
1079 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1080 phosphor::led::Layout::Action::On},
1081 };
1082 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1083 EXPECT_EQ(0, ledsDeAssert.size());
1084
1085 // difference of refAssert and ledsAssert must be null.
1086 ActionSet temp{};
1087 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1088 refAssert.begin(), refAssert.end(),
1089 std::inserter(temp, temp.begin()));
1090 EXPECT_EQ(0, temp.size());
1091 }
1092 {
1093 // Assert Set-B
1094 ActionSet ledsAssert{};
1095 ActionSet ledsDeAssert{};
1096
1097 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1098 auto result = manager.setGroupState(group, true, ledsAssert,
1099 ledsDeAssert);
1100 EXPECT_EQ(true, result);
1101
1102 // Need just the ledsAssserted populated with these.
1103 // [Three] remains [Blink] from previous
1104 // [Two] moves to [On] from [Blink] due to [On] priority
1105 ActionSet refAssert = {
1106 {"Two", phosphor::led::Layout::Action::On, 0, 0,
1107 phosphor::led::Layout::Action::On},
1108 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1109 phosphor::led::Layout::Action::On},
1110 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1111 phosphor::led::Layout::Action::On},
1112 };
1113 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1114 EXPECT_EQ(0, ledsDeAssert.size());
1115
1116 // difference of refAssert and ledsAssert must be null.
1117 ActionSet temp{};
1118 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1119 refAssert.begin(), refAssert.end(),
1120 std::inserter(temp, temp.begin()));
1121 EXPECT_EQ(0, temp.size());
1122 }
1123 }
1124
1125 /** @brief Assert 2 groups having multiple LEDs common in different state
1126 * DeAssert twice
1127 */
TEST_F(LedTest,assertTwoGroupsWithMultipleComonLEDInDifferentStateAtoBDeAssertTwice)1128 TEST_F(LedTest,
1129 assertTwoGroupsWithMultipleComonLEDInDifferentStateAtoBDeAssertTwice)
1130 {
1131 Manager manager(bus, twoGroupsWithMultipleComonLEDInDifferentState);
1132 {
1133 // Assert Set-A
1134 ActionSet ledsAssert{};
1135 ActionSet ledsDeAssert{};
1136
1137 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1138 auto result = manager.setGroupState(group, true, ledsAssert,
1139 ledsDeAssert);
1140 EXPECT_EQ(true, result);
1141
1142 // Need just the ledsAssserted populated with these.
1143 ActionSet refAssert = {
1144 {"One", phosphor::led::Layout::Action::On, 0, 0,
1145 phosphor::led::Layout::Action::On},
1146 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1147 phosphor::led::Layout::Action::On},
1148 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
1149 phosphor::led::Layout::Action::On},
1150 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1151 phosphor::led::Layout::Action::On},
1152 };
1153 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1154 EXPECT_EQ(0, ledsDeAssert.size());
1155
1156 // difference of refAssert and ledsAssert must be null.
1157 ActionSet temp{};
1158 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1159 refAssert.begin(), refAssert.end(),
1160 std::inserter(temp, temp.begin()));
1161 EXPECT_EQ(0, temp.size());
1162 }
1163 {
1164 // Assert Set-B
1165 ActionSet ledsAssert{};
1166 ActionSet ledsDeAssert{};
1167
1168 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1169 auto result = manager.setGroupState(group, true, ledsAssert,
1170 ledsDeAssert);
1171 EXPECT_EQ(true, result);
1172
1173 // Need just the ledsAssserted populated with these.
1174 // [Two] turns [On] due to priority
1175 // [Three] remains [Blink]
1176 ActionSet refAssert = {
1177 {"Two", phosphor::led::Layout::Action::On, 0, 0,
1178 phosphor::led::Layout::Action::On},
1179 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1180 phosphor::led::Layout::Action::On},
1181 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1182 phosphor::led::Layout::Action::On},
1183 };
1184 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1185 EXPECT_EQ(0, ledsDeAssert.size());
1186
1187 // difference of refAssert and ledsAssert must be null.
1188 ActionSet temp{};
1189 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1190 refAssert.begin(), refAssert.end(),
1191 std::inserter(temp, temp.begin()));
1192 EXPECT_EQ(0, temp.size());
1193 }
1194 {
1195 // DeAssert Set-B
1196 ActionSet ledsAssert{};
1197 ActionSet ledsDeAssert{};
1198
1199 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1200 auto result = manager.setGroupState(group, false, ledsAssert,
1201 ledsDeAssert);
1202 EXPECT_EQ(false, result);
1203
1204 // Need just the ledsAssserted populated with these.
1205 ActionSet refDeAssert = {
1206 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1207 phosphor::led::Layout::Action::On},
1208 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1209 phosphor::led::Layout::Action::On},
1210 };
1211 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
1212
1213 // difference of refDeAssert and ledsDeAssert must be null.
1214 ActionSet temp{};
1215 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
1216 refDeAssert.begin(), refDeAssert.end(),
1217 std::inserter(temp, temp.begin()));
1218 EXPECT_EQ(0, temp.size());
1219
1220 // Need just the ledsAssert populated with these.
1221 // [Two] will go back to [Blink] from [On]
1222 ActionSet refAssert = {
1223 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1224 phosphor::led::Layout::Action::On},
1225 };
1226 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1227
1228 // difference of refAssert and ledsAssert must be null.
1229 ActionSet temp1{};
1230 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1231 refAssert.begin(), refAssert.end(),
1232 std::inserter(temp1, temp1.begin()));
1233 EXPECT_EQ(0, temp1.size());
1234 }
1235 {
1236 // DeAssert Set-A
1237 ActionSet ledsAssert{};
1238 ActionSet ledsDeAssert{};
1239
1240 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1241 auto result = manager.setGroupState(group, false, ledsAssert,
1242 ledsDeAssert);
1243 EXPECT_EQ(false, result);
1244
1245 // Need just the ledsAssserted populated with these.
1246 ActionSet refDeAssert = {
1247 {"One", phosphor::led::Layout::Action::On, 0, 0,
1248 phosphor::led::Layout::Action::On},
1249 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1250 phosphor::led::Layout::Action::On},
1251 {"Three", phosphor::led::Layout::Action::Blink, 0, 0,
1252 phosphor::led::Layout::Action::On},
1253 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1254 phosphor::led::Layout::Action::On},
1255 };
1256 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
1257 EXPECT_EQ(0, ledsAssert.size());
1258
1259 // difference of refDeAssert and ledsDeAssert must be null.
1260 ActionSet temp{};
1261 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
1262 refDeAssert.begin(), refDeAssert.end(),
1263 std::inserter(temp, temp.begin()));
1264 EXPECT_EQ(0, temp.size());
1265 }
1266 {
1267 // DeAssert Set-A again and make sure we get all empty
1268 ActionSet ledsAssert{};
1269 ActionSet ledsDeAssert{};
1270
1271 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1272 auto result = manager.setGroupState(group, false, ledsAssert,
1273 ledsDeAssert);
1274 EXPECT_EQ(false, result);
1275 EXPECT_EQ(0, ledsDeAssert.size());
1276 EXPECT_EQ(0, ledsAssert.size());
1277 }
1278 }
1279
1280 /** @brief Assert 2 groups having multiple LEDs common in different state and
1281 * mixed priority. DeAssert-A
1282 */
TEST_F(LedTest,assertTwoGroupsWithMultipleComonLEDInDifferentStateDiffPriorityAandB)1283 TEST_F(LedTest,
1284 assertTwoGroupsWithMultipleComonLEDInDifferentStateDiffPriorityAandB)
1285 {
1286 Manager manager(bus,
1287 twoGroupsWithMultipleComonLEDInDifferentStateDiffPriority);
1288 {
1289 // Assert Set-A
1290 ActionSet ledsAssert{};
1291 ActionSet ledsDeAssert{};
1292
1293 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1294 auto result = manager.setGroupState(group, true, ledsAssert,
1295 ledsDeAssert);
1296 EXPECT_EQ(true, result);
1297
1298 // Need just the ledsAssserted populated with these.
1299 ActionSet refAssert = {
1300 {"One", phosphor::led::Layout::Action::On, 0, 0,
1301 phosphor::led::Layout::Action::On},
1302 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1303 phosphor::led::Layout::Action::On},
1304 {"Three", phosphor::led::Layout::Action::On, 0, 0,
1305 phosphor::led::Layout::Action::Blink},
1306 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1307 phosphor::led::Layout::Action::On},
1308 {"Ten", phosphor::led::Layout::Action::Blink, 0, 0,
1309 phosphor::led::Layout::Action::Blink},
1310 };
1311 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1312 EXPECT_EQ(0, ledsDeAssert.size());
1313
1314 // difference of refAssert and ledsAssert must be null.
1315 ActionSet temp{};
1316 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1317 refAssert.begin(), refAssert.end(),
1318 std::inserter(temp, temp.begin()));
1319 EXPECT_EQ(0, temp.size());
1320 }
1321 {
1322 // Assert Set-B
1323 ActionSet ledsAssert{};
1324 ActionSet ledsDeAssert{};
1325
1326 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1327 auto result = manager.setGroupState(group, true, ledsAssert,
1328 ledsDeAssert);
1329 EXPECT_EQ(true, result);
1330
1331 // Need just the ledsAssserted populated with these.
1332 // [Two] gets to [ON] due to higher priority.
1333 // [Three] remains on since it never was in [Blink] before
1334 // [Ten] remains [Blink] due to priority: [Blink]
1335 ActionSet refAssert = {
1336 {"Two", phosphor::led::Layout::Action::On, 0, 0,
1337 phosphor::led::Layout::Action::On},
1338 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1339 phosphor::led::Layout::Action::On},
1340 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1341 phosphor::led::Layout::Action::On},
1342 };
1343 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1344 EXPECT_EQ(0, ledsDeAssert.size());
1345
1346 // difference of refAssert and ledsAssert must be null.
1347 ActionSet temp{};
1348 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1349 refAssert.begin(), refAssert.end(),
1350 std::inserter(temp, temp.begin()));
1351 EXPECT_EQ(0, temp.size());
1352 }
1353 {
1354 // De-Assert Set-A
1355 ActionSet ledsAssert{};
1356 ActionSet ledsDeAssert{};
1357
1358 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1359 auto result = manager.setGroupState(group, false, ledsAssert,
1360 ledsDeAssert);
1361 EXPECT_EQ(false, result);
1362
1363 // Need just the ledsDeAsssert populated with these.
1364 ActionSet refDeAssert = {
1365 {"One", phosphor::led::Layout::Action::On, 0, 0,
1366 phosphor::led::Layout::Action::On},
1367 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1368 phosphor::led::Layout::Action::On},
1369 };
1370 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
1371
1372 // Need just the ledsAsssert populated with these.
1373 // [Ten] Moves to [On] since there is no prior [Blink]
1374 // [Three] remains [On] since it never changed state.
1375 // [Two] remains [On] since it did not go back
1376 ActionSet refAssert = {
1377 {"Ten", phosphor::led::Layout::Action::On, 0, 0,
1378 phosphor::led::Layout::Action::Blink},
1379 };
1380 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1381
1382 // difference of refAssert and ledsAssert must be null.
1383 ActionSet temp{};
1384 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1385 refAssert.begin(), refAssert.end(),
1386 std::inserter(temp, temp.begin()));
1387 EXPECT_EQ(0, temp.size());
1388 }
1389 }
1390
1391 /** @brief Assert 2 groups having multiple LEDs common in different state and
1392 * mixed priority. DeAssert-B
1393 */
TEST_F(LedTest,assertTwoGroupsWithMultipleComonLEDInDifferentStateDiffPriorityAandBDeAssertB)1394 TEST_F(
1395 LedTest,
1396 assertTwoGroupsWithMultipleComonLEDInDifferentStateDiffPriorityAandBDeAssertB)
1397 {
1398 Manager manager(bus,
1399 twoGroupsWithMultipleComonLEDInDifferentStateDiffPriority);
1400 {
1401 // Assert Set-A
1402 ActionSet ledsAssert{};
1403 ActionSet ledsDeAssert{};
1404
1405 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1406 auto result = manager.setGroupState(group, true, ledsAssert,
1407 ledsDeAssert);
1408 EXPECT_EQ(true, result);
1409
1410 // Need just the ledsAssserted populated with these.
1411 ActionSet refAssert = {
1412 {"One", phosphor::led::Layout::Action::On, 0, 0,
1413 phosphor::led::Layout::Action::On},
1414 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1415 phosphor::led::Layout::Action::On},
1416 {"Three", phosphor::led::Layout::Action::On, 0, 0,
1417 phosphor::led::Layout::Action::Blink},
1418 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1419 phosphor::led::Layout::Action::On},
1420 {"Ten", phosphor::led::Layout::Action::Blink, 0, 0,
1421 phosphor::led::Layout::Action::Blink},
1422 };
1423 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1424 EXPECT_EQ(0, ledsDeAssert.size());
1425
1426 // difference of refAssert and ledsAssert must be null.
1427 ActionSet temp{};
1428 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1429 refAssert.begin(), refAssert.end(),
1430 std::inserter(temp, temp.begin()));
1431 EXPECT_EQ(0, temp.size());
1432 }
1433 {
1434 // Assert Set-B
1435 ActionSet ledsAssert{};
1436 ActionSet ledsDeAssert{};
1437
1438 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1439 auto result = manager.setGroupState(group, true, ledsAssert,
1440 ledsDeAssert);
1441 EXPECT_EQ(true, result);
1442
1443 // Need just the ledsAssserted populated with these.
1444 // [Two] gets to [ON] due to higher priority.
1445 // [Three] remains on since it never was in [Blink] before
1446 // [Ten] remains [Blink] due to priority: [Blink]
1447 ActionSet refAssert = {
1448 {"Two", phosphor::led::Layout::Action::On, 0, 0,
1449 phosphor::led::Layout::Action::On},
1450 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1451 phosphor::led::Layout::Action::On},
1452 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1453 phosphor::led::Layout::Action::On},
1454 };
1455 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1456 EXPECT_EQ(0, ledsDeAssert.size());
1457
1458 // difference of refAssert and ledsAssert must be null.
1459 ActionSet temp{};
1460 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1461 refAssert.begin(), refAssert.end(),
1462 std::inserter(temp, temp.begin()));
1463 EXPECT_EQ(0, temp.size());
1464 }
1465 {
1466 // De-Assert Set-B
1467 ActionSet ledsAssert{};
1468 ActionSet ledsDeAssert{};
1469
1470 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1471 auto result = manager.setGroupState(group, false, ledsAssert,
1472 ledsDeAssert);
1473 EXPECT_EQ(false, result);
1474
1475 // Need just the ledsDeAsssert populated with these.
1476 ActionSet refDeAssert = {
1477 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1478 phosphor::led::Layout::Action::On},
1479 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1480 phosphor::led::Layout::Action::On},
1481 };
1482 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
1483
1484 // Need just the ledsAsssert populated with these.
1485 // [Ten] remains [Blink] since it did not move to [On]
1486 // [Three] remains [On] since it never changed state.
1487 // [Two] moves to [Blink] since there is no prior [On]
1488 ActionSet refAssert = {
1489 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1490 phosphor::led::Layout::Action::On},
1491 };
1492 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1493
1494 // difference of refAssert and ledsAssert must be null.
1495 ActionSet temp{};
1496 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1497 refAssert.begin(), refAssert.end(),
1498 std::inserter(temp, temp.begin()));
1499 EXPECT_EQ(0, temp.size());
1500 }
1501 }
1502
1503 /** @brief Assert 2 groups having multiple LEDs common in different state and
1504 * mixed priority.
1505 */
TEST_F(LedTest,assertTwoGroupsWithMultipleComonLEDInDifferentStateDiffPriorityBandA)1506 TEST_F(LedTest,
1507 assertTwoGroupsWithMultipleComonLEDInDifferentStateDiffPriorityBandA)
1508 {
1509 Manager manager(bus,
1510 twoGroupsWithMultipleComonLEDInDifferentStateDiffPriority);
1511 {
1512 // Assert Set-B
1513 ActionSet ledsAssert{};
1514 ActionSet ledsDeAssert{};
1515
1516 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1517 auto result = manager.setGroupState(group, true, ledsAssert,
1518 ledsDeAssert);
1519 EXPECT_EQ(true, result);
1520
1521 // Need just the ledsAssserted populated with these.
1522 ActionSet refAssert = {
1523 {"Two", phosphor::led::Layout::Action::On, 0, 0,
1524 phosphor::led::Layout::Action::On},
1525 {"Three", phosphor::led::Layout::Action::On, 0, 0,
1526 phosphor::led::Layout::Action::Blink},
1527 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1528 phosphor::led::Layout::Action::On},
1529 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1530 phosphor::led::Layout::Action::On},
1531 {"Ten", phosphor::led::Layout::Action::On, 0, 0,
1532 phosphor::led::Layout::Action::Blink},
1533 };
1534 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1535 EXPECT_EQ(0, ledsDeAssert.size());
1536
1537 // difference of refAssert and ledsAssert must be null.
1538 ActionSet temp{};
1539 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1540 refAssert.begin(), refAssert.end(),
1541 std::inserter(temp, temp.begin()));
1542 EXPECT_EQ(0, temp.size());
1543 }
1544 {
1545 // Assert Set-A
1546 ActionSet ledsAssert{};
1547 ActionSet ledsDeAssert{};
1548
1549 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1550 auto result = manager.setGroupState(group, true, ledsAssert,
1551 ledsDeAssert);
1552 EXPECT_EQ(true, result);
1553
1554 // Need just the ledsAssserted populated with these.
1555 // [Two] remains [ON] due to higher priority.
1556 // [Three] remains on since it never was in [Blink] before
1557 // [Ten] moves to [Blink] due to priority: [Blink]
1558 ActionSet refAssert = {
1559 {"One", phosphor::led::Layout::Action::On, 0, 0,
1560 phosphor::led::Layout::Action::On},
1561 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1562 phosphor::led::Layout::Action::On},
1563 {"Ten", phosphor::led::Layout::Action::Blink, 0, 0,
1564 phosphor::led::Layout::Action::Blink},
1565 };
1566 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1567 EXPECT_EQ(0, ledsDeAssert.size());
1568
1569 // difference of refAssert and ledsAssert must be null.
1570 ActionSet temp{};
1571 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1572 refAssert.begin(), refAssert.end(),
1573 std::inserter(temp, temp.begin()));
1574 EXPECT_EQ(0, temp.size());
1575 }
1576 }
1577
1578 /** @brief Assert 2 groups having multiple LEDs common in different state and
1579 * mixed priority and De-Assert-A
1580 */
TEST_F(LedTest,assertTwoGroupsWithMultipleComonLEDInDifferentStateDiffPriorityBandADeAssertA)1581 TEST_F(
1582 LedTest,
1583 assertTwoGroupsWithMultipleComonLEDInDifferentStateDiffPriorityBandADeAssertA)
1584 {
1585 Manager manager(bus,
1586 twoGroupsWithMultipleComonLEDInDifferentStateDiffPriority);
1587 {
1588 // Assert Set-B
1589 ActionSet ledsAssert{};
1590 ActionSet ledsDeAssert{};
1591
1592 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1593 auto result = manager.setGroupState(group, true, ledsAssert,
1594 ledsDeAssert);
1595 EXPECT_EQ(true, result);
1596
1597 // Need just the ledsAssserted populated with these.
1598 ActionSet refAssert = {
1599 {"Two", phosphor::led::Layout::Action::On, 0, 0,
1600 phosphor::led::Layout::Action::On},
1601 {"Three", phosphor::led::Layout::Action::On, 0, 0,
1602 phosphor::led::Layout::Action::Blink},
1603 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1604 phosphor::led::Layout::Action::On},
1605 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1606 phosphor::led::Layout::Action::On},
1607 {"Ten", phosphor::led::Layout::Action::On, 0, 0,
1608 phosphor::led::Layout::Action::Blink},
1609 };
1610 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1611 EXPECT_EQ(0, ledsDeAssert.size());
1612
1613 // difference of refAssert and ledsAssert must be null.
1614 ActionSet temp{};
1615 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1616 refAssert.begin(), refAssert.end(),
1617 std::inserter(temp, temp.begin()));
1618 EXPECT_EQ(0, temp.size());
1619 }
1620 {
1621 // Assert Set-A
1622 ActionSet ledsAssert{};
1623 ActionSet ledsDeAssert{};
1624
1625 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1626 auto result = manager.setGroupState(group, true, ledsAssert,
1627 ledsDeAssert);
1628 EXPECT_EQ(true, result);
1629
1630 // Need just the ledsAssserted populated with these.
1631 // [Two] remains [ON] due to higher priority.
1632 // [Three] remains on since it never was in [Blink] before
1633 // [Ten] moves to [Blink] due to priority: [Blink]
1634 ActionSet refAssert = {
1635 {"One", phosphor::led::Layout::Action::On, 0, 0,
1636 phosphor::led::Layout::Action::On},
1637 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1638 phosphor::led::Layout::Action::On},
1639 {"Ten", phosphor::led::Layout::Action::Blink, 0, 0,
1640 phosphor::led::Layout::Action::Blink},
1641 };
1642 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1643 EXPECT_EQ(0, ledsDeAssert.size());
1644
1645 // difference of refAssert and ledsAssert must be null.
1646 ActionSet temp{};
1647 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1648 refAssert.begin(), refAssert.end(),
1649 std::inserter(temp, temp.begin()));
1650 EXPECT_EQ(0, temp.size());
1651 }
1652 {
1653 // De-Assert Set-A
1654 ActionSet ledsAssert{};
1655 ActionSet ledsDeAssert{};
1656
1657 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1658 auto result = manager.setGroupState(group, false, ledsAssert,
1659 ledsDeAssert);
1660 EXPECT_EQ(false, result);
1661
1662 // Need just the ledsAssserted populated with these.
1663 // [Ten] remains [Blink] due to priority.
1664 ActionSet refDeAssert = {
1665 {"One", phosphor::led::Layout::Action::On, 0, 0,
1666 phosphor::led::Layout::Action::On},
1667 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1668 phosphor::led::Layout::Action::On},
1669 };
1670 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
1671
1672 // Need just the ledsAssserted populated with these.
1673 // [Two] remains [ON] due to higher priority.
1674 // [Three] remains [On] since it never was in [Blink] before
1675 // [Ten] moves to [On] due to priority: [Blink]
1676 ActionSet refAssert = {
1677 {"Ten", phosphor::led::Layout::Action::On, 0, 0,
1678 phosphor::led::Layout::Action::Blink},
1679 };
1680 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1681
1682 // difference of refAssert and ledsAssert must be null.
1683 ActionSet temp{};
1684 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1685 refAssert.begin(), refAssert.end(),
1686 std::inserter(temp, temp.begin()));
1687 EXPECT_EQ(0, temp.size());
1688 }
1689 }
1690
1691 /** @brief Assert 2 groups having multiple LEDs common in different state and
1692 * mixed priority and then DeAssert twice.
1693 */
TEST_F(LedTest,assertTwoGroupsWithMultipleComonLEDInDifferentStateOnBlinkPriorityBandA)1694 TEST_F(LedTest,
1695 assertTwoGroupsWithMultipleComonLEDInDifferentStateOnBlinkPriorityBandA)
1696 {
1697 Manager manager(bus,
1698 twoGroupsWithMultipleComonLEDInDifferentStateDiffPriority);
1699 {
1700 // Assert Set-B
1701 ActionSet ledsAssert{};
1702 ActionSet ledsDeAssert{};
1703
1704 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1705 auto result = manager.setGroupState(group, true, ledsAssert,
1706 ledsDeAssert);
1707 EXPECT_EQ(true, result);
1708
1709 // Need just the ledsAssserted populated with these.
1710 ActionSet refAssert = {
1711 {"Two", phosphor::led::Layout::Action::On, 0, 0,
1712 phosphor::led::Layout::Action::On},
1713 {"Three", phosphor::led::Layout::Action::On, 0, 0,
1714 phosphor::led::Layout::Action::Blink},
1715 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1716 phosphor::led::Layout::Action::On},
1717 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1718 phosphor::led::Layout::Action::On},
1719 {"Ten", phosphor::led::Layout::Action::On, 0, 0,
1720 phosphor::led::Layout::Action::Blink},
1721 };
1722 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1723 EXPECT_EQ(0, ledsDeAssert.size());
1724
1725 // difference of refAssert and ledsAssert must be null.
1726 ActionSet temp{};
1727 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1728 refAssert.begin(), refAssert.end(),
1729 std::inserter(temp, temp.begin()));
1730 EXPECT_EQ(0, temp.size());
1731 }
1732 {
1733 // Assert Set-A
1734 ActionSet ledsAssert{};
1735 ActionSet ledsDeAssert{};
1736
1737 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1738 auto result = manager.setGroupState(group, true, ledsAssert,
1739 ledsDeAssert);
1740 EXPECT_EQ(true, result);
1741
1742 // Need just the ledsAssserted populated with these.
1743 // [Two] remains [ON] due to higher priority.
1744 // [Three] remains on since it never was in [Blink] before
1745 // [Ten] moves to [Blink] due to priority: [Blink]
1746 ActionSet refAssert = {
1747 {"One", phosphor::led::Layout::Action::On, 0, 0,
1748 phosphor::led::Layout::Action::On},
1749 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1750 phosphor::led::Layout::Action::On},
1751 {"Ten", phosphor::led::Layout::Action::Blink, 0, 0,
1752 phosphor::led::Layout::Action::Blink},
1753 };
1754 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1755 EXPECT_EQ(0, ledsDeAssert.size());
1756
1757 // difference of refAssert and ledsAssert must be null.
1758 ActionSet temp{};
1759 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1760 refAssert.begin(), refAssert.end(),
1761 std::inserter(temp, temp.begin()));
1762 EXPECT_EQ(0, temp.size());
1763 }
1764 {
1765 // DeAssert Set-B
1766 ActionSet ledsAssert{};
1767 ActionSet ledsDeAssert{};
1768
1769 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1770 auto result = manager.setGroupState(group, false, ledsAssert,
1771 ledsDeAssert);
1772 EXPECT_EQ(false, result);
1773
1774 // Need just the ledsAssserted populated with these.
1775 // [Ten] remains [Blink] due to priority.
1776 ActionSet refDeAssert = {
1777 {"Five", phosphor::led::Layout::Action::On, 0, 0,
1778 phosphor::led::Layout::Action::On},
1779 {"Six", phosphor::led::Layout::Action::On, 0, 0,
1780 phosphor::led::Layout::Action::On},
1781 };
1782 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
1783
1784 // difference of refDeAssert and ledsDeAssert must be null.
1785 ActionSet temp{};
1786 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
1787 refDeAssert.begin(), refDeAssert.end(),
1788 std::inserter(temp, temp.begin()));
1789 EXPECT_EQ(0, temp.size());
1790
1791 // Need just the ledsAssert populated with these.
1792 // [Two] will move to [Blink]
1793 ActionSet refAssert = {
1794 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1795 phosphor::led::Layout::Action::On},
1796 };
1797 EXPECT_EQ(refAssert.size(), ledsAssert.size());
1798
1799 // difference of refAssert and ledsAssert must be null.
1800 ActionSet temp1{};
1801 std::set_difference(ledsAssert.begin(), ledsAssert.end(),
1802 refAssert.begin(), refAssert.end(),
1803 std::inserter(temp1, temp1.begin()));
1804 EXPECT_EQ(0, temp1.size());
1805 }
1806 {
1807 // DeAssert Set-A
1808 ActionSet ledsAssert{};
1809 ActionSet ledsDeAssert{};
1810
1811 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsASet";
1812 auto result = manager.setGroupState(group, false, ledsAssert,
1813 ledsDeAssert);
1814 EXPECT_EQ(false, result);
1815
1816 // Need just the ledsAssserted populated with these.
1817 ActionSet refDeAssert = {
1818 {"One", phosphor::led::Layout::Action::On, 0, 0,
1819 phosphor::led::Layout::Action::On},
1820 {"Two", phosphor::led::Layout::Action::Blink, 0, 0,
1821 phosphor::led::Layout::Action::On},
1822 {"Three", phosphor::led::Layout::Action::On, 0, 0,
1823 phosphor::led::Layout::Action::Blink},
1824 {"Four", phosphor::led::Layout::Action::On, 0, 0,
1825 phosphor::led::Layout::Action::On},
1826 {"Ten", phosphor::led::Layout::Action::Blink, 0, 0,
1827 phosphor::led::Layout::Action::Blink},
1828 };
1829 EXPECT_EQ(refDeAssert.size(), ledsDeAssert.size());
1830 EXPECT_EQ(0, ledsAssert.size());
1831
1832 // difference of refDeAssert and ledsDeAssert must be null.
1833 ActionSet temp{};
1834 std::set_difference(ledsDeAssert.begin(), ledsDeAssert.end(),
1835 refDeAssert.begin(), refDeAssert.end(),
1836 std::inserter(temp, temp.begin()));
1837 EXPECT_EQ(0, temp.size());
1838 }
1839 {
1840 // DeAssert Set-B again and make sure we get all empty
1841 ActionSet ledsAssert{};
1842 ActionSet ledsDeAssert{};
1843
1844 auto group = "/xyz/openbmc_project/ledmanager/groups/MultipleLedsBSet";
1845 auto result = manager.setGroupState(group, false, ledsAssert,
1846 ledsDeAssert);
1847 EXPECT_EQ(false, result);
1848 EXPECT_EQ(0, ledsDeAssert.size());
1849 EXPECT_EQ(0, ledsAssert.size());
1850 }
1851 }
1852