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