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