blob: 65936f5f3b58633aa4a8e49d2a6d03bb09e77dee [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2020 YADRO
#include "config.hpp"
#include <sys/un.h>
#include <gtest/gtest.h>
// Names of environment variables
static const char* SOCKET_ID = "SOCKET_ID";
static const char* MODE = "MODE";
static const char* BUF_MAXSIZE = "BUF_MAXSIZE";
static const char* BUF_MAXTIME = "BUF_MAXTIME";
static const char* FLUSH_FULL = "FLUSH_FULL";
static const char* HOST_STATE = "HOST_STATE";
static const char* OUT_DIR = "OUT_DIR";
static const char* MAX_FILES = "MAX_FILES";
static const char* STREAM_DST = "STREAM_DST";
/**
* @class ConfigTest
* @brief Configuration tests.
*/
class ConfigTest : public ::testing::Test
{
protected:
void SetUp() override
{
resetEnv();
}
void TearDown() override
{
resetEnv();
}
/** @brief Reset environment variables. */
void resetEnv() const
{
unsetenv(SOCKET_ID);
unsetenv(MODE);
unsetenv(BUF_MAXSIZE);
unsetenv(BUF_MAXTIME);
unsetenv(FLUSH_FULL);
unsetenv(HOST_STATE);
unsetenv(OUT_DIR);
unsetenv(MAX_FILES);
unsetenv(STREAM_DST);
}
};
TEST_F(ConfigTest, Defaults)
{
Config cfg;
EXPECT_STREQ(cfg.socketId, "");
EXPECT_EQ(cfg.mode, Mode::bufferMode);
EXPECT_EQ(cfg.bufMaxSize, 3000);
EXPECT_EQ(cfg.bufMaxTime, 0);
EXPECT_EQ(cfg.bufFlushFull, false);
EXPECT_STREQ(cfg.hostState, "/xyz/openbmc_project/state/host0");
EXPECT_STREQ(cfg.outDir, "/var/lib/obmc/hostlogs");
EXPECT_EQ(cfg.maxFiles, 10);
EXPECT_STREQ(cfg.streamDestination, "/run/rsyslog/console_input");
}
TEST_F(ConfigTest, LoadInBufferMode)
{
setenv(SOCKET_ID, "id123", 1);
setenv(MODE, "buffer", 1);
setenv(BUF_MAXSIZE, "1234", 1);
setenv(BUF_MAXTIME, "4321", 1);
setenv(FLUSH_FULL, "true", 1);
setenv(HOST_STATE, "host123", 1);
setenv(OUT_DIR, "path123", 1);
setenv(MAX_FILES, "1122", 1);
Config cfg;
EXPECT_STREQ(cfg.socketId, "id123");
EXPECT_EQ(cfg.mode, Mode::bufferMode);
EXPECT_EQ(cfg.bufMaxSize, 1234);
EXPECT_EQ(cfg.bufMaxTime, 4321);
EXPECT_EQ(cfg.bufFlushFull, true);
EXPECT_STREQ(cfg.hostState, "host123");
EXPECT_STREQ(cfg.outDir, "path123");
EXPECT_EQ(cfg.maxFiles, 1122);
// This should be default.
EXPECT_STREQ(cfg.streamDestination, "/run/rsyslog/console_input");
}
TEST_F(ConfigTest, LoadInStreamMode)
{
setenv(SOCKET_ID, "id123", 1);
setenv(MODE, "stream", 1);
setenv(STREAM_DST, "path123", 1);
Config cfg;
EXPECT_STREQ(cfg.socketId, "id123");
EXPECT_EQ(cfg.mode, Mode::streamMode);
EXPECT_STREQ(cfg.streamDestination, "path123");
// These should be default.
EXPECT_EQ(cfg.bufMaxSize, 3000);
EXPECT_EQ(cfg.bufMaxTime, 0);
EXPECT_EQ(cfg.bufFlushFull, false);
EXPECT_STREQ(cfg.hostState, "/xyz/openbmc_project/state/host0");
EXPECT_STREQ(cfg.outDir, "/var/lib/obmc/hostlogs");
EXPECT_EQ(cfg.maxFiles, 10);
}
TEST_F(ConfigTest, InvalidNumeric)
{
setenv(BUF_MAXSIZE, "-1234", 1);
EXPECT_THROW(Config(), std::invalid_argument);
}
TEST_F(ConfigTest, InvalidBoolean)
{
setenv(FLUSH_FULL, "invalid", 1);
EXPECT_THROW(Config(), std::invalid_argument);
setenv(FLUSH_FULL, "true", 1);
EXPECT_NO_THROW(Config());
}
TEST_F(ConfigTest, Mode)
{
setenv(MODE, "invalid", 1);
EXPECT_THROW(Config(), std::invalid_argument);
setenv(MODE, "stream", 1);
EXPECT_EQ(Config().mode, Mode::streamMode);
setenv(MODE, "buffer", 1);
EXPECT_EQ(Config().mode, Mode::bufferMode);
}
TEST_F(ConfigTest, InvalidBufferModeConfig)
{
setenv(BUF_MAXSIZE, "0", 1);
setenv(BUF_MAXTIME, "0", 1);
setenv(FLUSH_FULL, "true", 1);
EXPECT_THROW(Config(), std::invalid_argument);
}
TEST_F(ConfigTest, InvalidStreamModeConfig)
{
std::string tooLong(sizeof(sockaddr_un::sun_path), '0');
setenv(MODE, "stream", 1);
setenv(STREAM_DST, tooLong.c_str(), 1);
EXPECT_THROW(Config(), std::invalid_argument);
}