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