phosphor-logging: add rsyslog configuration for TCP, UDP

Add possibility to set TCP or UDP as transport protocol for rsyslog
configuration.

Depends on change of dbus interfaces in:
https://gerrit.openbmc.org/c/openbmc/phosphor-dbus-interfaces/+/64224

Tested: "@" set for UDP and "@@" for TCP in configuration file.

Change-Id: Ie849fb64b5e6cc8d87d7a984cd4d326e39aeb4ea
Signed-off-by: Ivan Mikhaylov <fr0st61te@gmail.com>
diff --git a/test/remote_logging_test_config.cpp b/test/remote_logging_test_config.cpp
index f21904b..b48185a 100644
--- a/test/remote_logging_test_config.cpp
+++ b/test/remote_logging_test_config.cpp
@@ -8,7 +8,8 @@
 
 namespace rsyslog_config::internal
 {
-extern std::optional<std::pair<std::string, uint32_t>>
+extern std::optional<
+    std::tuple<std::string, uint32_t, NetworkClient::TransportProtocol>>
     parseConfig(std::istream& ss);
 }
 
@@ -76,8 +77,8 @@
     std::stringstream ss(str);
     auto ret = phosphor::rsyslog_config::internal::parseConfig(ss);
     EXPECT_TRUE(ret);
-    EXPECT_EQ(ret->first, "abcd:ef01::01");
-    EXPECT_EQ(ret->second, 50000);
+    EXPECT_EQ(std::get<0>(*ret), "abcd:ef01::01");
+    EXPECT_EQ(std::get<1>(*ret), 50000);
 }
 
 TEST_F(TestRemoteLogging, parseConfigBadIpv6WithoutRightBracket)
@@ -134,6 +135,38 @@
     EXPECT_FALSE(ret);
 }
 
+TEST_F(TestRemoteLogging, parseConfigTCP)
+{
+    // A good case
+    std::string str = "*.* @@[abcd:ef01::01]:50000";
+    std::stringstream ss(str);
+    auto ret = phosphor::rsyslog_config::internal::parseConfig(ss);
+    EXPECT_TRUE(ret);
+    EXPECT_EQ(std::get<2>(*ret),
+              phosphor::rsyslog_config::NetworkClient::TransportProtocol::TCP);
+}
+
+TEST_F(TestRemoteLogging, parseConfigUdp)
+{
+    // A good case
+    std::string str = "*.* @[abcd:ef01::01]:50000";
+    std::stringstream ss(str);
+    auto ret = phosphor::rsyslog_config::internal::parseConfig(ss);
+    EXPECT_TRUE(ret);
+    EXPECT_EQ(std::get<2>(*ret),
+              phosphor::rsyslog_config::NetworkClient::TransportProtocol::UDP);
+}
+
+TEST_F(TestRemoteLogging, createUdpConfig)
+{
+    // A good case
+    config->address("abcd:ef01::01");
+    config->port(50000);
+    config->transportProtocol(
+        phosphor::rsyslog_config::NetworkClient::TransportProtocol::UDP);
+    EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* @[abcd:ef01::01]:50000");
+}
+
 } // namespace test
 } // namespace logging
 } // namespace phosphor