From 828bd8bec094712c00cf7a8985c417ea36912306 Mon Sep 17 00:00:00 2001 From: Vladislav Nepogodin Date: Fri, 5 Jul 2024 02:44:07 +0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=20gucc:=20improve=20test=20coverag?= =?UTF-8?q?e=20for=20initcpio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gucc/tests/unit-initcpio.cpp | 73 ++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 4 deletions(-) diff --git a/gucc/tests/unit-initcpio.cpp b/gucc/tests/unit-initcpio.cpp index 5b17165..a9d67fd 100644 --- a/gucc/tests/unit-initcpio.cpp +++ b/gucc/tests/unit-initcpio.cpp @@ -8,6 +8,9 @@ #include #include +#include +#include + namespace fs = std::filesystem; static constexpr auto MKINITCPIO_STR = R"( @@ -24,6 +27,22 @@ FILES=() HOOKS=(base udev autodetect modconf block filesystems keyboard fsck) )"; +static constexpr auto MKINITCPIO_INVALID_TEST = R"( +# MODULES +MODULES=() + + ( +# BINARIES +BINARIES=() +) +# FILES +FILES=() +() +# HOOKS +HOOKS=(base udev autodetect modconf block filesystems keyboard fsck + +)"; + static constexpr auto MKINITCPIO_TEST = R"( # MODULES MODULES=(radeon crc32c-intel) @@ -39,17 +58,22 @@ HOOKS=(base udev autodetect modconf block filesystems keyboard fsck btrfs usr lv )"; int main() { + auto callback_sink = std::make_shared([](const spdlog::details::log_msg&) { + // noop + }); + spdlog::set_default_logger(std::make_shared("default", callback_sink)); + using namespace gucc; // NOLINT static constexpr std::string_view filename{"/tmp/mkinitcpio.conf"}; // Open mkinitcpio file for writing. - std::ofstream mhinitcpio_file{filename.data()}; - assert(mhinitcpio_file.is_open()); + std::ofstream mkinitcpio_file{filename.data()}; + assert(mkinitcpio_file.is_open()); // Setup mkinitcpio file. - mhinitcpio_file << MKINITCPIO_STR; - mhinitcpio_file.close(); + mkinitcpio_file << MKINITCPIO_STR; + mkinitcpio_file.close(); auto initcpio = detail::Initcpio{filename}; @@ -78,4 +102,45 @@ int main() { // Cleanup. fs::remove(filename); + + // check invalid file + mkinitcpio_file = std::ofstream{filename.data()}; + assert(mkinitcpio_file.is_open()); + + mkinitcpio_file << MKINITCPIO_INVALID_TEST; + mkinitcpio_file.close(); + + initcpio = detail::Initcpio{filename}; + assert(initcpio.parse_file()); + + assert(initcpio.modules.empty()); + assert(initcpio.files.empty()); + assert(initcpio.hooks.empty()); + + // Cleanup. + fs::remove(filename); + + // check empty file + mkinitcpio_file = std::ofstream{filename.data()}; + assert(mkinitcpio_file.is_open()); + + mkinitcpio_file << ""; + mkinitcpio_file.close(); + + initcpio = detail::Initcpio{filename}; + assert(!initcpio.parse_file()); + assert(!initcpio.write()); + + // Cleanup. + fs::remove(filename); + + // check write to nonexistent file + initcpio = detail::Initcpio{"/path/to/non/exist_file.conf"}; + assert(!initcpio.parse_file()); + assert(!initcpio.write()); + + // check write to root file + initcpio = detail::Initcpio{"/etc/mtab"}; + assert(!initcpio.parse_file()); + assert(!initcpio.write()); }