blob: 0a786bff841a7f553b60fd9f88033f23d29cfaee [file] [log] [blame]
James Kuszmaulcc94ed42022-08-24 11:36:17 -07001#include "aos/util/error_counter.h"
2
Philipp Schrader790cb542023-07-05 21:06:52 -07003#include "gtest/gtest.h"
4
James Kuszmaulcc94ed42022-08-24 11:36:17 -07005#include "aos/events/event_loop_generated.h"
6#include "aos/flatbuffers.h"
James Kuszmaulcc94ed42022-08-24 11:36:17 -07007
8namespace aos::util::testing {
9// Exercises the basic API for the ErrorCounter class, ensuring that everything
10// works in the normal case.
11TEST(ErrorCounterTest, ErrorCounter) {
12 ErrorCounter<aos::timing::SendError, aos::timing::SendErrorCount> counter;
13 flatbuffers::FlatBufferBuilder fbb;
14 fbb.ForceDefaults(true);
15 const flatbuffers::Offset<
16 flatbuffers::Vector<flatbuffers::Offset<aos::timing::SendErrorCount>>>
17 counts_offset = counter.Initialize(&fbb);
18 aos::timing::Sender::Builder builder(fbb);
19 builder.add_error_counts(counts_offset);
20 fbb.Finish(builder.Finish());
21 aos::FlatbufferDetachedBuffer<aos::timing::Sender> message = fbb.Release();
22 counter.set_mutable_vector(message.mutable_message()->mutable_error_counts());
23 counter.IncrementError(aos::timing::SendError::MESSAGE_SENT_TOO_FAST);
24 counter.IncrementError(aos::timing::SendError::MESSAGE_SENT_TOO_FAST);
25 counter.IncrementError(aos::timing::SendError::INVALID_REDZONE);
26 ASSERT_EQ(2u, message.message().error_counts()->size());
27 EXPECT_EQ(aos::timing::SendError::MESSAGE_SENT_TOO_FAST,
28 message.message().error_counts()->Get(0)->error());
29 EXPECT_EQ(2u, message.message().error_counts()->Get(0)->count());
30 EXPECT_EQ(aos::timing::SendError::INVALID_REDZONE,
31 message.message().error_counts()->Get(1)->error());
32 EXPECT_EQ(1u, message.message().error_counts()->Get(1)->count());
33
34 counter.ResetCounts();
35 EXPECT_EQ(0u, message.message().error_counts()->Get(0)->count());
36 EXPECT_EQ(0u, message.message().error_counts()->Get(1)->count());
37}
James Kuszmaulea1e8302023-02-20 16:19:53 -080038
39// Tests the ArrayErrorCounter
40TEST(ErrorCounterTest, ARrayErrorCounter) {
41 ArrayErrorCounter<aos::timing::SendError, aos::timing::SendErrorCount>
42 counter;
43 flatbuffers::FlatBufferBuilder fbb;
44 fbb.ForceDefaults(true);
45 counter.IncrementError(aos::timing::SendError::MESSAGE_SENT_TOO_FAST);
46 counter.IncrementError(aos::timing::SendError::MESSAGE_SENT_TOO_FAST);
47 counter.IncrementError(aos::timing::SendError::INVALID_REDZONE);
48 {
49 const flatbuffers::Offset<
50 flatbuffers::Vector<flatbuffers::Offset<aos::timing::SendErrorCount>>>
51 counts_offset = counter.PopulateCounts(&fbb);
52 aos::timing::Sender::Builder builder(fbb);
53 builder.add_error_counts(counts_offset);
54 fbb.Finish(builder.Finish());
55 aos::FlatbufferDetachedBuffer<aos::timing::Sender> message = fbb.Release();
56 ASSERT_EQ(2u, message.message().error_counts()->size());
57 EXPECT_EQ(aos::timing::SendError::MESSAGE_SENT_TOO_FAST,
58 message.message().error_counts()->Get(0)->error());
59 EXPECT_EQ(2u, message.message().error_counts()->Get(0)->count());
60 EXPECT_EQ(aos::timing::SendError::INVALID_REDZONE,
61 message.message().error_counts()->Get(1)->error());
62 EXPECT_EQ(1u, message.message().error_counts()->Get(1)->count());
63 }
64
65 counter.ResetCounts();
66 {
67 const flatbuffers::Offset<
68 flatbuffers::Vector<flatbuffers::Offset<aos::timing::SendErrorCount>>>
69 counts_offset = counter.PopulateCounts(&fbb);
70 aos::timing::Sender::Builder builder(fbb);
71 builder.add_error_counts(counts_offset);
72 fbb.Finish(builder.Finish());
73 aos::FlatbufferDetachedBuffer<aos::timing::Sender> message = fbb.Release();
74 ASSERT_EQ(2u, message.message().error_counts()->size());
75 EXPECT_EQ(0u, message.message().error_counts()->Get(0)->count());
76 EXPECT_EQ(0u, message.message().error_counts()->Get(1)->count());
77 }
78}
James Kuszmaulcc94ed42022-08-24 11:36:17 -070079} // namespace aos::util::testing