10 #include "gtest/gtest.h"
14 #include <unordered_map>
24 TEST(PriorityMuxBase, OneOutput)
26 auto log = std::make_shared<cras::MemoryLogHelper>();
28 std::unordered_map<std::string, cras::priority_mux::TopicConfig> topicConfigs = {
29 {
"o1p10", {
"o1p10",
"o1p10",
"o1", 10, {1, 0}}},
30 {
"o1p20", {
"o1p20",
"o1p20",
"o1", 20, {1, 0}}},
31 {
"o1p30", {
"o1p30",
"o1p30",
"o1", 30, {1, 0}}},
34 std::string timerName;
36 bool timerCalled {
false};
37 auto setTimer = [&](
const std::string& name,
const ros::Duration& timeout)
40 timerTimeout = timeout;
46 EXPECT_EQ(0, mux.getActivePriority());
47 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
48 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
49 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
54 EXPECT_EQ(10, mux.getActivePriority());
55 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
56 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
57 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
58 EXPECT_EQ(
"o1p10", timerName);
68 EXPECT_EQ(10, mux.getActivePriority());
69 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
70 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
71 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
72 EXPECT_FALSE(timerCalled);
77 EXPECT_EQ(0, mux.getActivePriority());
78 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
79 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
80 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
81 EXPECT_FALSE(timerCalled);
86 EXPECT_EQ(10, mux.getActivePriority());
87 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
88 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
89 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
90 EXPECT_EQ(
"o1p10", timerName);
100 EXPECT_EQ(10, mux.getActivePriority());
101 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
102 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
103 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
104 EXPECT_EQ(
"o1p10", timerName);
114 EXPECT_EQ(30, mux.getActivePriority());
115 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
116 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
117 EXPECT_EQ(
"o1p30", mux.getLastSelectedTopics().at(
"o1"));
118 EXPECT_EQ(
"o1p30", timerName);
128 EXPECT_EQ(30, mux.getActivePriority());
129 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
130 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
131 EXPECT_EQ(
"o1p30", mux.getLastSelectedTopics().at(
"o1"));
132 EXPECT_EQ(
"o1p10", timerName);
135 timerName = {}; timerTimeout = {}; timerCalled =
false;
140 EXPECT_EQ(30, mux.getActivePriority());
141 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
142 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
143 EXPECT_EQ(
"o1p30", mux.getLastSelectedTopics().at(
"o1"));
144 EXPECT_EQ(
"o1p20", timerName);
154 EXPECT_EQ(20, mux.getActivePriority());
155 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
156 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
157 EXPECT_EQ(
"o1p20", mux.getLastSelectedTopics().at(
"o1"));
158 EXPECT_FALSE(timerCalled);
163 EXPECT_EQ(20, mux.getActivePriority());
164 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
165 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
166 EXPECT_EQ(
"o1p20", mux.getLastSelectedTopics().at(
"o1"));
167 EXPECT_EQ(
"o1p20", timerName);
177 EXPECT_EQ(0, mux.getActivePriority());
178 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
179 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
180 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
181 EXPECT_FALSE(timerCalled);
184 TEST(PriorityMuxBase, OneOutputLongTimeout)
186 auto log = std::make_shared<cras::MemoryLogHelper>();
188 std::unordered_map<std::string, cras::priority_mux::TopicConfig> topicConfigs = {
189 {
"o1p10", {
"o1p10",
"o1p10",
"o1", 10, {10, 0}}},
190 {
"o1p20", {
"o1p20",
"o1p20",
"o1", 20, {1, 0}}},
193 std::string timerName;
195 bool timerCalled {
false};
196 auto setTimer = [&](
const std::string& name,
const ros::Duration& timeout)
199 timerTimeout = timeout;
208 EXPECT_EQ(10, mux.getActivePriority());
209 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
210 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
211 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
212 EXPECT_EQ(
"o1p10", timerName);
222 EXPECT_EQ(20, mux.getActivePriority());
223 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
224 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
225 EXPECT_EQ(
"o1p20", mux.getLastSelectedTopics().at(
"o1"));
226 EXPECT_EQ(
"o1p20", timerName);
236 EXPECT_EQ(20, mux.getActivePriority());
237 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
238 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
239 EXPECT_EQ(
"o1p20", mux.getLastSelectedTopics().at(
"o1"));
240 EXPECT_FALSE(timerCalled);
245 EXPECT_EQ(10, mux.getActivePriority());
246 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
247 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
248 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
249 EXPECT_FALSE(timerCalled);
254 EXPECT_EQ(20, mux.getActivePriority());
255 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
256 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
257 EXPECT_EQ(
"o1p20", mux.getLastSelectedTopics().at(
"o1"));
258 EXPECT_EQ(
"o1p20", timerName);
268 EXPECT_EQ(10, mux.getActivePriority());
269 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
270 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
271 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
272 EXPECT_FALSE(timerCalled);
277 EXPECT_EQ(0, mux.getActivePriority());
278 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
279 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
280 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
281 EXPECT_EQ(
"__disable_o1p10", timerName);
284 timerName = {}; timerTimeout = {}; timerCalled =
false;
289 EXPECT_EQ(0, mux.getActivePriority());
290 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
291 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
292 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
293 EXPECT_FALSE(timerCalled);
296 TEST(PriorityMuxBase, DelayedMessages)
298 auto log = std::make_shared<cras::MemoryLogHelper>();
300 std::unordered_map<std::string, cras::priority_mux::TopicConfig> topicConfigs = {
301 {
"o1p10", {
"o1p10",
"o1p10",
"o1", 10, {10, 0}}},
302 {
"o1p20", {
"o1p20",
"o1p20",
"o1", 20, {1, 0}}},
305 std::string timerName;
307 bool timerCalled {
false};
308 auto setTimer = [&](
const std::string& name,
const ros::Duration& timeout)
311 timerTimeout = timeout;
322 EXPECT_EQ(10, mux.getActivePriority());
323 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
324 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
325 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
326 EXPECT_EQ(
"o1p10", timerName);
336 EXPECT_EQ(10, mux.getActivePriority());
337 ASSERT_EQ(1u, mux.getLastSelectedTopics().size());
338 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
339 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
340 EXPECT_FALSE(timerCalled);
343 TEST(PriorityMuxBase, OneOutputAndLock)
345 auto log = std::make_shared<cras::MemoryLogHelper>();
347 std::unordered_map<std::string, cras::priority_mux::TopicConfig> topicConfigs = {
348 {
"o1p10", {
"o1p10",
"o1p10",
"o1", 10, {10, 0}}},
349 {
"o1p20", {
"o1p20",
"o1p20",
"o1", 20, {1, 0}}},
352 std::unordered_map<std::string, cras::priority_mux::LockConfig> lockConfigs = {
353 {
"l15", {
"l15",
"l15", 15, {1, 0}}},
354 {
"l17", {
"l17",
"l17", 17, {0, 0}}},
357 std::string timerName;
359 bool timerCalled {
false};
360 auto setTimer = [&](
const std::string& name,
const ros::Duration& timeout)
363 timerTimeout = timeout;
376 EXPECT_EQ(
"o1p10", timerName);
390 EXPECT_EQ(
"l15", timerName);
404 EXPECT_FALSE(timerCalled);
413 EXPECT_EQ(
"o1p20", timerName);
427 EXPECT_EQ(
"l15", timerName);
441 EXPECT_FALSE(timerCalled);
450 EXPECT_FALSE(timerCalled);
459 EXPECT_FALSE(timerCalled);
468 EXPECT_FALSE(timerCalled);
471 TEST(PriorityMuxBase, MultiOutputs)
473 auto log = std::make_shared<cras::MemoryLogHelper>();
475 std::unordered_map<std::string, cras::priority_mux::TopicConfig> topicConfigs = {
476 {
"o1p10", {
"o1p10",
"o1p10",
"o1", 10, {10, 0}}},
477 {
"o1p20", {
"o1p20",
"o1p20",
"o1", 20, {1, 0}}},
478 {
"o2p10", {
"o2p10",
"o2p10",
"o2", 10, {1, 0}}},
479 {
"o2p20", {
"o2p20",
"o2p20",
"o2", 20, {1, 0}}},
480 {
"o2p30", {
"o2p30",
"o2p30",
"o2", 30, {1, 0}}},
481 {
"o3p10", {
"o3p10",
"o3p10",
"o3", 10, {10, 0}}},
482 {
"o3p20", {
"o3p20",
"o3p20",
"o3", 20, {10, 0}}},
483 {
"o3p30", {
"o3p30",
"o3p30",
"o3", 30, {10, 0}}},
487 ASSERT_EQ(3u, mux.getLastSelectedTopics().size());
488 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
489 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o2"));
490 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o3"));
494 EXPECT_EQ(10, mux.getActivePriority());
495 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
496 EXPECT_EQ(
"o2p10", mux.getLastSelectedTopics().at(
"o2"));
497 EXPECT_EQ(
"o3p10", mux.getLastSelectedTopics().at(
"o3"));
501 EXPECT_EQ(30, mux.getActivePriority());
502 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
503 EXPECT_EQ(
"o2p30", mux.getLastSelectedTopics().at(
"o2"));
504 EXPECT_EQ(
"o3p30", mux.getLastSelectedTopics().at(
"o3"));
508 EXPECT_EQ(30, mux.getActivePriority());
509 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
510 EXPECT_EQ(
"o2p30", mux.getLastSelectedTopics().at(
"o2"));
511 EXPECT_EQ(
"o3p30", mux.getLastSelectedTopics().at(
"o3"));
515 EXPECT_EQ(20, mux.getActivePriority());
516 EXPECT_EQ(
"o1p20", mux.getLastSelectedTopics().at(
"o1"));
517 EXPECT_EQ(
"o2p20", mux.getLastSelectedTopics().at(
"o2"));
518 EXPECT_EQ(
"o3p20", mux.getLastSelectedTopics().at(
"o3"));
522 EXPECT_EQ(10, mux.getActivePriority());
523 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
524 EXPECT_EQ(
"o2p10", mux.getLastSelectedTopics().at(
"o2"));
525 EXPECT_EQ(
"o3p10", mux.getLastSelectedTopics().at(
"o3"));
529 EXPECT_EQ(0, mux.getActivePriority());
530 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
531 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
532 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
536 TEST(PriorityMuxBase, MultiOutputsWithLocks)
538 auto log = std::make_shared<cras::MemoryLogHelper>();
540 std::unordered_map<std::string, cras::priority_mux::TopicConfig> topicConfigs = {
541 {
"o1p10", {
"o1p10",
"o1p10",
"o1", 10, {10, 0}}},
542 {
"o1p20", {
"o1p20",
"o1p20",
"o1", 20, {1, 0}}},
543 {
"o2p10", {
"o2p10",
"o2p10",
"o2", 10, {1, 0}}},
544 {
"o2p20", {
"o2p20",
"o2p20",
"o2", 20, {1, 0}}},
545 {
"o2p30", {
"o2p30",
"o2p30",
"o2", 30, {1, 0}}},
546 {
"o3p10", {
"o3p10",
"o3p10",
"o3", 10, {10, 0}}},
547 {
"o3p20", {
"o3p20",
"o3p20",
"o3", 20, {10, 0}}},
548 {
"o3p30", {
"o3p30",
"o3p30",
"o3", 30, {10, 0}}},
551 std::unordered_map<std::string, cras::priority_mux::LockConfig> lockConfigs = {
552 {
"l15", {
"l15",
"l15", 15, {1, 0}}},
553 {
"l50", {
"l50",
"l50", 50, {0, 0}}},
557 ASSERT_EQ(3u, mux.getLastSelectedTopics().size());
558 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o1"));
559 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o2"));
560 ASSERT_NE(mux.getLastSelectedTopics().end(), mux.getLastSelectedTopics().find(
"o3"));
565 EXPECT_EQ(15, mux.getActivePriority());
566 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
567 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
568 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
572 EXPECT_EQ(10, mux.getActivePriority());
573 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
574 EXPECT_EQ(
"o2p10", mux.getLastSelectedTopics().at(
"o2"));
575 EXPECT_EQ(
"o3p10", mux.getLastSelectedTopics().at(
"o3"));
579 EXPECT_EQ(30, mux.getActivePriority());
580 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
581 EXPECT_EQ(
"o2p30", mux.getLastSelectedTopics().at(
"o2"));
582 EXPECT_EQ(
"o3p30", mux.getLastSelectedTopics().at(
"o3"));
586 EXPECT_EQ(30, mux.getActivePriority());
587 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
588 EXPECT_EQ(
"o2p30", mux.getLastSelectedTopics().at(
"o2"));
589 EXPECT_EQ(
"o3p30", mux.getLastSelectedTopics().at(
"o3"));
593 EXPECT_EQ(50, mux.getActivePriority());
594 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
595 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
596 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
600 EXPECT_EQ(50, mux.getActivePriority());
601 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
602 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
603 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
607 EXPECT_EQ(20, mux.getActivePriority());
608 EXPECT_EQ(
"o1p20", mux.getLastSelectedTopics().at(
"o1"));
609 EXPECT_EQ(
"o2p20", mux.getLastSelectedTopics().at(
"o2"));
610 EXPECT_EQ(
"o3p20", mux.getLastSelectedTopics().at(
"o3"));
614 EXPECT_EQ(15, mux.getActivePriority());
615 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
616 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
617 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
621 EXPECT_EQ(10, mux.getActivePriority());
622 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
623 EXPECT_EQ(
"o2p10", mux.getLastSelectedTopics().at(
"o2"));
624 EXPECT_EQ(
"o3p10", mux.getLastSelectedTopics().at(
"o3"));
628 EXPECT_EQ(10, mux.getActivePriority());
629 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
630 EXPECT_EQ(
"o2p10", mux.getLastSelectedTopics().at(
"o2"));
631 EXPECT_EQ(
"o3p10", mux.getLastSelectedTopics().at(
"o3"));
635 EXPECT_EQ(0, mux.getActivePriority());
636 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
637 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
638 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
642 EXPECT_EQ(0, mux.getActivePriority());
643 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
644 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
645 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
649 EXPECT_EQ(10, mux.getActivePriority());
650 EXPECT_EQ(
"o1p10", mux.getLastSelectedTopics().at(
"o1"));
651 EXPECT_EQ(
"o2p10", mux.getLastSelectedTopics().at(
"o2"));
652 EXPECT_EQ(
"o3p10", mux.getLastSelectedTopics().at(
"o3"));
656 EXPECT_EQ(15, mux.getActivePriority());
657 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
658 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
659 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
663 EXPECT_EQ(0, mux.getActivePriority());
664 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o1"));
665 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o2"));
666 EXPECT_EQ(
"__none", mux.getLastSelectedTopics().at(
"o3"));
669 int main(
int argc,
char** argv)
671 testing::InitGoogleTest(&argc, argv);
672 return RUN_ALL_TESTS();