blob: 39609bc24785e3adf0d2103bf2876834cfc5ae76 [file] [log] [blame]
brians343bc112013-02-10 01:53:46 +00001#include <unistd.h>
2
3#include <memory>
4
5#include "gtest/gtest.h"
6#define __TEST_VXWORKS__
7#include "aos/common/test_queue.q.h"
8
9using ::aos::time::Time;
10
11namespace aos {
12namespace common {
13namespace testing {
14
15class CRIOQueueTest : public ::testing::Test {
16 protected:
17 // Create a new instance of the test queue that is fresh.
18 ::aos::Queue<TestingMessage> my_test_queue;
19
20 CRIOQueueTest() : my_test_queue(".aos.common.testing.test_queue") {}
21};
22
23// Tests that we can send a message with the message pointer and get it back.
24TEST_F(CRIOQueueTest, SendMessage) {
25 ScopedMessagePtr<TestingMessage> msg = my_test_queue.MakeMessage();
26 msg->test_bool = true;
27 msg->test_int = 0x971;
28 msg.Send();
29
30 my_test_queue.FetchLatest();
31 EXPECT_TRUE(my_test_queue->test_bool);
32 EXPECT_EQ(0x971, my_test_queue->test_int);
33}
34
35// Tests that we can send a message with the builder and get it back.
36TEST_F(CRIOQueueTest, SendWithBuilder) {
37 my_test_queue.MakeWithBuilder().test_bool(true).test_int(0x971).Send();
38
39 my_test_queue.FetchLatest();
40 EXPECT_EQ(true, my_test_queue->test_bool);
41 EXPECT_EQ(0x971, my_test_queue->test_int);
42 EXPECT_EQ(true, my_test_queue.IsNewerThanMS(10000));
43}
44
45// Tests that various pointer deref functions at least seem to work.
46TEST_F(CRIOQueueTest, PointerDeref) {
47 my_test_queue.MakeWithBuilder().test_bool(true).test_int(0x971).Send();
48
49 my_test_queue.FetchLatest();
50 const TestingMessage *msg_ptr = my_test_queue.get();
51 ASSERT_NE(static_cast<TestingMessage*>(NULL), msg_ptr);
52 EXPECT_EQ(0x971, msg_ptr->test_int);
53 EXPECT_EQ(msg_ptr, &(*my_test_queue));
54}
55
56// Tests that FetchLatest skips a missing message.
57TEST_F(CRIOQueueTest, FetchLatest) {
58 my_test_queue.MakeWithBuilder().test_bool(true).test_int(0x254).Send();
59 my_test_queue.MakeWithBuilder().test_bool(true).test_int(0x971).Send();
60
61 my_test_queue.FetchLatest();
62 EXPECT_EQ(0x971, my_test_queue->test_int);
63}
64
65// Tests that age makes some sense.
66TEST_F(CRIOQueueTest, Age) {
67 my_test_queue.MakeWithBuilder().test_bool(true).test_int(0x971).Send();
68
69 my_test_queue.FetchLatest();
70 EXPECT_TRUE(my_test_queue.IsNewerThanMS(100));
71 const Time age = my_test_queue.Age();
72 EXPECT_EQ(0, age.sec());
73 EXPECT_GE(100000000, age.nsec());
74}
75
76
77class CRIOMessageTest : public ::testing::Test {
78 public:
79 TestingMessage msg;
80};
81
82TEST_F(CRIOMessageTest, Zeroing) {
83 msg.test_bool = true;
84 msg.test_int = 0x254;
85 msg.SetTimeToNow();
86
87 msg.Zero();
88
89 EXPECT_FALSE(msg.test_bool);
90 EXPECT_EQ(0, msg.test_int);
91 EXPECT_EQ(0, msg.sent_time.sec());
92 EXPECT_EQ(0, msg.sent_time.nsec());
93}
94
95TEST_F(CRIOMessageTest, Size) {
96 EXPECT_EQ(static_cast<size_t>(13), msg.Size());
97}
98
99TEST_F(CRIOMessageTest, Serialize) {
100 char serialized_data[msg.Size()];
101 msg.test_bool = true;
102 msg.test_int = 0x254;
103 msg.SetTimeToNow();
104
105 msg.Serialize(serialized_data);
106
107 TestingMessage new_msg;
108 new_msg.Deserialize(serialized_data);
109
110 EXPECT_EQ(msg.test_bool, new_msg.test_bool);
111 EXPECT_EQ(msg.test_int, new_msg.test_int);
112 EXPECT_EQ(msg.sent_time, new_msg.sent_time);
113}
114
115TEST_F(CRIOMessageTest, SetNow) {
116 msg.SetTimeToNow();
117 EXPECT_LE(msg.sent_time - Time::Now(), Time::InMS(20));
118}
119
120} // namespace testing
121} // namespace common
122} // namespace aos