diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2021-11-17 22:34:57 +0100 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2021-11-17 22:34:57 +0100 |
| commit | 6232d13f5321b87ddf12a1aa36b4545da45f173d (patch) | |
| tree | 23f3316470a14136debd9d02f9e920ca2b06f4cc /test/test_config.cc | |
Travel3: Simple image and video display site
Reads the images and videos from filesystem and builds a site in
memroy.
Diffstat (limited to 'test/test_config.cc')
| -rw-r--r-- | test/test_config.cc | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/test/test_config.cc b/test/test_config.cc new file mode 100644 index 0000000..d9ddf3a --- /dev/null +++ b/test/test_config.cc @@ -0,0 +1,167 @@ +#include "common.hh" + +#include "config.hh" +#include "file_test.hh" +#include "logger.hh" +#include "unique_fd.hh" + +#include <gtest/gtest.h> +#include <string_view> + +namespace { + +class ConfigTest : public FileTest { +protected: + ConfigTest() + : logger_(Logger::create_null()) {} + + Logger* logger() const { + return logger_.get(); + } + +private: + std::unique_ptr<Logger> logger_; +}; + +} // namespace + +TEST(Config, empty) { + auto cfg = Config::create_empty(); + EXPECT_EQ("bar", cfg->get("foo", std::string_view("bar"))); + EXPECT_STREQ("bar", cfg->get("foo", "bar")); + EXPECT_EQ(1000, cfg->get("foo", 1000)); + EXPECT_EQ(0, cfg->get_size("foo", 0)); + EXPECT_EQ(0.0, cfg->get_duration("foo", 0.0)); + EXPECT_TRUE(cfg->get_path("foo", "").empty()); + EXPECT_EQ("bar", cfg->get_path("foo", "bar")); +} + +TEST_F(ConfigTest, empty_file) { + write(""); + auto cfg = Config::create(logger(), path()); + ASSERT_TRUE(cfg); + EXPECT_EQ("bar", cfg->get("foo", std::string_view("bar"))); + EXPECT_STREQ("bar", cfg->get("foo", "bar")); + EXPECT_EQ(1000, cfg->get("foo", 1000)); + EXPECT_EQ(0, cfg->get_size("foo", 0)); + EXPECT_TRUE(cfg->get_path("foo", "").empty()); +} + +TEST_F(ConfigTest, sanity) { + write("# comment\n" + "str = bar\n" + "uint = 1000\n" + "size = 1M\n" + "path = /root\n"); + auto cfg = Config::create(logger(), path()); + ASSERT_TRUE(cfg); + EXPECT_EQ("bar", cfg->get("str", std::string_view())); + EXPECT_STREQ("bar", cfg->get("str", "")); + EXPECT_EQ(1000, cfg->get("uint", static_cast<uint64_t>(0))); + EXPECT_EQ(1024 * 1024, cfg->get_size("size", 0)); + EXPECT_EQ("/root", cfg->get_path("path", "")); +} + +TEST_F(ConfigTest, missing_equal) { + write("bad file\n"); + auto cfg = Config::create(logger(), path()); + EXPECT_FALSE(cfg); +} + +TEST_F(ConfigTest, missing_key) { + write("= arg\n"); + auto cfg = Config::create(logger(), path()); + EXPECT_FALSE(cfg); +} + +TEST_F(ConfigTest, sizes) { + write("bytes1 = 12\n" + "bytes2 = 12b\n" + "bytes3 = 12B\n" + "kilo1 = 1.2k\n" + "kilo2 = 1.2K\n" + "kilo3 = 1.2Kb\n" + "mega1 = 1.2m\n" + "mega2 = 1.2M\n" + "mega3 = 1.2MB\n" + "giga1 = .2g\n" + "giga2 = .2G\n" + "terra1 = 2.t\n" + "terra2 = 2.T\n" + "unknown = 4X\n" + "nan = X\n"); + auto cfg = Config::create(logger(), path()); + ASSERT_TRUE(cfg); + EXPECT_EQ(12, cfg->get_size("bytes1", 0)); + EXPECT_EQ(12, cfg->get_size("bytes2", 0)); + EXPECT_EQ(12, cfg->get_size("bytes3", 0)); + EXPECT_EQ(1228, cfg->get_size("kilo1", 0)); + EXPECT_EQ(1228, cfg->get_size("kilo2", 0)); + EXPECT_EQ(1228, cfg->get_size("kilo3", 0)); + EXPECT_EQ(1258291, cfg->get_size("mega1", 0)); + EXPECT_EQ(1258291, cfg->get_size("mega2", 0)); + EXPECT_EQ(1258291, cfg->get_size("mega3", 0)); + EXPECT_EQ(static_cast<uint64_t>(214748364), cfg->get_size("giga1", 0)); + EXPECT_EQ(static_cast<uint64_t>(214748364), cfg->get_size("giga2", 0)); + EXPECT_EQ(static_cast<uint64_t>(2) * 1024 * 1024 * 1024 * 1024, + cfg->get_size("terra1", 0)); + EXPECT_EQ(static_cast<uint64_t>(2) * 1024 * 1024 * 1024 * 1024, + cfg->get_size("terra2", 0)); + EXPECT_FALSE(cfg->get_size("unknown", 0).has_value()); + EXPECT_FALSE(cfg->get_size("nan", 0).has_value()); +} + +TEST_F(ConfigTest, durations) { + write("seconds1 = 1.2\n" + "seconds2 = 1.2s\n" + "seconds3 = 1.2S\n" + "min1 = .5m\n" + "min2 = .5M\n" + "hour1 = 12.1h\n" + "hour2 = 12.1H\n" + "milli1 = 100ms\n" + "milli2 = 100MS\n" + "nano1 = 20000ns\n" + "nano2 = 20000NS\n" + "unknown = 4X\n" + "nan = X\n"); + auto cfg = Config::create(logger(), path()); + ASSERT_TRUE(cfg); + EXPECT_EQ(1.2, cfg->get_duration("seconds1", 0)); + EXPECT_EQ(1.2, cfg->get_duration("seconds2", 0)); + EXPECT_EQ(1.2, cfg->get_duration("seconds3", 0)); + EXPECT_EQ(30., cfg->get_duration("min1", 0)); + EXPECT_EQ(30., cfg->get_duration("min2", 0)); + EXPECT_EQ(43560., cfg->get_duration("hour1", 0)); + EXPECT_EQ(43560., cfg->get_duration("hour2", 0)); + EXPECT_EQ(.1, cfg->get_duration("milli1", 0)); + EXPECT_EQ(.1, cfg->get_duration("milli2", 0)); + EXPECT_EQ(.02, cfg->get_duration("nano1", 0)); + EXPECT_EQ(.02, cfg->get_duration("nano2", 0)); + EXPECT_FALSE(cfg->get_duration("unknown", 0).has_value()); + EXPECT_FALSE(cfg->get_duration("nan", 0).has_value()); +} + +TEST_F(ConfigTest, uint64) { + write("max = 18446744073709551615\n" + "hex = 0xffffffffffffffff\n" + "negative = -10\n" + "suffix = 100X\n" + "nan = X\n"); + auto cfg = Config::create(logger(), path()); + ASSERT_TRUE(cfg); + EXPECT_EQ(0xffffffffffffffff, cfg->get("max", static_cast<uint64_t>(0))); + EXPECT_FALSE(cfg->get("hex", static_cast<uint64_t>(0)).has_value()); + EXPECT_FALSE(cfg->get("negative", static_cast<uint64_t>(0)).has_value()); + EXPECT_FALSE(cfg->get("suffix", static_cast<uint64_t>(0)).has_value()); + EXPECT_FALSE(cfg->get("nan", static_cast<uint64_t>(0)).has_value()); +} + +TEST_F(ConfigTest, path) { + write("absolute = /file\n" + "relative = file\n"); + auto cfg = Config::create(logger(), path()); + ASSERT_TRUE(cfg); + EXPECT_EQ("/file", cfg->get_path("absolute", "")); + EXPECT_EQ(path().parent_path() / "file", cfg->get_path("relative", "")); +} |
