add multithreaded queue tests
Change-Id: Iaefefd110233ab07de9fad83fba868fa9c0459bb
diff --git a/aos/common/queue_test.cc b/aos/common/queue_test.cc
index 6d5dda6..310301d 100644
--- a/aos/common/queue_test.cc
+++ b/aos/common/queue_test.cc
@@ -78,6 +78,37 @@
EXPECT_EQ(true, my_test_queue.IsNewerThanMS(10000));
}
+// Tests that multiple queue instances don't break each other.
+TEST_F(QueueTest, MultipleQueues) {
+ my_test_queue.MakeWithBuilder().test_bool(true).test_int(0x971).Send();
+ ASSERT_TRUE(my_test_queue.FetchLatest());
+ EXPECT_TRUE(my_test_queue.get());
+
+ {
+ ::aos::Queue<TestingMessage> my_other_test_queue(
+ ".aos.common.testing.queue_name");
+ my_other_test_queue.MakeMessage();
+ EXPECT_FALSE(my_other_test_queue.FetchLatest());
+ EXPECT_FALSE(my_test_queue.FetchLatest());
+ }
+
+ EXPECT_TRUE(my_test_queue.get());
+}
+
+// Tests that using a queue from multiple threads works correctly.
+TEST_F(QueueTest, MultipleThreads) {
+ my_test_queue.MakeWithBuilder().test_bool(true).test_int(0x971).Send();
+ ASSERT_TRUE(my_test_queue.FetchLatest());
+ my_test_queue.MakeWithBuilder().test_bool(true).test_int(0x254).Send();
+ EXPECT_EQ(0x971, my_test_queue->test_int);
+
+ ::aos::util::FunctionThread::RunInOtherThread([this]() {
+ ASSERT_TRUE(my_test_queue.FetchLatest());
+ EXPECT_EQ(0x254, my_test_queue->test_int);
+ });
+ EXPECT_EQ(0x254, my_test_queue->test_int);
+}
+
// Makes sure that MakeWithBuilder zeros the message initially.
// This might randomly succeed sometimes, but it will fail with asan if it
// doesn't.