Allow multiple senders on the same channel
I will do this to allow giving the kernel multiple buffers for image
frames.
Also deduplicate some infrastructure between EventLoop implementations.
Change-Id: Ifd2c9a29747481ea36be1654960dcf86303a11f4
diff --git a/aos/events/event_loop_param_test.cc b/aos/events/event_loop_param_test.cc
index e1e05a2..b72a8e2 100644
--- a/aos/events/event_loop_param_test.cc
+++ b/aos/events/event_loop_param_test.cc
@@ -45,6 +45,47 @@
EXPECT_TRUE(happened);
}
+// Tests that watcher can receive messages from two senders.
+// Also tests that OnRun() works.
+TEST_P(AbstractEventLoopTest, BasicTwoSenders) {
+ auto loop1 = Make();
+ auto loop2 = MakePrimary();
+
+ aos::Sender<TestMessage> sender1 = loop1->MakeSender<TestMessage>("/test");
+ aos::Sender<TestMessage> sender2 = loop1->MakeSender<TestMessage>("/test");
+
+ bool happened = false;
+
+ loop2->OnRun([&]() {
+ happened = true;
+
+ {
+ aos::Sender<TestMessage>::Builder msg = sender1.MakeBuilder();
+ TestMessage::Builder builder = msg.MakeBuilder<TestMessage>();
+ builder.add_value(200);
+ ASSERT_TRUE(msg.Send(builder.Finish()));
+ }
+ {
+ aos::Sender<TestMessage>::Builder msg = sender2.MakeBuilder();
+ TestMessage::Builder builder = msg.MakeBuilder<TestMessage>();
+ builder.add_value(200);
+ ASSERT_TRUE(msg.Send(builder.Finish()));
+ }
+ });
+
+ int messages_received = 0;
+ loop2->MakeWatcher("/test", [&](const TestMessage &message) {
+ EXPECT_EQ(message.value(), 200);
+ this->Exit();
+ ++messages_received;
+ });
+
+ EXPECT_FALSE(happened);
+ Run();
+ EXPECT_TRUE(happened);
+ EXPECT_EQ(messages_received, 2);
+}
+
// Tests that a fetcher can fetch from a sender.
// Also tests that OnRun() works.
TEST_P(AbstractEventLoopTest, FetchWithoutRun) {