Add test to confirm fetcher behavior with lots of sends.
We want to make sure that when a fetcher gets behind, it catches back up
in a predictable manner.
Change-Id: I11e4ec3fb37a236e955fceb9ee7d791032abe5cd
diff --git a/aos/events/event-loop_param_test.cc b/aos/events/event-loop_param_test.cc
index 0a10ecb..d6f41ab 100644
--- a/aos/events/event-loop_param_test.cc
+++ b/aos/events/event-loop_param_test.cc
@@ -617,5 +617,41 @@
1.0, 0.1);
}
+// Verify that sending lots and lots of messages and using FetchNext gets a
+// contiguous block of messages and doesn't crash.
+// TODO(austin): We should store the same number of messages in simulation and
+// reality.
+TEST_P(AbstractEventLoopTest, LotsOfSends) {
+ auto loop1 = MakePrimary();
+ auto loop2 = Make();
+ auto sender = loop1->MakeSender<TestMessage>("/test");
+ auto fetcher = loop2->MakeFetcher<TestMessage>("/test");
+
+ auto test_timer = loop1->AddTimer([&sender, &fetcher, &loop1]() {
+ for (int i = 0; i < 100000; ++i) {
+ auto msg = sender.MakeMessage();
+ msg->msg_value = i;
+ msg.Send();
+ }
+
+ int last = 0;
+ if (fetcher.FetchNext()) {
+ last = fetcher->msg_value;
+ }
+ while (fetcher.FetchNext()) {
+ EXPECT_EQ(last + 1, fetcher->msg_value);
+ ++last;
+ }
+
+ loop1->Exit();
+ });
+
+ loop1->OnRun([&test_timer, &loop1]() {
+ test_timer->Setup(loop1->monotonic_now() + ::std::chrono::milliseconds(10));
+ });
+
+ Run();
+}
+
} // namespace testing
} // namespace aos