#include "fru_device/gzip_utils.hpp" #include #include #include #include #include "gmock/gmock.h" #include "gtest/gtest.h" TEST(GzipUtils, EmptyCompressed) { std::vector compressed = {}; std::optional uncompressed = gzipInflate(compressed); EXPECT_EQ(uncompressed, std::nullopt); } TEST(GzipUtils, GoodCompressed) { // Empty file created with // touch foo && gzip -c foo | xxd -i std::array emptyCompressed{ 0x1f, 0x8b, 0x08, 0x08, 0x16, 0x37, 0xdc, 0x68, 0x00, 0x03, 0x66, 0x6f, 0x6f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; std::optional uncompressed = gzipInflate(emptyCompressed); ASSERT_NE(uncompressed, std::nullopt); if (uncompressed) { EXPECT_EQ(uncompressed->size(), 0U); } } TEST(GzipUtils, 100kcompressedZeros) { // File created with // dd if=/dev/zero of=10kfile bs=10k count=1 && gzip -c 10kfile | xxd -i std::array emptyCompressed{ 0x1f, 0x8b, 0x08, 0x08, 0xcb, 0x37, 0xdc, 0x68, 0x00, 0x03, 0x31, 0x30, 0x6b, 0x66, 0x69, 0x6c, 0x65, 0x00, 0xed, 0xc1, 0x01, 0x0d, 0x00, 0x00, 0x00, 0xc2, 0xa0, 0xf7, 0x4f, 0x6d, 0x0e, 0x37, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x37, 0x03, 0x9a, 0xde, 0x1d, 0x27, 0x00, 0x28, 0x00, 0x00}; std::optional uncompressed = gzipInflate(emptyCompressed); ASSERT_NE(uncompressed, std::nullopt); if (uncompressed) { EXPECT_EQ(uncompressed->size(), 10240U); EXPECT_TRUE(std::ranges::all_of(*uncompressed, [](uint8_t c) { return c == 0U; })); } } using ::testing::ElementsAre; using ::testing::IsEmpty; TEST(GzipUtils, getNodeFromXml) { constexpr std::string_view xml = R"( Everyday Italian Giada De Laurentiis 2005 30.00 )"; EXPECT_THAT(getNodeFromXml(xml, "/bookstore/book/title"), ElementsAre("Everyday Italian")); EXPECT_THAT(getNodeFromXml(xml, "/bookstore/book/author"), ElementsAre("Giada De Laurentiis")); EXPECT_THAT(getNodeFromXml(xml, "/bookstore/book/year"), ElementsAre("2005")); EXPECT_THAT(getNodeFromXml(xml, "/bookstore/book/price"), ElementsAre("30.00")); EXPECT_THAT(getNodeFromXml(xml, "//book/title"), ElementsAre("Everyday Italian")); EXPECT_THAT(getNodeFromXml(xml, "//book/author"), ElementsAre("Giada De Laurentiis")); EXPECT_THAT(getNodeFromXml(xml, "//book/year"), ElementsAre("2005")); EXPECT_THAT(getNodeFromXml(xml, "//book/price"), ElementsAre("30.00")); EXPECT_THAT(getNodeFromXml(xml, "///title"), ElementsAre("Everyday Italian")); EXPECT_THAT(getNodeFromXml(xml, "///author"), ElementsAre("Giada De Laurentiis")); EXPECT_THAT(getNodeFromXml(xml, "///year"), ElementsAre("2005")); EXPECT_THAT(getNodeFromXml(xml, "///price"), ElementsAre("30.00")); EXPECT_THAT(getNodeFromXml(xml, "/bookstore/book/noexist"), IsEmpty()); EXPECT_THAT(getNodeFromXml(xml, "/bookstore/noexist/title"), IsEmpty()); EXPECT_THAT(getNodeFromXml(xml, "/noexist/book/title"), IsEmpty()); EXPECT_THAT(getNodeFromXml(xml, "//book/noexist"), IsEmpty()); EXPECT_THAT(getNodeFromXml(xml, "//noexist/title"), IsEmpty()); EXPECT_THAT(getNodeFromXml(xml, "///noexist"), IsEmpty()); // invalid xpath EXPECT_THAT(getNodeFromXml(xml, "foo"), IsEmpty()); EXPECT_THAT(getNodeFromXml(xml, "foo/bar"), IsEmpty()); EXPECT_THAT(getNodeFromXml(xml, "?"), IsEmpty()); }