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