blob: 3bbd937ad036789e51e9395290b549e7a0e0e1d1 [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(), "/");
56 EXPECT_EQ(sdbusplus::message::object_path("/bios_active").filename(),
Ed Tanousd06072e2021-04-21 08:27:58 -070057 "bios_active");
Ed Tanouseb4bd722020-12-18 00:25:21 +000058}
59
60TEST(MessageTypes, ObjectPathParent)
61{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070062 EXPECT_EQ(sdbusplus::message::object_path("/abc/def").parent_path(),
Ed Tanouseb4bd722020-12-18 00:25:21 +000063 sdbusplus::message::object_path("/abc"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070064 EXPECT_EQ(sdbusplus::message::object_path("/abc/").parent_path(),
Ed Tanouseb4bd722020-12-18 00:25:21 +000065 sdbusplus::message::object_path("/abc"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070066 EXPECT_EQ(sdbusplus::message::object_path("/abc").parent_path(),
Ed Tanouseb4bd722020-12-18 00:25:21 +000067 sdbusplus::message::object_path("/"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070068 EXPECT_EQ(sdbusplus::message::object_path("/").parent_path(),
Ed Tanouseb4bd722020-12-18 00:25:21 +000069 sdbusplus::message::object_path("/"));
70}
71
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070072TEST(MessageTypes, ObjectPathOperatorSlash)
73{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070074 EXPECT_EQ(sdbusplus::message::object_path("/") / "abc",
Ed Tanousd06072e2021-04-21 08:27:58 -070075 sdbusplus::message::object_path("/_61bc"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070076 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "def",
Ed Tanousd06072e2021-04-21 08:27:58 -070077 sdbusplus::message::object_path("/abc/_64ef"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070078 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "-",
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070079 sdbusplus::message::object_path("/abc/_2d"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070080 EXPECT_EQ(sdbusplus::message::object_path("/abc") / " ",
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070081 sdbusplus::message::object_path("/abc/_20"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070082 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "/",
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070083 sdbusplus::message::object_path("/abc/_2f"));
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070084 EXPECT_EQ(sdbusplus::message::object_path("/abc") / "ab_cd",
Ed Tanousd06072e2021-04-21 08:27:58 -070085 sdbusplus::message::object_path("/abc/_61b_5fcd"));
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070086
87 // Test the std::string overload. This is largely just for coverage
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070088 EXPECT_EQ(sdbusplus::message::object_path("/") / std::string("abc"),
Ed Tanousd06072e2021-04-21 08:27:58 -070089 sdbusplus::message::object_path("/_61bc"));
Ed Tanousfa0fa3b2021-03-31 17:14:57 -070090}
91
Ed Tanous74a27112021-04-07 15:40:00 -070092TEST(MessageTypes, ObjectPathOperatorSlashEqual)
93{
94 sdbusplus::message::object_path path("/");
95 path /= "abc";
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -070096 EXPECT_EQ(path, sdbusplus::message::object_path("/_61bc"));
Ed Tanous74a27112021-04-07 15:40:00 -070097
98 sdbusplus::message::object_path path2("/");
99 path2 /= std::string("def");
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -0700100 EXPECT_EQ(path2, sdbusplus::message::object_path("/_64ef"));
Ed Tanous74a27112021-04-07 15:40:00 -0700101}
102
Patrick Williams450d0ec2017-04-28 16:09:09 -0500103TEST(MessageTypes, Signature)
104{
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -0700105 EXPECT_EQ(dbus_string(sdbusplus::message::signature("sss")), "g");
Patrick Williams51103a42016-07-20 17:43:38 -0500106}
Patrick Williamsb98bdc62020-06-16 16:15:40 -0500107
108TEST(MessageTypes, VectorOfString)
109{
110 std::vector<std::string> s = {"a", "b"};
111
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -0700112 EXPECT_EQ(dbus_string(s), "as");
Patrick Williamsb98bdc62020-06-16 16:15:40 -0500113}
114
115TEST(MessageTypes, SetOfString)
116{
117 std::set<std::string> s = {"a", "b"};
118
William A. Kennington IIIe39b3dc2021-05-05 17:18:29 -0700119 EXPECT_EQ(dbus_string(s), "as");
Patrick Williamsb98bdc62020-06-16 16:15:40 -0500120}