Add per channel storage durations

This lets us save images for less time than everything else, since they
are the main driver of queue memory usage.

Change-Id: I677791e20af6aedb0288d09cf5963b4dde30ecce
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/events/event_loop_param_test.cc b/aos/events/event_loop_param_test.cc
index 0d7794e..0559aae 100644
--- a/aos/events/event_loop_param_test.cc
+++ b/aos/events/event_loop_param_test.cc
@@ -3332,5 +3332,24 @@
   EXPECT_EQ(SendTestMessage(sender2), RawSender::Error::kMessagesSentTooFast);
 }
 
+// Tests that a longer storage durations store more messages.
+TEST_P(AbstractEventLoopTest, SendingTooFastWithLongDuration) {
+  auto loop1 = MakePrimary();
+
+  auto sender1 = loop1->MakeSender<TestMessage>("/test3");
+
+  // Send queue_size messages split between the senders.
+  const int queue_size =
+      configuration::QueueSize(loop1->configuration(), sender1.channel());
+  EXPECT_EQ(queue_size, 100 * 10);
+  for (int i = 0; i < queue_size; i++) {
+    ASSERT_EQ(SendTestMessage(sender1), RawSender::Error::kOk);
+  }
+
+  // Since queue_size messages have been sent, and little time has elapsed,
+  // this should return an error.
+  EXPECT_EQ(SendTestMessage(sender1), RawSender::Error::kMessagesSentTooFast);
+}
+
 }  // namespace testing
 }  // namespace aos