diff options
author | Geir Storli <geirst@verizonmedia.com> | 2019-03-26 13:21:00 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2019-03-26 13:21:00 +0000 |
commit | 5122da83d68dbe235e144c99559d32761067f363 (patch) | |
tree | d8689cc1157fbef9176efb38f6084fa3f2145422 /logd/src/tests | |
parent | 6b1974f67ee5bb2bfd374d64ee217c1fe5204d07 (diff) |
Implement functions for converting log messages to protobuf objects.
Diffstat (limited to 'logd/src/tests')
-rw-r--r-- | logd/src/tests/proto_converter/CMakeLists.txt | 9 | ||||
-rw-r--r-- | logd/src/tests/proto_converter/proto_converter_test.cpp | 88 |
2 files changed, 97 insertions, 0 deletions
diff --git a/logd/src/tests/proto_converter/CMakeLists.txt b/logd/src/tests/proto_converter/CMakeLists.txt new file mode 100644 index 00000000000..ee2b60c7ede --- /dev/null +++ b/logd/src/tests/proto_converter/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(logd_proto_converter_test_app TEST + SOURCES + proto_converter_test.cpp + DEPENDS + logd + gtest +) +vespa_add_test(NAME logd_proto_converter_test_app COMMAND logd_proto_converter_test_app) diff --git a/logd/src/tests/proto_converter/proto_converter_test.cpp b/logd/src/tests/proto_converter/proto_converter_test.cpp new file mode 100644 index 00000000000..aa0b00e34d6 --- /dev/null +++ b/logd/src/tests/proto_converter/proto_converter_test.cpp @@ -0,0 +1,88 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include <logd/proto_converter.h> +#include <vespa/vespalib/gtest/gtest.h> + +using ns_log::Logger; +using ns_log::LogMessage; + +using Converter = logdemon::ProtoConverter; +using ProtoLogLevel = logserver::protocol::protobuf::LogMessage_Level; + +struct LogMessageTest : public ::testing::Test { + LogMessage message; + Converter::ProtoLogMessage proto; + void convert() { + Converter::log_message_to_proto(message, proto); + } + void expect_log_level_converted(ProtoLogLevel proto_level, Logger::LogLevel message_level) { + message = LogMessage(1, "", 1, 1, "", "", message_level, ""); + convert(); + EXPECT_EQ(proto_level, proto.level()); + } +}; + +void +expect_proto_log_message_equal(int64_t exp_time_nanos, + const std::string& exp_hostname, + int32_t exp_process_id, + int32_t exp_thread_id, + const std::string& exp_service, + const std::string& exp_component, + ProtoLogLevel exp_level, + const std::string& exp_payload, + const Converter::ProtoLogMessage& proto) +{ + EXPECT_EQ(exp_time_nanos, proto.time_nanos()); + EXPECT_EQ(exp_hostname, proto.hostname()); + EXPECT_EQ(exp_process_id, proto.process_id()); + EXPECT_EQ(exp_thread_id, proto.thread_id()); + EXPECT_EQ(exp_service, proto.service()); + EXPECT_EQ(exp_component, proto.component()); + EXPECT_EQ(exp_level, proto.level()); + EXPECT_EQ(exp_payload, proto.payload()); +} + +TEST_F(LogMessageTest, log_message_is_converted) +{ + message = LogMessage(12345, "foo_host", 3, 5, "foo_service", "foo_component", Logger::info, "foo_payload"); + convert(); + expect_proto_log_message_equal(12345, "foo_host", 3, 5, "foo_service", "foo_component", + ProtoLogLevel::LogMessage_Level_INFO, "foo_payload", proto); +} + +TEST_F(LogMessageTest, log_levels_are_converted) +{ + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_FATAL, Logger::fatal); + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_ERROR, Logger::error); + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_WARNING, Logger::warning); + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_CONFIG, Logger::config); + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_INFO, Logger::info); + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_EVENT, Logger::event); + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_DEBUG, Logger::debug); + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_SPAM, Logger::spam); + expect_log_level_converted(ProtoLogLevel::LogMessage_Level_UNKNOWN, Logger::NUM_LOGLEVELS); +} + +struct LogRequestTest : public ::testing::Test { + std::vector<LogMessage> messages; + Converter::ProtoLogRequest proto; + void convert() { + Converter::log_messages_to_proto(messages, proto); + } +}; + +TEST_F(LogRequestTest, log_messages_are_converted_to_request) +{ + messages.emplace_back(12345, "foo_host", 3, 5, "foo_service", "foo_component", Logger::info, "foo_payload"); + messages.emplace_back(54321, "bar_host", 7, 9, "bar_service", "bar_component", Logger::event, "bar_payload"); + convert(); + EXPECT_EQ(2, proto.log_messages_size()); + expect_proto_log_message_equal(12345, "foo_host", 3, 5, "foo_service", "foo_component", + ProtoLogLevel::LogMessage_Level_INFO, "foo_payload", proto.log_messages(0)); + expect_proto_log_message_equal(54321, "bar_host", 7, 9, "bar_service", "bar_component", + ProtoLogLevel::LogMessage_Level_EVENT, "bar_payload", proto.log_messages(1)); +} + +GTEST_MAIN_RUN_ALL_TESTS() + |