xref: /openbmc/bmcweb/test/include/webassets_test.cpp (revision 36b5cba2d032908f7e2d5355c512c7541fad4861)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3 #include "webassets.hpp"
4 
5 #include <gtest/gtest.h>
6 
7 namespace crow::webassets
8 {
9 namespace
10 {
11 
TEST(GetStaticEtagTest,CorrectValues)12 TEST(GetStaticEtagTest, CorrectValues)
13 {
14     // Webpack-style hash in filename.
15     EXPECT_EQ(getStaticEtag("app.63e2c453.css"), "\"63e2c453\"");
16 
17     // Vite-style hash in filename.
18     EXPECT_EQ(getStaticEtag("app.DhhjLIym.js"), "\"DhhjLIym\"");
19 
20     // Hash extraction still works when file has multiple dots.
21     EXPECT_EQ(getStaticEtag("vendor.app.DhhjLIym.js"), "\"DhhjLIym\"");
22 
23     // Path prefixes do not affect hash extraction.
24     EXPECT_EQ(getStaticEtag("/usr/share/www/app.63e2c453.css"), "\"63e2c453\"");
25     EXPECT_EQ(getStaticEtag("./public/assets/app.DhhjLIym.js"), "\"DhhjLIym\"");
26 
27     // Too few segments to contain name/hash/extension.
28     EXPECT_EQ(getStaticEtag("nested/dir/vendor.app.DhhjLIym.js"),
29               "\"DhhjLIym\"");
30     EXPECT_EQ(getStaticEtag("app.js"), "");
31     EXPECT_EQ(getStaticEtag("/usr/share/www/app.js"), "");
32 
33     // Hash must be exactly 8 characters.
34     EXPECT_EQ(getStaticEtag("app.63e2c45.css"), "");
35     EXPECT_EQ(getStaticEtag("app.63e2c4537.css"), "");
36 
37     // Empty string and no-dot filenames yield no hash.
38     EXPECT_EQ(getStaticEtag(""), "");
39     EXPECT_EQ(getStaticEtag("appjs"), "");
40 
41     // Mixed-case hex hash still matches under alphanumeric rule.
42     EXPECT_EQ(getStaticEtag("app.63E2C453.css"), "\"63E2C453\"");
43 
44     // Hash must be alphanumeric only.
45     EXPECT_EQ(getStaticEtag("app.63e2c45-.css"), "");
46     EXPECT_EQ(getStaticEtag("app.63e2c45_.css"), "");
47 }
48 
49 } // namespace
50 } // namespace crow::webassets
51