blob: b48185af393771bb937036b2cc9b38871dc2c79b [file] [log] [blame]
#include "remote_logging_tests.hpp"
#include <fstream>
#include <string>
namespace phosphor
{
namespace rsyslog_config::internal
{
extern std::optional<
std::tuple<std::string, uint32_t, NetworkClient::TransportProtocol>>
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