summaryrefslogtreecommitdiffstats
path: root/logd/src/tests/proto_converter
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-03-26 13:21:00 +0000
committerGeir Storli <geirst@verizonmedia.com>2019-03-26 13:21:00 +0000
commit5122da83d68dbe235e144c99559d32761067f363 (patch)
treed8689cc1157fbef9176efb38f6084fa3f2145422 /logd/src/tests/proto_converter
parent6b1974f67ee5bb2bfd374d64ee217c1fe5204d07 (diff)
Implement functions for converting log messages to protobuf objects.
Diffstat (limited to 'logd/src/tests/proto_converter')
-rw-r--r--logd/src/tests/proto_converter/CMakeLists.txt9
-rw-r--r--logd/src/tests/proto_converter/proto_converter_test.cpp88
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()
+