aboutsummaryrefslogtreecommitdiff
path: root/pw_log/proto_utils_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pw_log/proto_utils_test.cc')
-rw-r--r--pw_log/proto_utils_test.cc169
1 files changed, 142 insertions, 27 deletions
diff --git a/pw_log/proto_utils_test.cc b/pw_log/proto_utils_test.cc
index 9e3c22043..7b018006d 100644
--- a/pw_log/proto_utils_test.cc
+++ b/pw_log/proto_utils_test.cc
@@ -17,6 +17,7 @@
#include "gtest/gtest.h"
#include "pw_bytes/span.h"
#include "pw_log/levels.h"
+#include "pw_log/proto/log.pwpb.h"
#include "pw_protobuf/bytes_utils.h"
#include "pw_protobuf/decoder.h"
@@ -25,10 +26,12 @@ namespace pw::log {
void VerifyTokenizedLogEntry(pw::protobuf::Decoder& entry_decoder,
pw::log_tokenized::Metadata expected_metadata,
ConstByteSpan expected_tokenized_data,
- const int64_t expected_timestamp) {
+ const int64_t expected_timestamp,
+ ConstByteSpan expected_thread_name) {
ConstByteSpan tokenized_data;
EXPECT_TRUE(entry_decoder.Next().ok()); // message [tokenized]
- EXPECT_EQ(1U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::MESSAGE));
EXPECT_TRUE(entry_decoder.ReadBytes(&tokenized_data).ok());
EXPECT_TRUE(std::memcmp(tokenized_data.begin(),
expected_tokenized_data.begin(),
@@ -36,7 +39,8 @@ void VerifyTokenizedLogEntry(pw::protobuf::Decoder& entry_decoder,
uint32_t line_level;
EXPECT_TRUE(entry_decoder.Next().ok()); // line_level
- EXPECT_EQ(2U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::LINE_LEVEL));
EXPECT_TRUE(entry_decoder.ReadUint32(&line_level).ok());
uint32_t line_number;
@@ -48,38 +52,57 @@ void VerifyTokenizedLogEntry(pw::protobuf::Decoder& entry_decoder,
if (expected_metadata.flags() != 0) {
uint32_t flags;
EXPECT_TRUE(entry_decoder.Next().ok()); // flags
- EXPECT_EQ(3U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::FLAGS));
EXPECT_TRUE(entry_decoder.ReadUint32(&flags).ok());
EXPECT_EQ(expected_metadata.flags(), flags);
}
int64_t timestamp;
EXPECT_TRUE(entry_decoder.Next().ok()); // timestamp
- EXPECT_EQ(4U, entry_decoder.FieldNumber());
+ EXPECT_TRUE(
+ entry_decoder.FieldNumber() ==
+ static_cast<uint32_t>(log::LogEntry::Fields::TIMESTAMP) ||
+ entry_decoder.FieldNumber() ==
+ static_cast<uint32_t>(log::LogEntry::Fields::TIME_SINCE_LAST_ENTRY));
EXPECT_TRUE(entry_decoder.ReadInt64(&timestamp).ok());
EXPECT_EQ(expected_timestamp, timestamp);
if (expected_metadata.module() != 0) {
EXPECT_TRUE(entry_decoder.Next().ok()); // module name
- EXPECT_EQ(7U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::MODULE));
const Result<uint32_t> module =
protobuf::DecodeBytesToUint32(entry_decoder);
ASSERT_TRUE(module.ok());
EXPECT_EQ(expected_metadata.module(), module.value());
}
+
+ if (!expected_thread_name.empty()) {
+ ConstByteSpan tokenized_thread_name;
+ EXPECT_TRUE(entry_decoder.Next().ok()); // thread [tokenized]
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::THREAD));
+ EXPECT_TRUE(entry_decoder.ReadBytes(&tokenized_thread_name).ok());
+ EXPECT_TRUE(std::memcmp(tokenized_thread_name.begin(),
+ expected_thread_name.begin(),
+ expected_thread_name.size()) == 0);
+ }
}
void VerifyLogEntry(pw::protobuf::Decoder& entry_decoder,
int expected_level,
unsigned int expected_flags,
std::string_view expected_module,
+ std::string_view expected_thread_name,
std::string_view expected_file_name,
int expected_line_number,
int64_t expected_ticks_since_epoch,
std::string_view expected_message) {
std::string_view message;
EXPECT_TRUE(entry_decoder.Next().ok()); // message
- EXPECT_EQ(1U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::MESSAGE));
EXPECT_TRUE(entry_decoder.ReadString(&message).ok());
EXPECT_TRUE(std::equal(message.begin(),
message.end(),
@@ -88,7 +111,8 @@ void VerifyLogEntry(pw::protobuf::Decoder& entry_decoder,
uint32_t line_level;
EXPECT_TRUE(entry_decoder.Next().ok()); // line_level
- EXPECT_EQ(2U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::LINE_LEVEL));
EXPECT_TRUE(entry_decoder.ReadUint32(&line_level).ok());
uint32_t line_number;
uint8_t level;
@@ -99,21 +123,27 @@ void VerifyLogEntry(pw::protobuf::Decoder& entry_decoder,
if (expected_flags != 0) {
uint32_t flags;
EXPECT_TRUE(entry_decoder.Next().ok()); // flags
- EXPECT_EQ(3U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::FLAGS));
EXPECT_TRUE(entry_decoder.ReadUint32(&flags).ok());
EXPECT_EQ(expected_flags, flags);
}
int64_t timestamp;
EXPECT_TRUE(entry_decoder.Next().ok()); // timestamp
- EXPECT_EQ(4U, entry_decoder.FieldNumber());
+ EXPECT_TRUE(
+ entry_decoder.FieldNumber() ==
+ static_cast<uint32_t>(log::LogEntry::Fields::TIMESTAMP) ||
+ entry_decoder.FieldNumber() ==
+ static_cast<uint32_t>(log::LogEntry::Fields::TIME_SINCE_LAST_ENTRY));
EXPECT_TRUE(entry_decoder.ReadInt64(&timestamp).ok());
EXPECT_EQ(expected_ticks_since_epoch, timestamp);
if (!expected_module.empty()) {
std::string_view module_name;
EXPECT_TRUE(entry_decoder.Next().ok()); // module
- EXPECT_EQ(7U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::MODULE));
EXPECT_TRUE(entry_decoder.ReadString(&module_name).ok());
EXPECT_TRUE(std::equal(module_name.begin(),
module_name.end(),
@@ -124,13 +154,26 @@ void VerifyLogEntry(pw::protobuf::Decoder& entry_decoder,
if (!expected_file_name.empty()) {
std::string_view file_name;
EXPECT_TRUE(entry_decoder.Next().ok()); // file
- EXPECT_EQ(8U, entry_decoder.FieldNumber());
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::FILE));
EXPECT_TRUE(entry_decoder.ReadString(&file_name).ok());
EXPECT_TRUE(std::equal(file_name.begin(),
file_name.end(),
expected_file_name.begin(),
expected_file_name.end()));
}
+
+ if (!expected_thread_name.empty()) {
+ std::string_view thread_name;
+ EXPECT_TRUE(entry_decoder.Next().ok()); // file
+ EXPECT_EQ(entry_decoder.FieldNumber(),
+ static_cast<uint32_t>(log::LogEntry::Fields::THREAD));
+ EXPECT_TRUE(entry_decoder.ReadString(&thread_name).ok());
+ EXPECT_TRUE(std::equal(thread_name.begin(),
+ thread_name.end(),
+ expected_thread_name.begin(),
+ expected_thread_name.end()));
+ }
}
TEST(UtilsTest, LineLevelPacking) {
@@ -172,61 +215,83 @@ TEST(UtilsTest, LineLevelPackAndUnpack) {
}
TEST(UtilsTest, EncodeTokenizedLog) {
- constexpr std::byte kTokenizedData[1] = {(std::byte)0x01};
+ constexpr std::byte kTokenizedData[1] = {std::byte(0x01)};
constexpr int64_t kExpectedTimestamp = 1;
+ constexpr std::byte kExpectedThreadName[1] = {std::byte(0x02)};
std::byte encode_buffer[32];
pw::log_tokenized::Metadata metadata =
pw::log_tokenized::Metadata::Set<1, 2, 3, 4>();
- Result<ConstByteSpan> result = EncodeTokenizedLog(
- metadata, kTokenizedData, kExpectedTimestamp, encode_buffer);
+ Result<ConstByteSpan> result = EncodeTokenizedLog(metadata,
+ kTokenizedData,
+ kExpectedTimestamp,
+ kExpectedThreadName,
+ encode_buffer);
EXPECT_TRUE(result.ok());
pw::protobuf::Decoder log_decoder(result.value());
- VerifyTokenizedLogEntry(
- log_decoder, metadata, kTokenizedData, kExpectedTimestamp);
+ VerifyTokenizedLogEntry(log_decoder,
+ metadata,
+ kTokenizedData,
+ kExpectedTimestamp,
+ kExpectedThreadName);
result = EncodeTokenizedLog(metadata,
reinterpret_cast<const uint8_t*>(kTokenizedData),
sizeof(kTokenizedData),
kExpectedTimestamp,
+ kExpectedThreadName,
encode_buffer);
EXPECT_TRUE(result.ok());
log_decoder.Reset(result.value());
- VerifyTokenizedLogEntry(
- log_decoder, metadata, kTokenizedData, kExpectedTimestamp);
+ VerifyTokenizedLogEntry(log_decoder,
+ metadata,
+ kTokenizedData,
+ kExpectedTimestamp,
+ kExpectedThreadName);
}
TEST(UtilsTest, EncodeTokenizedLog_EmptyFlags) {
- constexpr std::byte kTokenizedData[1] = {(std::byte)0x01};
+ constexpr std::byte kTokenizedData[1] = {std::byte(0x01)};
constexpr int64_t kExpectedTimestamp = 1;
+ constexpr std::byte kExpectedThreadName[1] = {std::byte(0x02)};
std::byte encode_buffer[32];
// Create an empty flags set.
pw::log_tokenized::Metadata metadata =
pw::log_tokenized::Metadata::Set<1, 2, 0, 4>();
- Result<ConstByteSpan> result = EncodeTokenizedLog(
- metadata, kTokenizedData, kExpectedTimestamp, encode_buffer);
+ Result<ConstByteSpan> result = EncodeTokenizedLog(metadata,
+ kTokenizedData,
+ kExpectedTimestamp,
+ kExpectedThreadName,
+ encode_buffer);
EXPECT_TRUE(result.ok());
pw::protobuf::Decoder log_decoder(result.value());
- VerifyTokenizedLogEntry(
- log_decoder, metadata, kTokenizedData, kExpectedTimestamp);
+ VerifyTokenizedLogEntry(log_decoder,
+ metadata,
+ kTokenizedData,
+ kExpectedTimestamp,
+ kExpectedThreadName);
}
TEST(UtilsTest, EncodeTokenizedLog_InsufficientSpace) {
- constexpr std::byte kTokenizedData[1] = {(std::byte)0x01};
+ constexpr std::byte kTokenizedData[1] = {std::byte(0x01)};
constexpr int64_t kExpectedTimestamp = 1;
+ constexpr std::byte kExpectedThreadName[1] = {std::byte(0x02)};
std::byte encode_buffer[1];
pw::log_tokenized::Metadata metadata =
pw::log_tokenized::Metadata::Set<1, 2, 3, 4>();
- Result<ConstByteSpan> result = EncodeTokenizedLog(
- metadata, kTokenizedData, kExpectedTimestamp, encode_buffer);
+ Result<ConstByteSpan> result = EncodeTokenizedLog(metadata,
+ kTokenizedData,
+ kExpectedTimestamp,
+ kExpectedThreadName,
+ encode_buffer);
EXPECT_TRUE(result.status().IsResourceExhausted());
}
@@ -234,6 +299,7 @@ TEST(UtilsTest, EncodeLog) {
constexpr int kExpectedLevel = PW_LOG_LEVEL_INFO;
constexpr unsigned int kExpectedFlags = 2;
constexpr std::string_view kExpectedModule("TST");
+ constexpr std::string_view kExpectedThread("thread");
constexpr std::string_view kExpectedFile("proto_test.cc");
constexpr int kExpectedLine = 14;
constexpr int64_t kExpectedTimestamp = 1;
@@ -243,6 +309,7 @@ TEST(UtilsTest, EncodeLog) {
Result<ConstByteSpan> result = EncodeLog(kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -255,6 +322,7 @@ TEST(UtilsTest, EncodeLog) {
kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -265,6 +333,7 @@ TEST(UtilsTest, EncodeLog_EmptyFlags) {
constexpr int kExpectedLevel = PW_LOG_LEVEL_INFO;
constexpr unsigned int kExpectedFlags = 0;
constexpr std::string_view kExpectedModule("TST");
+ constexpr std::string_view kExpectedThread("thread");
constexpr std::string_view kExpectedFile("proto_test.cc");
constexpr int kExpectedLine = 14;
constexpr int64_t kExpectedTimestamp = 1;
@@ -274,6 +343,7 @@ TEST(UtilsTest, EncodeLog_EmptyFlags) {
Result<ConstByteSpan> result = EncodeLog(kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -286,6 +356,7 @@ TEST(UtilsTest, EncodeLog_EmptyFlags) {
kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -296,6 +367,7 @@ TEST(UtilsTest, EncodeLog_EmptyFile) {
constexpr int kExpectedLevel = PW_LOG_LEVEL_INFO;
constexpr unsigned int kExpectedFlags = 0;
constexpr std::string_view kExpectedModule("TST");
+ constexpr std::string_view kExpectedThread("thread");
constexpr std::string_view kExpectedFile;
constexpr int kExpectedLine = 14;
constexpr int64_t kExpectedTimestamp = 1;
@@ -305,6 +377,7 @@ TEST(UtilsTest, EncodeLog_EmptyFile) {
Result<ConstByteSpan> result = EncodeLog(kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -317,6 +390,7 @@ TEST(UtilsTest, EncodeLog_EmptyFile) {
kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -327,6 +401,7 @@ TEST(UtilsTest, EncodeLog_EmptyModule) {
constexpr int kExpectedLevel = PW_LOG_LEVEL_INFO;
constexpr unsigned int kExpectedFlags = 3;
constexpr std::string_view kExpectedModule;
+ constexpr std::string_view kExpectedThread("thread");
constexpr std::string_view kExpectedFile("test.cc");
constexpr int kExpectedLine = 14;
constexpr int64_t kExpectedTimestamp = 1;
@@ -336,6 +411,41 @@ TEST(UtilsTest, EncodeLog_EmptyModule) {
Result<ConstByteSpan> result = EncodeLog(kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
+ kExpectedFile,
+ kExpectedLine,
+ kExpectedTimestamp,
+ kExpectedMessage,
+ encode_buffer);
+ EXPECT_TRUE(result.ok());
+
+ pw::protobuf::Decoder log_decoder(result.value());
+ VerifyLogEntry(log_decoder,
+ kExpectedLevel,
+ kExpectedFlags,
+ kExpectedModule,
+ kExpectedThread,
+ kExpectedFile,
+ kExpectedLine,
+ kExpectedTimestamp,
+ kExpectedMessage);
+}
+
+TEST(UtilsTest, EncodeLog_EmptyThread) {
+ constexpr int kExpectedLevel = PW_LOG_LEVEL_INFO;
+ constexpr unsigned int kExpectedFlags = 2;
+ constexpr std::string_view kExpectedModule("TST");
+ constexpr std::string_view kExpectedThread;
+ constexpr std::string_view kExpectedFile("proto_test.cc");
+ constexpr int kExpectedLine = 14;
+ constexpr int64_t kExpectedTimestamp = 1;
+ constexpr std::string_view kExpectedMessage("msg");
+ std::byte encode_buffer[64];
+
+ Result<ConstByteSpan> result = EncodeLog(kExpectedLevel,
+ kExpectedFlags,
+ kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -348,6 +458,7 @@ TEST(UtilsTest, EncodeLog_EmptyModule) {
kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -358,6 +469,7 @@ TEST(UtilsTest, EncodeLog_EmptyMessage) {
constexpr int kExpectedLevel = PW_LOG_LEVEL_INFO;
constexpr unsigned int kExpectedFlags = 0;
constexpr std::string_view kExpectedModule;
+ constexpr std::string_view kExpectedThread;
constexpr std::string_view kExpectedFile;
constexpr int kExpectedLine = 14;
constexpr int64_t kExpectedTimestamp = 1;
@@ -367,6 +479,7 @@ TEST(UtilsTest, EncodeLog_EmptyMessage) {
Result<ConstByteSpan> result = EncodeLog(kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,
@@ -380,6 +493,7 @@ TEST(UtilsTest, EncodeLog_InsufficientSpace) {
constexpr int kExpectedLevel = PW_LOG_LEVEL_INFO;
constexpr unsigned int kExpectedFlags = 0;
constexpr std::string_view kExpectedModule;
+ constexpr std::string_view kExpectedThread;
constexpr std::string_view kExpectedFile;
constexpr int kExpectedLine = 14;
constexpr int64_t kExpectedTimestamp = 1;
@@ -389,6 +503,7 @@ TEST(UtilsTest, EncodeLog_InsufficientSpace) {
Result<ConstByteSpan> result = EncodeLog(kExpectedLevel,
kExpectedFlags,
kExpectedModule,
+ kExpectedThread,
kExpectedFile,
kExpectedLine,
kExpectedTimestamp,