blob: 2166cea51d23033a365843cc6c1e136d3ea6330e [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}
37} // namespace aos::util::testing