1*c33a039bSNan Zhou #include "openbmc_dbus_rest.hpp"
2*c33a039bSNan Zhou 
3*c33a039bSNan Zhou #include <gmock/gmock.h> // IWYU pragma: keep
4*c33a039bSNan Zhou #include <gtest/gtest.h> // IWYU pragma: keep
5*c33a039bSNan Zhou 
6*c33a039bSNan Zhou // IWYU pragma: no_include <gtest/gtest-message.h>
7*c33a039bSNan Zhou // IWYU pragma: no_include <gtest/gtest-test-part.h>
8*c33a039bSNan Zhou // IWYU pragma: no_include "gtest/gtest_pred_impl.h"
9*c33a039bSNan Zhou // IWYU pragma: no_include <gmock/gmock-matchers.h>
10*c33a039bSNan Zhou 
11*c33a039bSNan Zhou namespace crow::openbmc_mapper
12*c33a039bSNan Zhou {
13*c33a039bSNan Zhou namespace
14*c33a039bSNan Zhou {
15*c33a039bSNan Zhou 
16*c33a039bSNan Zhou using ::testing::ElementsAre;
17*c33a039bSNan Zhou // Also see redfish-core/ut/configfile_test.cpp
18*c33a039bSNan Zhou TEST(OpenbmcDbusRestTest, ValidFilenameGood)
19*c33a039bSNan Zhou {
20*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename("GoodConfigFile"));
21*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename("_Underlines_"));
22*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename("8675309"));
23*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename("-Dashes-"));
24*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename("With Spaces"));
25*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename("One.Dot"));
26*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename("trailingdot."));
27*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename("-_ o _-"));
28*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename(" "));
29*c33a039bSNan Zhou     EXPECT_TRUE(validateFilename(" ."));
30*c33a039bSNan Zhou }
31*c33a039bSNan Zhou 
32*c33a039bSNan Zhou // There is no length test yet because validateFilename() does not care yet
33*c33a039bSNan Zhou TEST(OpenbmcDbusRestTest, ValidFilenameBad)
34*c33a039bSNan Zhou {
35*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename(""));
36*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename("Bad@file"));
37*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename("/../../../../../etc/badpath"));
38*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename("/../../etc/badpath"));
39*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename("/mydir/configFile"));
40*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename("/"));
41*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename(".leadingdot"));
42*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename("Two..Dots"));
43*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename("../../../../../../etc/shadow"));
44*c33a039bSNan Zhou     EXPECT_FALSE(validateFilename("."));
45*c33a039bSNan Zhou }
46*c33a039bSNan Zhou 
47*c33a039bSNan Zhou TEST(OpenBmcDbusTest, TestArgSplit)
48*c33a039bSNan Zhou {
49*c33a039bSNan Zhou     // test the basic types
50*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("x"), ElementsAre("x"));
51*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("y"), ElementsAre("y"));
52*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("b"), ElementsAre("b"));
53*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("n"), ElementsAre("n"));
54*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("q"), ElementsAre("q"));
55*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("i"), ElementsAre("i"));
56*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("u"), ElementsAre("u"));
57*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("x"), ElementsAre("x"));
58*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("t"), ElementsAre("t"));
59*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("d"), ElementsAre("d"));
60*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("h"), ElementsAre("h"));
61*c33a039bSNan Zhou     // test arrays
62*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("ai"), ElementsAre("ai"));
63*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("ax"), ElementsAre("ax"));
64*c33a039bSNan Zhou     // test tuples
65*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("(sss)"), ElementsAre("(sss)"));
66*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("(sss)b"), ElementsAre("(sss)", "b"));
67*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("b(sss)"), ElementsAre("b", "(sss)"));
68*c33a039bSNan Zhou 
69*c33a039bSNan Zhou     // Test nested types
70*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("a{si}b"), ElementsAre("a{si}", "b"));
71*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("a(sss)b"), ElementsAre("a(sss)", "b"));
72*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("aa{si}b"), ElementsAre("aa{si}", "b"));
73*c33a039bSNan Zhou     EXPECT_THAT(dbusArgSplit("i{si}b"), ElementsAre("i", "{si}", "b"));
74*c33a039bSNan Zhou }
75*c33a039bSNan Zhou } // namespace
76*c33a039bSNan Zhou } // namespace crow::openbmc_mapper
77