xref: /openbmc/sdbusplus/test/message/types.cpp (revision 8db46a0f)
151103a41SPatrick Williams #include <sdbusplus/message/types.hpp>
251103a41SPatrick Williams #include <sdbusplus/utility/tuple_to_array.hpp>
351103a41SPatrick Williams 
495269dbcSPatrick Venture #include <gtest/gtest.h>
595269dbcSPatrick Venture 
62b238afbSPatrick Venture template <typename... Args>
dbus_string(Args &&...)778b7803bSPatrick Williams auto dbus_string(Args&&... /*args*/)
851103a41SPatrick Williams {
9072da3eaSAndrew Geissler     return std::string(sdbusplus::utility::tuple_to_array(
10072da3eaSAndrew Geissler                            sdbusplus::message::types::type_id<Args...>())
11072da3eaSAndrew Geissler                            .data());
1251103a41SPatrick Williams }
1351103a41SPatrick Williams 
TEST(MessageTypes,Integer)14450d0ecbSPatrick Williams TEST(MessageTypes, Integer)
1551103a41SPatrick Williams {
16e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(1), "i");
17450d0ecbSPatrick Williams }
1851103a41SPatrick Williams 
TEST(MessageTypes,Double)19450d0ecbSPatrick Williams TEST(MessageTypes, Double)
20450d0ecbSPatrick Williams {
21e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(1.0), "d");
22450d0ecbSPatrick Williams }
2351103a41SPatrick Williams 
TEST(MessageTypes,MultipleParameter)24450d0ecbSPatrick Williams TEST(MessageTypes, MultipleParameter)
25450d0ecbSPatrick Williams {
26e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(false, true), "bb");
27e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(1, 2, 3, true, 1.0), "iiibd");
28450d0ecbSPatrick Williams }
2951103a41SPatrick Williams 
TEST(MessageTypes,StringReferences)30450d0ecbSPatrick Williams TEST(MessageTypes, StringReferences)
3151103a41SPatrick Williams {
3251103a41SPatrick Williams     std::string a = "a";
3351103a41SPatrick Williams     std::string b = "b";
3451103a41SPatrick Williams     const char* c = "c";
3551103a41SPatrick Williams 
36e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(a, std::move(b), c), "sss");
3751103a41SPatrick Williams }
3844982981SPatrick Williams 
TEST(MessageTypes,ObjectPath)39450d0ecbSPatrick Williams TEST(MessageTypes, ObjectPath)
40450d0ecbSPatrick Williams {
41e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(sdbusplus::message::object_path("/asdf")), "o");
42450d0ecbSPatrick Williams }
4344982981SPatrick Williams 
TEST(MessageTypes,ObjectPathFilename)44fa0fa3b0SEd Tanous TEST(MessageTypes, ObjectPathFilename)
45eb4bd724SEd Tanous {
46e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc/def").filename(), "def");
47e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc/").filename(), "");
48e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc").filename(), "abc");
49e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/_61bc").filename(), "abc");
50e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/").filename(), "");
51e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("").filename(), "");
52e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("abc").filename(), "");
53e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/_2d").filename(), "-");
54e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/_20").filename(), " ");
55e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/_2F").filename(), "/");
56285f78b1SWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/_").filename(), "");
57285f78b1SWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/_2").filename(), "");
58285f78b1SWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/_2y").filename(), "");
59285f78b1SWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/_y2").filename(), "");
60e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/bios_active").filename(),
61d06072e7SEd Tanous               "bios_active");
62eb4bd724SEd Tanous }
63eb4bd724SEd Tanous 
TEST(MessageTypes,ObjectPathParent)64eb4bd724SEd Tanous TEST(MessageTypes, ObjectPathParent)
65eb4bd724SEd Tanous {
66e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc/def").parent_path(),
67eb4bd724SEd Tanous               sdbusplus::message::object_path("/abc"));
68e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc/").parent_path(),
69eb4bd724SEd Tanous               sdbusplus::message::object_path("/abc"));
70e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc").parent_path(),
71eb4bd724SEd Tanous               sdbusplus::message::object_path("/"));
72e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/").parent_path(),
73eb4bd724SEd Tanous               sdbusplus::message::object_path("/"));
74eb4bd724SEd Tanous }
75eb4bd724SEd Tanous 
TEST(MessageTypes,ObjectPathOperatorSlash)76fa0fa3b0SEd Tanous TEST(MessageTypes, ObjectPathOperatorSlash)
77fa0fa3b0SEd Tanous {
78e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/") / "abc",
79*8db46a0fSWilliam A. Kennington III               sdbusplus::message::object_path("/abc"));
80285f78b1SWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/") / "abc",
81*8db46a0fSWilliam A. Kennington III               sdbusplus::message::object_path("/abc"));
82e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc") / "def",
83*8db46a0fSWilliam A. Kennington III               sdbusplus::message::object_path("/abc/def"));
84e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc") / "-",
85fa0fa3b0SEd Tanous               sdbusplus::message::object_path("/abc/_2d"));
86e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc") / " ",
87fa0fa3b0SEd Tanous               sdbusplus::message::object_path("/abc/_20"));
88e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc") / "/",
89fa0fa3b0SEd Tanous               sdbusplus::message::object_path("/abc/_2f"));
90e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc") / "ab_cd",
91*8db46a0fSWilliam A. Kennington III               sdbusplus::message::object_path("/abc/ab_cd"));
92285f78b1SWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc") / "_ab_cd",
93285f78b1SWilliam A. Kennington III               sdbusplus::message::object_path("/abc/_5fab_5fcd"));
94285f78b1SWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/abc") / "ab-c_d",
95285f78b1SWilliam A. Kennington III               sdbusplus::message::object_path("/abc/_61b_2dc_5fd"));
96fa0fa3b0SEd Tanous 
97fa0fa3b0SEd Tanous     // Test the std::string overload.  This is largely just for coverage
98e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(sdbusplus::message::object_path("/") / std::string("abc"),
99*8db46a0fSWilliam A. Kennington III               sdbusplus::message::object_path("/abc"));
100fa0fa3b0SEd Tanous }
101fa0fa3b0SEd Tanous 
TEST(MessageTypes,ObjectPathOperatorSlashEqual)10274a27118SEd Tanous TEST(MessageTypes, ObjectPathOperatorSlashEqual)
10374a27118SEd Tanous {
10474a27118SEd Tanous     sdbusplus::message::object_path path("/");
10574a27118SEd Tanous     path /= "abc";
106*8db46a0fSWilliam A. Kennington III     EXPECT_EQ(path, sdbusplus::message::object_path("/abc"));
10774a27118SEd Tanous 
10874a27118SEd Tanous     sdbusplus::message::object_path path2("/");
109285f78b1SWilliam A. Kennington III     path2 /= std::string("d-ef");
110285f78b1SWilliam A. Kennington III     EXPECT_EQ(path2, sdbusplus::message::object_path("/_64_2def"));
11174a27118SEd Tanous }
11274a27118SEd Tanous 
TEST(MessageTypes,Signature)113450d0ecbSPatrick Williams TEST(MessageTypes, Signature)
114450d0ecbSPatrick Williams {
115e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(sdbusplus::message::signature("sss")), "g");
11651103a41SPatrick Williams }
117b98bdc6fSPatrick Williams 
TEST(MessageTypes,VectorOfString)118b98bdc6fSPatrick Williams TEST(MessageTypes, VectorOfString)
119b98bdc6fSPatrick Williams {
120b98bdc6fSPatrick Williams     std::vector<std::string> s = {"a", "b"};
121b98bdc6fSPatrick Williams 
122e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(s), "as");
123b98bdc6fSPatrick Williams }
124b98bdc6fSPatrick Williams 
TEST(MessageTypes,SetOfString)125b98bdc6fSPatrick Williams TEST(MessageTypes, SetOfString)
126b98bdc6fSPatrick Williams {
127b98bdc6fSPatrick Williams     std::set<std::string> s = {"a", "b"};
128b98bdc6fSPatrick Williams 
129e39b3dcbSWilliam A. Kennington III     EXPECT_EQ(dbus_string(s), "as");
130b98bdc6fSPatrick Williams }
131