xref: /aosp_15_r20/external/libbrillo/brillo/dbus/dbus_param_writer_test.cc (revision 1a96fba65179ea7d3f56207137718607415c5953)
1 // Copyright 2014 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <brillo/dbus/dbus_param_writer.h>
6 
7 #include <memory>
8 #include <string>
9 
10 #include <brillo/any.h>
11 #include <gtest/gtest.h>
12 
13 using dbus::MessageReader;
14 using dbus::MessageWriter;
15 using dbus::ObjectPath;
16 using dbus::Response;
17 
18 namespace brillo {
19 namespace dbus_utils {
20 
TEST(DBusParamWriter,Append_NoArgs)21 TEST(DBusParamWriter, Append_NoArgs) {
22   std::unique_ptr<Response> message = Response::CreateEmpty();
23   MessageWriter writer(message.get());
24   DBusParamWriter::Append(&writer);
25   EXPECT_EQ("", message->GetSignature());
26 }
27 
TEST(DBusParamWriter,Append_OneArg)28 TEST(DBusParamWriter, Append_OneArg) {
29   std::unique_ptr<Response> message = Response::CreateEmpty();
30   MessageWriter writer(message.get());
31   DBusParamWriter::Append(&writer, int32_t{2});
32   EXPECT_EQ("i", message->GetSignature());
33   DBusParamWriter::Append(&writer, std::string{"foo"});
34   EXPECT_EQ("is", message->GetSignature());
35   DBusParamWriter::Append(&writer, ObjectPath{"/o"});
36   EXPECT_EQ("iso", message->GetSignature());
37 
38   int32_t int_value = 0;
39   std::string string_value;
40   ObjectPath path_value;
41 
42   MessageReader reader(message.get());
43   EXPECT_TRUE(PopValueFromReader(&reader, &int_value));
44   EXPECT_TRUE(PopValueFromReader(&reader, &string_value));
45   EXPECT_TRUE(PopValueFromReader(&reader, &path_value));
46 
47   EXPECT_EQ(2, int_value);
48   EXPECT_EQ("foo", string_value);
49   EXPECT_EQ(ObjectPath{"/o"}, path_value);
50 }
51 
TEST(DBusParamWriter,Append_ManyArgs)52 TEST(DBusParamWriter, Append_ManyArgs) {
53   std::unique_ptr<Response> message = Response::CreateEmpty();
54   MessageWriter writer(message.get());
55   DBusParamWriter::Append(&writer, int32_t{9}, Any{7.5}, true);
56   EXPECT_EQ("ivb", message->GetSignature());
57 
58   int32_t int_value = 0;
59   Any variant_value;
60   bool bool_value = false;
61 
62   MessageReader reader(message.get());
63   EXPECT_TRUE(PopValueFromReader(&reader, &int_value));
64   EXPECT_TRUE(PopValueFromReader(&reader, &variant_value));
65   EXPECT_TRUE(PopValueFromReader(&reader, &bool_value));
66 
67   EXPECT_EQ(9, int_value);
68   EXPECT_DOUBLE_EQ(7.5, variant_value.Get<double>());
69   EXPECT_TRUE(bool_value);
70 }
71 
TEST(DBusParamWriter,AppendDBusOutParams_NoArgs)72 TEST(DBusParamWriter, AppendDBusOutParams_NoArgs) {
73   std::unique_ptr<Response> message = Response::CreateEmpty();
74   MessageWriter writer(message.get());
75   DBusParamWriter::AppendDBusOutParams(&writer);
76   EXPECT_EQ("", message->GetSignature());
77 }
78 
TEST(DBusParamWriter,AppendDBusOutParams_OneArg)79 TEST(DBusParamWriter, AppendDBusOutParams_OneArg) {
80   std::unique_ptr<Response> message = Response::CreateEmpty();
81   MessageWriter writer(message.get());
82   int32_t int_value_in{5};
83   std::string string_value_in{"bar"};
84   ObjectPath path_value_in{"/obj/path"};
85 
86   DBusParamWriter::AppendDBusOutParams(&writer, &int_value_in);
87   EXPECT_EQ("i", message->GetSignature());
88   DBusParamWriter::AppendDBusOutParams(&writer, &string_value_in);
89   EXPECT_EQ("is", message->GetSignature());
90   DBusParamWriter::AppendDBusOutParams(&writer, &path_value_in);
91   EXPECT_EQ("iso", message->GetSignature());
92 
93   int32_t int_value = 0;
94   std::string string_value;
95   ObjectPath path_value;
96 
97   MessageReader reader(message.get());
98   EXPECT_TRUE(PopValueFromReader(&reader, &int_value));
99   EXPECT_TRUE(PopValueFromReader(&reader, &string_value));
100   EXPECT_TRUE(PopValueFromReader(&reader, &path_value));
101 
102   EXPECT_EQ(5, int_value);
103   EXPECT_EQ("bar", string_value);
104   EXPECT_EQ(ObjectPath{"/obj/path"}, path_value);
105 }
106 
TEST(DBusParamWriter,AppendDBusOutParams_ManyArgs)107 TEST(DBusParamWriter, AppendDBusOutParams_ManyArgs) {
108   std::unique_ptr<Response> message = Response::CreateEmpty();
109   MessageWriter writer(message.get());
110   int32_t int_value_in{8};
111   Any variant_value_in{8.5};
112   bool bool_value_in{true};
113   DBusParamWriter::AppendDBusOutParams(
114       &writer, &int_value_in, &variant_value_in, &bool_value_in);
115   EXPECT_EQ("ivb", message->GetSignature());
116 
117   int32_t int_value = 0;
118   Any variant_value;
119   bool bool_value = false;
120 
121   MessageReader reader(message.get());
122   EXPECT_TRUE(PopValueFromReader(&reader, &int_value));
123   EXPECT_TRUE(PopValueFromReader(&reader, &variant_value));
124   EXPECT_TRUE(PopValueFromReader(&reader, &bool_value));
125 
126   EXPECT_EQ(8, int_value);
127   EXPECT_DOUBLE_EQ(8.5, variant_value.Get<double>());
128   EXPECT_TRUE(bool_value);
129 }
130 
TEST(DBusParamWriter,AppendDBusOutParams_Mixed_NoArgs)131 TEST(DBusParamWriter, AppendDBusOutParams_Mixed_NoArgs) {
132   std::unique_ptr<Response> message = Response::CreateEmpty();
133   MessageWriter writer(message.get());
134   DBusParamWriter::AppendDBusOutParams(&writer, 3, 5);
135   EXPECT_EQ("", message->GetSignature());
136 }
137 
TEST(DBusParamWriter,AppendDBusOutParams_Mixed_OneArg)138 TEST(DBusParamWriter, AppendDBusOutParams_Mixed_OneArg) {
139   std::unique_ptr<Response> message = Response::CreateEmpty();
140   MessageWriter writer(message.get());
141   int32_t int_value_in{5};
142   std::string str_value_in{"bar"};
143   ObjectPath path_value_in{"/obj"};
144 
145   DBusParamWriter::AppendDBusOutParams(&writer, 2, &int_value_in);
146   EXPECT_EQ("i", message->GetSignature());
147   DBusParamWriter::AppendDBusOutParams(&writer, &str_value_in, 0);
148   EXPECT_EQ("is", message->GetSignature());
149   DBusParamWriter::AppendDBusOutParams(&writer, 1, &path_value_in, 2);
150   EXPECT_EQ("iso", message->GetSignature());
151 
152   int32_t int_value = 0;
153   std::string string_value;
154   ObjectPath path_value;
155 
156   MessageReader reader(message.get());
157   EXPECT_TRUE(PopValueFromReader(&reader, &int_value));
158   EXPECT_TRUE(PopValueFromReader(&reader, &string_value));
159   EXPECT_TRUE(PopValueFromReader(&reader, &path_value));
160 
161   EXPECT_EQ(5, int_value);
162   EXPECT_EQ("bar", string_value);
163   EXPECT_EQ(ObjectPath{"/obj"}, path_value);
164 }
165 
TEST(DBusParamWriter,AppendDBusOutParams_Mixed_ManyArgs)166 TEST(DBusParamWriter, AppendDBusOutParams_Mixed_ManyArgs) {
167   std::unique_ptr<Response> message = Response::CreateEmpty();
168   MessageWriter writer(message.get());
169   int32_t int_value_in{8};
170   Any variant_value_in{7.5};
171   bool bool_value_in{true};
172   DBusParamWriter::AppendDBusOutParams(
173       &writer, 0, &int_value_in, 1, &variant_value_in, 2, &bool_value_in, 3);
174   EXPECT_EQ("ivb", message->GetSignature());
175 
176   int32_t int_value = 0;
177   Any variant_value;
178   bool bool_value = false;
179 
180   MessageReader reader(message.get());
181   EXPECT_TRUE(PopValueFromReader(&reader, &int_value));
182   EXPECT_TRUE(PopValueFromReader(&reader, &variant_value));
183   EXPECT_TRUE(PopValueFromReader(&reader, &bool_value));
184 
185   EXPECT_EQ(8, int_value);
186   EXPECT_DOUBLE_EQ(7.5, variant_value.Get<double>());
187   EXPECT_TRUE(bool_value);
188 }
189 }  // namespace dbus_utils
190 }  // namespace brillo
191