blob: d6660088fc16ac404eb259ad214a99fd187ef289 [file] [log] [blame]
Patrick Williams51103a42016-07-20 17:43:38 -05001#include <sdbusplus/message/types.hpp>
2#include <sdbusplus/utility/tuple_to_array.hpp>
3
Patrick Venture95269db2018-08-31 09:19:17 -07004#include <gtest/gtest.h>
5
Patrick Venture2b238af2018-08-31 12:45:01 -07006template <typename... Args>
Patrick Williams78b78032020-05-20 10:32:05 -05007auto dbus_string(Args&&... /*args*/)
Patrick Williams51103a42016-07-20 17:43:38 -05008{
Andrew Geissler072da3e2018-01-18 07:21:42 -08009 return std::string(sdbusplus::utility::tuple_to_array(
10 sdbusplus::message::types::type_id<Args...>())
11 .data());
Patrick Williams51103a42016-07-20 17:43:38 -050012}
13
Patrick Williams450d0ec2017-04-28 16:09:09 -050014TEST(MessageTypes, Integer)
Patrick Williams51103a42016-07-20 17:43:38 -050015{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070016 EXPECT_EQ(dbus_string(1), "i");
Patrick Williams450d0ec2017-04-28 16:09:09 -050017}
Patrick Williams51103a42016-07-20 17:43:38 -050018
Patrick Williams450d0ec2017-04-28 16:09:09 -050019TEST(MessageTypes, Double)
20{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070021 EXPECT_EQ(dbus_string(1.0), "d");
Patrick Williams450d0ec2017-04-28 16:09:09 -050022}
Patrick Williams51103a42016-07-20 17:43:38 -050023
Patrick Williams450d0ec2017-04-28 16:09:09 -050024TEST(MessageTypes, MultipleParameter)
25{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070026 EXPECT_EQ(dbus_string(false, true), "bb");
27 EXPECT_EQ(dbus_string(1, 2, 3, true, 1.0), "iiibd");
Patrick Williams450d0ec2017-04-28 16:09:09 -050028}
Patrick Williams51103a42016-07-20 17:43:38 -050029
Patrick Williams450d0ec2017-04-28 16:09:09 -050030TEST(MessageTypes, StringReferences)
31{
32 std::string a = "a";
33 std::string b = "b";
34 const char* c = "c";
Patrick Williams51103a42016-07-20 17:43:38 -050035
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070036 EXPECT_EQ(dbus_string(a, std::move(b), c), "sss");
Patrick Williams450d0ec2017-04-28 16:09:09 -050037}
Patrick Williams44982982017-01-06 16:02:37 -060038
Patrick Williams450d0ec2017-04-28 16:09:09 -050039TEST(MessageTypes, ObjectPath)
40{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070041 EXPECT_EQ(dbus_string(sdbusplus::message::object_path("/asdf")), "o");
Patrick Williams450d0ec2017-04-28 16:09:09 -050042}
Patrick Williams44982982017-01-06 16:02:37 -060043
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070044TEST(MessageTypes, ObjectPathFilename)
Ed Tanouseb4bd722020-12-18 00:25:21 +000045{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070046 EXPECT_EQ(sdbusplus::message::object_path("/abc/def").filename(), "def");
47 EXPECT_EQ(sdbusplus::message::object_path("/abc/").filename(), "");
48 EXPECT_EQ(sdbusplus::message::object_path("/abc").filename(), "abc");
49 EXPECT_EQ(sdbusplus::message::object_path("/_61bc").filename(), "abc");
50 EXPECT_EQ(sdbusplus::message::object_path("/").filename(), "");
51 EXPECT_EQ(sdbusplus::message::object_path("").filename(), "");
52 EXPECT_EQ(sdbusplus::message::object_path("abc").filename(), "");
53 EXPECT_EQ(sdbusplus::message::object_path("/_2d").filename(), "-");
54 EXPECT_EQ(sdbusplus::message::object_path("/_20").filename(), " ");
55 EXPECT_EQ(sdbusplus::message::object_path("/_2F").filename(), "/");
William A. Kennington III285f78b2021-05-01 18:35:11 -070056 EXPECT_EQ(sdbusplus::message::object_path("/_").filename(), "");
57 EXPECT_EQ(sdbusplus::message::object_path("/_2").filename(), "");
58 EXPECT_EQ(sdbusplus::message::object_path("/_2y").filename(), "");
59 EXPECT_EQ(sdbusplus::message::object_path("/_y2").filename(), "");
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070060 EXPECT_EQ(sdbusplus::message::object_path("/bios_active").filename(),
Ed Tanousd06072e2021-04-21 08:27:58 -070061 "bios_active");
Ed Tanouseb4bd722020-12-18 00:25:21 +000062}
63
64TEST(MessageTypes, ObjectPathParent)
65{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070066 EXPECT_EQ(sdbusplus::message::object_path("/abc/def").parent_path(),
Ed Tanouseb4bd722020-12-18 00:25:21 +000067 sdbusplus::message::object_path("/abc"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070068 EXPECT_EQ(sdbusplus::message::object_path("/abc/").parent_path(),
Ed Tanouseb4bd722020-12-18 00:25:21 +000069 sdbusplus::message::object_path("/abc"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070070 EXPECT_EQ(sdbusplus::message::object_path("/abc").parent_path(),
Ed Tanouseb4bd722020-12-18 00:25:21 +000071 sdbusplus::message::object_path("/"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070072 EXPECT_EQ(sdbusplus::message::object_path("/").parent_path(),
Ed Tanouseb4bd722020-12-18 00:25:21 +000073 sdbusplus::message::object_path("/"));
74}
75
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070076TEST(MessageTypes, ObjectPathOperatorSlash)
77{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070078 EXPECT_EQ(sdbusplus::message::object_path("/") / "abc",
William A. Kennington III8db46a02021-05-05 17:53:35 -070079 sdbusplus::message::object_path("/abc"));
William A. Kennington III285f78b2021-05-01 18:35:11 -070080 EXPECT_EQ(sdbusplus::message::object_path("/") / "abc",
William A. Kennington III8db46a02021-05-05 17:53:35 -070081 sdbusplus::message::object_path("/abc"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070082 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "def",
William A. Kennington III8db46a02021-05-05 17:53:35 -070083 sdbusplus::message::object_path("/abc/def"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070084 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "-",
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070085 sdbusplus::message::object_path("/abc/_2d"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070086 EXPECT_EQ(sdbusplus::message::object_path("/abc") / " ",
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070087 sdbusplus::message::object_path("/abc/_20"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070088 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "/",
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070089 sdbusplus::message::object_path("/abc/_2f"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070090 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "ab_cd",
William A. Kennington III8db46a02021-05-05 17:53:35 -070091 sdbusplus::message::object_path("/abc/ab_cd"));
William A. Kennington III285f78b2021-05-01 18:35:11 -070092 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "_ab_cd",
93 sdbusplus::message::object_path("/abc/_5fab_5fcd"));
94 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "ab-c_d",
95 sdbusplus::message::object_path("/abc/_61b_2dc_5fd"));
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070096
97 // Test the std::string overload. This is largely just for coverage
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070098 EXPECT_EQ(sdbusplus::message::object_path("/") / std::string("abc"),
William A. Kennington III8db46a02021-05-05 17:53:35 -070099 sdbusplus::message::object_path("/abc"));
Ed Tanousfa0fa3b2021-03-31 17:14:57 -0700100}
101
Ed Tanous74a27112021-04-07 15:40:00 -0700102TEST(MessageTypes, ObjectPathOperatorSlashEqual)
103{
104 sdbusplus::message::object_path path("/");
105 path /= "abc";
William A. Kennington III8db46a02021-05-05 17:53:35 -0700106 EXPECT_EQ(path, sdbusplus::message::object_path("/abc"));
Ed Tanous74a27112021-04-07 15:40:00 -0700107
108 sdbusplus::message::object_path path2("/");
William A. Kennington III285f78b2021-05-01 18:35:11 -0700109 path2 /= std::string("d-ef");
110 EXPECT_EQ(path2, sdbusplus::message::object_path("/_64_2def"));
Ed Tanous74a27112021-04-07 15:40:00 -0700111}
112
Patrick Williams450d0ec2017-04-28 16:09:09 -0500113TEST(MessageTypes, Signature)
114{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -0700115 EXPECT_EQ(dbus_string(sdbusplus::message::signature("sss")), "g");
Patrick Williams51103a42016-07-20 17:43:38 -0500116}
Patrick Williamsb98bdc62020-06-16 16:15:40 -0500117
118TEST(MessageTypes, VectorOfString)
119{
120 std::vector<std::string> s = {"a", "b"};
121
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -0700122 EXPECT_EQ(dbus_string(s), "as");
Patrick Williamsb98bdc62020-06-16 16:15:40 -0500123}
124
125TEST(MessageTypes, SetOfString)
126{
127 std::set<std::string> s = {"a", "b"};
128
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -0700129 EXPECT_EQ(dbus_string(s), "as");
Patrick Williamsb98bdc62020-06-16 16:15:40 -0500130}