#include "remote_logging_tests.hpp" #include #include namespace phosphor { namespace rsyslog_config::internal { extern std::optional< std::tuple> parseConfig(std::istream& ss); } namespace logging { namespace test { std::string getConfig(const char* filePath) { std::fstream stream(filePath, std::fstream::in); std::string line; std::getline(stream, line); return line; } TEST_F(TestRemoteLogging, testOnlyAddress) { config->address("1.1.1.1"); EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* /dev/null"); } TEST_F(TestRemoteLogging, testOnlyPort) { config->port(100); EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* /dev/null"); } TEST_F(TestRemoteLogging, testGoodConfig) { config->address("1.1.1.1"); config->port(100); EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* @@1.1.1.1:100"); } TEST_F(TestRemoteLogging, testClearAddress) { config->address("1.1.1.1"); config->port(100); EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* @@1.1.1.1:100"); config->address(""); EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* /dev/null"); } TEST_F(TestRemoteLogging, testClearPort) { config->address("1.1.1.1"); config->port(100); EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* @@1.1.1.1:100"); config->port(0); EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* /dev/null"); } TEST_F(TestRemoteLogging, testGoodIPv6Config) { config->address("abcd:ef01::01"); config->port(50000); EXPECT_EQ(getConfig(configFilePath.c_str()), "*.* @@[abcd:ef01::01]:50000"); } TEST_F(TestRemoteLogging, parseConfigGoodIpv6) { // 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<0>(*ret), "abcd:ef01::01"); EXPECT_EQ(std::get<1>(*ret), 50000); } TEST_F(TestRemoteLogging, parseConfigBadIpv6WithoutRightBracket) { // Bad case: without ] std::string str = "*.* @@[abcd:ef01::01:50000"; std::stringstream ss(str); auto ret = phosphor::rsyslog_config::internal::parseConfig(ss); EXPECT_FALSE(ret); } TEST_F(TestRemoteLogging, parseConfigBadIpv6WithoutLeftBracket) { // Bad case: without [ std::string str = "*.* @@abcd:ef01::01]:50000"; std::stringstream ss(str); auto ret = phosphor::rsyslog_config::internal::parseConfig(ss); EXPECT_FALSE(ret); } TEST_F(TestRemoteLogging, parseConfigBadIpv6WithoutPort) { // Bad case: without port std::string str = "*.* @@[abcd:ef01::01]:"; std::stringstream ss(str); auto ret = phosphor::rsyslog_config::internal::parseConfig(ss); EXPECT_FALSE(ret); } TEST_F(TestRemoteLogging, parseConfigBadIpv6InvalidPort) { // Bad case: without port std::string str = "*.* @@[abcd:ef01::01]:xxx"; std::stringstream ss(str); auto ret = phosphor::rsyslog_config::internal::parseConfig(ss); EXPECT_FALSE(ret); } TEST_F(TestRemoteLogging, parseConfigBadIpv6WihtoutColon) { // Bad case: invalid IPv6 address std::string str = "*.* @@[abcd:ef01::01]"; std::stringstream ss(str); auto ret = phosphor::rsyslog_config::internal::parseConfig(ss); EXPECT_FALSE(ret); } TEST_F(TestRemoteLogging, parseConfigBadEmpty) { // Bad case: invalid IPv6 address std::string str = ""; std::stringstream ss(str); auto ret = phosphor::rsyslog_config::internal::parseConfig(ss); 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