xref: /openbmc/sdbusplus/test/message/read.cpp (revision 2b238afb8c46824d3f0a6b3a615df2c57a16f7ed)
195269dbcSPatrick Venture #include <systemd/sd-bus-protocol.h>
295269dbcSPatrick Venture 
313367e49SWilliam A. Kennington III #include <cerrno>
4b4b4fa1fSWilliam A. Kennington III #include <map>
513367e49SWilliam A. Kennington III #include <sdbusplus/exception.hpp>
64fe85a30SPatrick Williams #include <sdbusplus/message.hpp>
7b4b4fa1fSWilliam A. Kennington III #include <sdbusplus/test/sdbus_mock.hpp>
828dc36d5SEd Tanous #include <set>
9b4b4fa1fSWilliam A. Kennington III #include <string>
10b4b4fa1fSWilliam A. Kennington III #include <tuple>
11b4b4fa1fSWilliam A. Kennington III #include <unordered_map>
12b4b4fa1fSWilliam A. Kennington III #include <vector>
134fe85a30SPatrick Williams 
1495269dbcSPatrick Venture #include <gmock/gmock.h>
1595269dbcSPatrick Venture #include <gtest/gtest.h>
1695269dbcSPatrick Venture 
17b4b4fa1fSWilliam A. Kennington III namespace
184fe85a30SPatrick Williams {
194fe85a30SPatrick Williams 
20b4b4fa1fSWilliam A. Kennington III using testing::DoAll;
21b4b4fa1fSWilliam A. Kennington III using testing::Return;
22b4b4fa1fSWilliam A. Kennington III using testing::StrEq;
23b4b4fa1fSWilliam A. Kennington III 
24b4b4fa1fSWilliam A. Kennington III ACTION_TEMPLATE(AssignReadVal, HAS_1_TEMPLATE_PARAMS(typename, T),
25b4b4fa1fSWilliam A. Kennington III                 AND_1_VALUE_PARAMS(val))
26b4b4fa1fSWilliam A. Kennington III {
27b4b4fa1fSWilliam A. Kennington III     *static_cast<T *>(arg2) = val;
284fe85a30SPatrick Williams }
294fe85a30SPatrick Williams 
30b4b4fa1fSWilliam A. Kennington III class ReadTest : public testing::Test
314fe85a30SPatrick Williams {
32b4b4fa1fSWilliam A. Kennington III   protected:
33b4b4fa1fSWilliam A. Kennington III     testing::StrictMock<sdbusplus::SdBusMock> mock;
344fe85a30SPatrick Williams 
35b4b4fa1fSWilliam A. Kennington III     void SetUp() override
364fe85a30SPatrick Williams     {
37b4b4fa1fSWilliam A. Kennington III         EXPECT_CALL(mock, sd_bus_message_new_method_call(testing::_, testing::_,
38b4b4fa1fSWilliam A. Kennington III                                                          nullptr, nullptr,
39b4b4fa1fSWilliam A. Kennington III                                                          nullptr, nullptr))
40b4b4fa1fSWilliam A. Kennington III             .WillRepeatedly(Return(0));
41b4b4fa1fSWilliam A. Kennington III     };
424fe85a30SPatrick Williams 
43b4b4fa1fSWilliam A. Kennington III     sdbusplus::message::message new_message()
444fe85a30SPatrick Williams     {
45b4b4fa1fSWilliam A. Kennington III         return sdbusplus::get_mocked_new(&mock).new_method_call(
46b4b4fa1fSWilliam A. Kennington III             nullptr, nullptr, nullptr, nullptr);
474fe85a30SPatrick Williams     }
484fe85a30SPatrick Williams 
4913367e49SWilliam A. Kennington III     void expect_basic_error(char type, int ret)
5013367e49SWilliam A. Kennington III     {
5113367e49SWilliam A. Kennington III         EXPECT_CALL(mock, sd_bus_message_read_basic(nullptr, type, testing::_))
5213367e49SWilliam A. Kennington III             .WillOnce(Return(ret));
5313367e49SWilliam A. Kennington III     }
5413367e49SWilliam A. Kennington III 
55*2b238afbSPatrick Venture     template <typename T>
56*2b238afbSPatrick Venture     void expect_basic(char type, T val)
574fe85a30SPatrick Williams     {
58b4b4fa1fSWilliam A. Kennington III         EXPECT_CALL(mock, sd_bus_message_read_basic(nullptr, type, testing::_))
59b4b4fa1fSWilliam A. Kennington III             .WillOnce(DoAll(AssignReadVal<T>(val), Return(0)));
60b4b4fa1fSWilliam A. Kennington III     }
614fe85a30SPatrick Williams 
62b4b4fa1fSWilliam A. Kennington III     void expect_verify_type(char type, const char *contents, int ret)
634fe85a30SPatrick Williams     {
64b4b4fa1fSWilliam A. Kennington III         EXPECT_CALL(mock,
65b4b4fa1fSWilliam A. Kennington III                     sd_bus_message_verify_type(nullptr, type, StrEq(contents)))
66b4b4fa1fSWilliam A. Kennington III             .WillOnce(Return(ret));
67b4b4fa1fSWilliam A. Kennington III     }
684fe85a30SPatrick Williams 
69b4b4fa1fSWilliam A. Kennington III     void expect_at_end(bool complete, int ret)
70b4b4fa1fSWilliam A. Kennington III     {
71b4b4fa1fSWilliam A. Kennington III         EXPECT_CALL(mock, sd_bus_message_at_end(nullptr, complete))
72b4b4fa1fSWilliam A. Kennington III             .WillOnce(Return(ret));
73b4b4fa1fSWilliam A. Kennington III     }
74b4b4fa1fSWilliam A. Kennington III 
7513367e49SWilliam A. Kennington III     void expect_skip(const char *contents, int ret = 0)
7660a72835SWilliam A. Kennington III     {
7760a72835SWilliam A. Kennington III         EXPECT_CALL(mock, sd_bus_message_skip(nullptr, StrEq(contents)))
7813367e49SWilliam A. Kennington III             .WillOnce(Return(ret));
7960a72835SWilliam A. Kennington III     }
8060a72835SWilliam A. Kennington III 
8113367e49SWilliam A. Kennington III     void expect_enter_container(char type, const char *contents, int ret = 0)
82b4b4fa1fSWilliam A. Kennington III     {
83b4b4fa1fSWilliam A. Kennington III         EXPECT_CALL(mock, sd_bus_message_enter_container(nullptr, type,
84b4b4fa1fSWilliam A. Kennington III                                                          StrEq(contents)))
8513367e49SWilliam A. Kennington III             .WillOnce(Return(ret));
86b4b4fa1fSWilliam A. Kennington III     }
87b4b4fa1fSWilliam A. Kennington III 
8813367e49SWilliam A. Kennington III     void expect_exit_container(int ret = 0)
89b4b4fa1fSWilliam A. Kennington III     {
90b4b4fa1fSWilliam A. Kennington III         EXPECT_CALL(mock, sd_bus_message_exit_container(nullptr))
9113367e49SWilliam A. Kennington III             .WillOnce(Return(ret));
92b4b4fa1fSWilliam A. Kennington III     }
93b4b4fa1fSWilliam A. Kennington III };
94b4b4fa1fSWilliam A. Kennington III 
95b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Int)
96b4b4fa1fSWilliam A. Kennington III {
97b4b4fa1fSWilliam A. Kennington III     const int i = 1;
98b4b4fa1fSWilliam A. Kennington III     expect_basic<int>(SD_BUS_TYPE_INT32, i);
99b4b4fa1fSWilliam A. Kennington III     int ret;
100b4b4fa1fSWilliam A. Kennington III     new_message().read(ret);
101b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(i, ret);
102b4b4fa1fSWilliam A. Kennington III }
103b4b4fa1fSWilliam A. Kennington III 
104b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Bool)
105b4b4fa1fSWilliam A. Kennington III {
106b4b4fa1fSWilliam A. Kennington III     const bool b = true;
107b4b4fa1fSWilliam A. Kennington III     expect_basic<int>(SD_BUS_TYPE_BOOLEAN, b);
108b4b4fa1fSWilliam A. Kennington III     bool ret;
109b4b4fa1fSWilliam A. Kennington III     new_message().read(ret);
110b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(b, ret);
111b4b4fa1fSWilliam A. Kennington III }
112b4b4fa1fSWilliam A. Kennington III 
113b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Double)
114b4b4fa1fSWilliam A. Kennington III {
115b4b4fa1fSWilliam A. Kennington III     const double d = 1.1;
116b4b4fa1fSWilliam A. Kennington III     expect_basic<double>(SD_BUS_TYPE_DOUBLE, d);
117b4b4fa1fSWilliam A. Kennington III     double ret;
118b4b4fa1fSWilliam A. Kennington III     new_message().read(ret);
119b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(d, ret);
120b4b4fa1fSWilliam A. Kennington III }
121b4b4fa1fSWilliam A. Kennington III 
122b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, CString)
123b4b4fa1fSWilliam A. Kennington III {
124b4b4fa1fSWilliam A. Kennington III     const char *const s = "asdf";
125b4b4fa1fSWilliam A. Kennington III     expect_basic<const char *>(SD_BUS_TYPE_STRING, s);
126b4b4fa1fSWilliam A. Kennington III     const char *ret;
127b4b4fa1fSWilliam A. Kennington III     new_message().read(ret);
128b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(s, ret);
129b4b4fa1fSWilliam A. Kennington III }
130b4b4fa1fSWilliam A. Kennington III 
131b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, String)
132b4b4fa1fSWilliam A. Kennington III {
133b4b4fa1fSWilliam A. Kennington III     const char *const s = "fsda";
134b4b4fa1fSWilliam A. Kennington III     expect_basic<const char *>(SD_BUS_TYPE_STRING, s);
135b4b4fa1fSWilliam A. Kennington III     std::string ret;
136b4b4fa1fSWilliam A. Kennington III     new_message().read(ret);
137b4b4fa1fSWilliam A. Kennington III     // Pointer comparison here is intentional as we don't expect a copy
138b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(s, ret);
139b4b4fa1fSWilliam A. Kennington III }
140b4b4fa1fSWilliam A. Kennington III 
141b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, ObjectPath)
142b4b4fa1fSWilliam A. Kennington III {
143b4b4fa1fSWilliam A. Kennington III     const char *const s = "/fsda";
144b4b4fa1fSWilliam A. Kennington III     expect_basic<const char *>(SD_BUS_TYPE_OBJECT_PATH, s);
145b4b4fa1fSWilliam A. Kennington III     sdbusplus::message::object_path ret;
146b4b4fa1fSWilliam A. Kennington III     new_message().read(ret);
147b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(s, ret.str);
148b4b4fa1fSWilliam A. Kennington III }
149b4b4fa1fSWilliam A. Kennington III 
150b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Signature)
151b4b4fa1fSWilliam A. Kennington III {
152b4b4fa1fSWilliam A. Kennington III     const char *const s = "{ii}";
153b4b4fa1fSWilliam A. Kennington III     expect_basic<const char *>(SD_BUS_TYPE_SIGNATURE, s);
154b4b4fa1fSWilliam A. Kennington III     sdbusplus::message::signature ret;
155b4b4fa1fSWilliam A. Kennington III     new_message().read(ret);
156b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(s, ret.str);
157b4b4fa1fSWilliam A. Kennington III }
158b4b4fa1fSWilliam A. Kennington III 
159b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, CombinedBasic)
160b4b4fa1fSWilliam A. Kennington III {
161b4b4fa1fSWilliam A. Kennington III     const double a = 2.2;
162b4b4fa1fSWilliam A. Kennington III     const char *const b = "ijkd";
163b4b4fa1fSWilliam A. Kennington III     const bool c = false;
164b4b4fa1fSWilliam A. Kennington III     const int d = 18;
165b4b4fa1fSWilliam A. Kennington III 
166b4b4fa1fSWilliam A. Kennington III     {
167b4b4fa1fSWilliam A. Kennington III         testing::InSequence seq;
168b4b4fa1fSWilliam A. Kennington III         expect_basic<double>(SD_BUS_TYPE_DOUBLE, a);
169b4b4fa1fSWilliam A. Kennington III         expect_basic<const char *>(SD_BUS_TYPE_STRING, b);
170b4b4fa1fSWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_BOOLEAN, c);
171b4b4fa1fSWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, d);
172b4b4fa1fSWilliam A. Kennington III     }
173b4b4fa1fSWilliam A. Kennington III 
174b4b4fa1fSWilliam A. Kennington III     double ret_a;
175b4b4fa1fSWilliam A. Kennington III     const char *ret_b;
176b4b4fa1fSWilliam A. Kennington III     bool ret_c;
177b4b4fa1fSWilliam A. Kennington III     int ret_d;
178b4b4fa1fSWilliam A. Kennington III     new_message().read(ret_a, ret_b, ret_c, ret_d);
179b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(a, ret_a);
180b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(b, ret_b);
181b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(c, ret_c);
182b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(d, ret_d);
183b4b4fa1fSWilliam A. Kennington III }
184b4b4fa1fSWilliam A. Kennington III 
18513367e49SWilliam A. Kennington III TEST_F(ReadTest, BasicError)
18613367e49SWilliam A. Kennington III {
18713367e49SWilliam A. Kennington III     expect_basic_error(SD_BUS_TYPE_INT32, -EINVAL);
18813367e49SWilliam A. Kennington III     int ret;
18913367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
19013367e49SWilliam A. Kennington III }
19113367e49SWilliam A. Kennington III 
19213367e49SWilliam A. Kennington III TEST_F(ReadTest, BasicStringError)
19313367e49SWilliam A. Kennington III {
19413367e49SWilliam A. Kennington III     expect_basic_error(SD_BUS_TYPE_STRING, -EINVAL);
19513367e49SWilliam A. Kennington III     std::string ret;
19613367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
19713367e49SWilliam A. Kennington III }
19813367e49SWilliam A. Kennington III 
19913367e49SWilliam A. Kennington III TEST_F(ReadTest, BasicStringWrapperError)
20013367e49SWilliam A. Kennington III {
20113367e49SWilliam A. Kennington III     expect_basic_error(SD_BUS_TYPE_SIGNATURE, -EINVAL);
20213367e49SWilliam A. Kennington III     sdbusplus::message::signature ret;
20313367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
20413367e49SWilliam A. Kennington III }
20513367e49SWilliam A. Kennington III 
20613367e49SWilliam A. Kennington III TEST_F(ReadTest, BasicBoolError)
20713367e49SWilliam A. Kennington III {
20813367e49SWilliam A. Kennington III     expect_basic_error(SD_BUS_TYPE_BOOLEAN, -EINVAL);
20913367e49SWilliam A. Kennington III     bool ret;
21013367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
21113367e49SWilliam A. Kennington III }
21213367e49SWilliam A. Kennington III 
213b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Vector)
214b4b4fa1fSWilliam A. Kennington III {
215b4b4fa1fSWilliam A. Kennington III     const std::vector<int> vi{1, 2, 3, 4};
216b4b4fa1fSWilliam A. Kennington III 
217b4b4fa1fSWilliam A. Kennington III     {
218b4b4fa1fSWilliam A. Kennington III         testing::InSequence seq;
219b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "i");
220b4b4fa1fSWilliam A. Kennington III         for (const auto &i : vi)
221b4b4fa1fSWilliam A. Kennington III         {
222b4b4fa1fSWilliam A. Kennington III             expect_at_end(false, 0);
223b4b4fa1fSWilliam A. Kennington III             expect_basic<int>(SD_BUS_TYPE_INT32, i);
224b4b4fa1fSWilliam A. Kennington III         }
225b4b4fa1fSWilliam A. Kennington III         expect_at_end(false, 1);
226b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
227b4b4fa1fSWilliam A. Kennington III     }
228b4b4fa1fSWilliam A. Kennington III 
229b4b4fa1fSWilliam A. Kennington III     std::vector<int> ret_vi;
230b4b4fa1fSWilliam A. Kennington III     new_message().read(ret_vi);
231b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(vi, ret_vi);
232b4b4fa1fSWilliam A. Kennington III }
233b4b4fa1fSWilliam A. Kennington III 
23413367e49SWilliam A. Kennington III TEST_F(ReadTest, VectorEnterError)
23513367e49SWilliam A. Kennington III {
23613367e49SWilliam A. Kennington III     {
23713367e49SWilliam A. Kennington III         testing::InSequence seq;
23813367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "i", -EINVAL);
23913367e49SWilliam A. Kennington III     }
24013367e49SWilliam A. Kennington III 
24113367e49SWilliam A. Kennington III     std::vector<int> ret;
24213367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
24313367e49SWilliam A. Kennington III }
24413367e49SWilliam A. Kennington III 
24513367e49SWilliam A. Kennington III TEST_F(ReadTest, VectorIterError)
24613367e49SWilliam A. Kennington III {
24713367e49SWilliam A. Kennington III     {
24813367e49SWilliam A. Kennington III         testing::InSequence seq;
24913367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "i");
25013367e49SWilliam A. Kennington III         expect_at_end(false, 0);
25113367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, 1);
25213367e49SWilliam A. Kennington III         expect_at_end(false, -EINVAL);
25313367e49SWilliam A. Kennington III     }
25413367e49SWilliam A. Kennington III 
25513367e49SWilliam A. Kennington III     std::vector<int> ret;
25613367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
25713367e49SWilliam A. Kennington III }
25813367e49SWilliam A. Kennington III 
25913367e49SWilliam A. Kennington III TEST_F(ReadTest, VectorExitError)
26013367e49SWilliam A. Kennington III {
26113367e49SWilliam A. Kennington III     {
26213367e49SWilliam A. Kennington III         testing::InSequence seq;
26313367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "i");
26413367e49SWilliam A. Kennington III         expect_at_end(false, 0);
26513367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, 1);
26613367e49SWilliam A. Kennington III         expect_at_end(false, 0);
26713367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, 2);
26813367e49SWilliam A. Kennington III         expect_at_end(false, 1);
26913367e49SWilliam A. Kennington III         expect_exit_container(-EINVAL);
27013367e49SWilliam A. Kennington III     }
27113367e49SWilliam A. Kennington III 
27213367e49SWilliam A. Kennington III     std::vector<int> ret;
27313367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
27413367e49SWilliam A. Kennington III }
27513367e49SWilliam A. Kennington III 
276b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Set)
277b4b4fa1fSWilliam A. Kennington III {
278b4b4fa1fSWilliam A. Kennington III     const std::set<std::string> ss{"one", "two", "eight"};
279b4b4fa1fSWilliam A. Kennington III 
280b4b4fa1fSWilliam A. Kennington III     {
281b4b4fa1fSWilliam A. Kennington III         testing::InSequence seq;
282b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "s");
283b4b4fa1fSWilliam A. Kennington III         for (const auto &s : ss)
284b4b4fa1fSWilliam A. Kennington III         {
285b4b4fa1fSWilliam A. Kennington III             expect_at_end(false, 0);
286b4b4fa1fSWilliam A. Kennington III             expect_basic<const char *>(SD_BUS_TYPE_STRING, s.c_str());
287b4b4fa1fSWilliam A. Kennington III         }
288b4b4fa1fSWilliam A. Kennington III         expect_at_end(false, 1);
289b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
290b4b4fa1fSWilliam A. Kennington III     }
291b4b4fa1fSWilliam A. Kennington III 
292b4b4fa1fSWilliam A. Kennington III     std::set<std::string> ret_ss;
293b4b4fa1fSWilliam A. Kennington III     new_message().read(ret_ss);
294b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(ss, ret_ss);
295b4b4fa1fSWilliam A. Kennington III }
296b4b4fa1fSWilliam A. Kennington III 
297b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Map)
298b4b4fa1fSWilliam A. Kennington III {
299b4b4fa1fSWilliam A. Kennington III     const std::map<int, std::string> mis{
300b4b4fa1fSWilliam A. Kennington III         {1, "a"},
301b4b4fa1fSWilliam A. Kennington III         {2, "bc"},
302b4b4fa1fSWilliam A. Kennington III         {3, "def"},
303b4b4fa1fSWilliam A. Kennington III         {4, "ghij"},
304b4b4fa1fSWilliam A. Kennington III     };
305b4b4fa1fSWilliam A. Kennington III 
306b4b4fa1fSWilliam A. Kennington III     {
307b4b4fa1fSWilliam A. Kennington III         testing::InSequence seq;
308b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "{is}");
309b4b4fa1fSWilliam A. Kennington III         for (const auto &is : mis)
310b4b4fa1fSWilliam A. Kennington III         {
311b4b4fa1fSWilliam A. Kennington III             expect_at_end(false, 0);
312b4b4fa1fSWilliam A. Kennington III             expect_enter_container(SD_BUS_TYPE_DICT_ENTRY, "is");
313b4b4fa1fSWilliam A. Kennington III             expect_basic<int>(SD_BUS_TYPE_INT32, is.first);
314b4b4fa1fSWilliam A. Kennington III             expect_basic<const char *>(SD_BUS_TYPE_STRING, is.second.c_str());
315b4b4fa1fSWilliam A. Kennington III             expect_exit_container();
316b4b4fa1fSWilliam A. Kennington III         }
317b4b4fa1fSWilliam A. Kennington III         expect_at_end(false, 1);
318b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
319b4b4fa1fSWilliam A. Kennington III     }
320b4b4fa1fSWilliam A. Kennington III 
321b4b4fa1fSWilliam A. Kennington III     std::map<int, std::string> ret_mis;
322b4b4fa1fSWilliam A. Kennington III     new_message().read(ret_mis);
323b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(mis, ret_mis);
324b4b4fa1fSWilliam A. Kennington III }
325b4b4fa1fSWilliam A. Kennington III 
32613367e49SWilliam A. Kennington III TEST_F(ReadTest, MapEnterError)
32713367e49SWilliam A. Kennington III {
32813367e49SWilliam A. Kennington III     {
32913367e49SWilliam A. Kennington III         testing::InSequence seq;
33013367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "{si}", -EINVAL);
33113367e49SWilliam A. Kennington III     }
33213367e49SWilliam A. Kennington III 
33313367e49SWilliam A. Kennington III     std::map<std::string, int> ret;
33413367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
33513367e49SWilliam A. Kennington III }
33613367e49SWilliam A. Kennington III 
33713367e49SWilliam A. Kennington III TEST_F(ReadTest, MapEntryEnterError)
33813367e49SWilliam A. Kennington III {
33913367e49SWilliam A. Kennington III     {
34013367e49SWilliam A. Kennington III         testing::InSequence seq;
34113367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "{si}");
34213367e49SWilliam A. Kennington III         expect_at_end(false, 0);
34313367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_DICT_ENTRY, "si", -EINVAL);
34413367e49SWilliam A. Kennington III     }
34513367e49SWilliam A. Kennington III 
34613367e49SWilliam A. Kennington III     std::map<std::string, int> ret;
34713367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
34813367e49SWilliam A. Kennington III }
34913367e49SWilliam A. Kennington III 
35013367e49SWilliam A. Kennington III TEST_F(ReadTest, MapEntryExitError)
35113367e49SWilliam A. Kennington III {
35213367e49SWilliam A. Kennington III     {
35313367e49SWilliam A. Kennington III         testing::InSequence seq;
35413367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "{si}");
35513367e49SWilliam A. Kennington III         expect_at_end(false, 0);
35613367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_DICT_ENTRY, "si");
35713367e49SWilliam A. Kennington III         expect_basic<const char *>(SD_BUS_TYPE_STRING, "ab");
35813367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, 1);
35913367e49SWilliam A. Kennington III         expect_exit_container(-EINVAL);
36013367e49SWilliam A. Kennington III     }
36113367e49SWilliam A. Kennington III 
36213367e49SWilliam A. Kennington III     std::map<std::string, int> ret;
36313367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
36413367e49SWilliam A. Kennington III }
36513367e49SWilliam A. Kennington III 
36613367e49SWilliam A. Kennington III TEST_F(ReadTest, MapIterError)
36713367e49SWilliam A. Kennington III {
36813367e49SWilliam A. Kennington III     {
36913367e49SWilliam A. Kennington III         testing::InSequence seq;
37013367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "{si}");
37113367e49SWilliam A. Kennington III         expect_at_end(false, 0);
37213367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_DICT_ENTRY, "si");
37313367e49SWilliam A. Kennington III         expect_basic<const char *>(SD_BUS_TYPE_STRING, "ab");
37413367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, 1);
37513367e49SWilliam A. Kennington III         expect_exit_container();
37613367e49SWilliam A. Kennington III         expect_at_end(false, -EINVAL);
37713367e49SWilliam A. Kennington III     }
37813367e49SWilliam A. Kennington III 
37913367e49SWilliam A. Kennington III     std::map<std::string, int> ret;
38013367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
38113367e49SWilliam A. Kennington III }
38213367e49SWilliam A. Kennington III 
38313367e49SWilliam A. Kennington III TEST_F(ReadTest, MapExitError)
38413367e49SWilliam A. Kennington III {
38513367e49SWilliam A. Kennington III     {
38613367e49SWilliam A. Kennington III         testing::InSequence seq;
38713367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "{si}");
38813367e49SWilliam A. Kennington III         expect_at_end(false, 0);
38913367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_DICT_ENTRY, "si");
39013367e49SWilliam A. Kennington III         expect_basic<const char *>(SD_BUS_TYPE_STRING, "ab");
39113367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, 1);
39213367e49SWilliam A. Kennington III         expect_exit_container();
39313367e49SWilliam A. Kennington III         expect_at_end(false, 1);
39413367e49SWilliam A. Kennington III         expect_exit_container(-EINVAL);
39513367e49SWilliam A. Kennington III     }
39613367e49SWilliam A. Kennington III 
39713367e49SWilliam A. Kennington III     std::map<std::string, int> ret;
39813367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
39913367e49SWilliam A. Kennington III }
40013367e49SWilliam A. Kennington III 
401b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, UnorderedMap)
402b4b4fa1fSWilliam A. Kennington III {
403b4b4fa1fSWilliam A. Kennington III     const std::unordered_map<int, std::string> mis{
404b4b4fa1fSWilliam A. Kennington III         {1, "a"},
405b4b4fa1fSWilliam A. Kennington III         {2, "bc"},
406b4b4fa1fSWilliam A. Kennington III         {3, "def"},
407b4b4fa1fSWilliam A. Kennington III         {4, "ghij"},
408b4b4fa1fSWilliam A. Kennington III     };
409b4b4fa1fSWilliam A. Kennington III 
410b4b4fa1fSWilliam A. Kennington III     {
411b4b4fa1fSWilliam A. Kennington III         testing::InSequence seq;
412b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "{is}");
413b4b4fa1fSWilliam A. Kennington III         for (const auto &is : mis)
414b4b4fa1fSWilliam A. Kennington III         {
415b4b4fa1fSWilliam A. Kennington III             expect_at_end(false, 0);
416b4b4fa1fSWilliam A. Kennington III             expect_enter_container(SD_BUS_TYPE_DICT_ENTRY, "is");
417b4b4fa1fSWilliam A. Kennington III             expect_basic<int>(SD_BUS_TYPE_INT32, is.first);
418b4b4fa1fSWilliam A. Kennington III             expect_basic<const char *>(SD_BUS_TYPE_STRING, is.second.c_str());
419b4b4fa1fSWilliam A. Kennington III             expect_exit_container();
420b4b4fa1fSWilliam A. Kennington III         }
421b4b4fa1fSWilliam A. Kennington III         expect_at_end(false, 1);
422b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
423b4b4fa1fSWilliam A. Kennington III     }
424b4b4fa1fSWilliam A. Kennington III 
425b4b4fa1fSWilliam A. Kennington III     std::unordered_map<int, std::string> ret_mis;
426b4b4fa1fSWilliam A. Kennington III     new_message().read(ret_mis);
427b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(mis, ret_mis);
428b4b4fa1fSWilliam A. Kennington III }
429b4b4fa1fSWilliam A. Kennington III 
430b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Tuple)
431b4b4fa1fSWilliam A. Kennington III {
432b4b4fa1fSWilliam A. Kennington III     const std::tuple<int, std::string, bool> tisb{3, "hi", false};
433b4b4fa1fSWilliam A. Kennington III 
434b4b4fa1fSWilliam A. Kennington III     {
435b4b4fa1fSWilliam A. Kennington III         testing::InSequence seq;
436b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_STRUCT, "isb");
437b4b4fa1fSWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, std::get<0>(tisb));
438b4b4fa1fSWilliam A. Kennington III         expect_basic<const char *>(SD_BUS_TYPE_STRING,
439b4b4fa1fSWilliam A. Kennington III                                    std::get<1>(tisb).c_str());
440b4b4fa1fSWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_BOOLEAN, std::get<2>(tisb));
441b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
442b4b4fa1fSWilliam A. Kennington III     }
443b4b4fa1fSWilliam A. Kennington III 
444b4b4fa1fSWilliam A. Kennington III     std::tuple<int, std::string, bool> ret_tisb;
445b4b4fa1fSWilliam A. Kennington III     new_message().read(ret_tisb);
446b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(tisb, ret_tisb);
447b4b4fa1fSWilliam A. Kennington III }
448b4b4fa1fSWilliam A. Kennington III 
44913367e49SWilliam A. Kennington III TEST_F(ReadTest, TupleEnterError)
45013367e49SWilliam A. Kennington III {
45113367e49SWilliam A. Kennington III     {
45213367e49SWilliam A. Kennington III         testing::InSequence seq;
45313367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_STRUCT, "bis", -EINVAL);
45413367e49SWilliam A. Kennington III     }
45513367e49SWilliam A. Kennington III 
45613367e49SWilliam A. Kennington III     std::tuple<bool, int, std::string> ret;
45713367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
45813367e49SWilliam A. Kennington III }
45913367e49SWilliam A. Kennington III 
46013367e49SWilliam A. Kennington III TEST_F(ReadTest, TupleExitError)
46113367e49SWilliam A. Kennington III {
46213367e49SWilliam A. Kennington III     {
46313367e49SWilliam A. Kennington III         testing::InSequence seq;
46413367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_STRUCT, "bis");
46513367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_BOOLEAN, false);
46613367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, 1);
46713367e49SWilliam A. Kennington III         expect_basic<const char *>(SD_BUS_TYPE_STRING, "ab");
46813367e49SWilliam A. Kennington III         expect_exit_container(-EINVAL);
46913367e49SWilliam A. Kennington III     }
47013367e49SWilliam A. Kennington III 
47113367e49SWilliam A. Kennington III     std::tuple<bool, int, std::string> ret;
47213367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
47313367e49SWilliam A. Kennington III }
47413367e49SWilliam A. Kennington III 
475b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, Variant)
476b4b4fa1fSWilliam A. Kennington III {
477b4b4fa1fSWilliam A. Kennington III     const bool b1 = false;
478b4b4fa1fSWilliam A. Kennington III     const std::string s2{"asdf"};
479b4b4fa1fSWilliam A. Kennington III     const sdbusplus::message::variant<int, std::string, bool> v1{b1}, v2{s2};
480b4b4fa1fSWilliam A. Kennington III 
481b4b4fa1fSWilliam A. Kennington III     {
482b4b4fa1fSWilliam A. Kennington III         testing::InSequence seq;
483b4b4fa1fSWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "i", false);
484b4b4fa1fSWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "s", false);
485b4b4fa1fSWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "b", true);
486b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_VARIANT, "b");
487b4b4fa1fSWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_BOOLEAN, b1);
488b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
489b4b4fa1fSWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "i", false);
490b4b4fa1fSWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "s", true);
491b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_VARIANT, "s");
492b4b4fa1fSWilliam A. Kennington III         expect_basic<const char *>(SD_BUS_TYPE_STRING, s2.c_str());
493b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
494b4b4fa1fSWilliam A. Kennington III     }
495b4b4fa1fSWilliam A. Kennington III 
496b4b4fa1fSWilliam A. Kennington III     sdbusplus::message::variant<int, std::string, bool> ret_v1, ret_v2;
497b4b4fa1fSWilliam A. Kennington III     new_message().read(ret_v1, ret_v2);
498b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(v1, ret_v1);
499b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(v2, ret_v2);
500b4b4fa1fSWilliam A. Kennington III }
501b4b4fa1fSWilliam A. Kennington III 
50213367e49SWilliam A. Kennington III TEST_F(ReadTest, VariantVerifyError)
50313367e49SWilliam A. Kennington III {
50413367e49SWilliam A. Kennington III     {
50513367e49SWilliam A. Kennington III         testing::InSequence seq;
50613367e49SWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "i", -EINVAL);
50713367e49SWilliam A. Kennington III     }
50813367e49SWilliam A. Kennington III 
50913367e49SWilliam A. Kennington III     sdbusplus::message::variant<int, bool> ret;
51013367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
51113367e49SWilliam A. Kennington III }
51213367e49SWilliam A. Kennington III 
51360a72835SWilliam A. Kennington III TEST_F(ReadTest, VariantSkipUnmatched)
51460a72835SWilliam A. Kennington III {
51560a72835SWilliam A. Kennington III     {
51660a72835SWilliam A. Kennington III         testing::InSequence seq;
51760a72835SWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "i", false);
51860a72835SWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "b", false);
51960a72835SWilliam A. Kennington III         expect_skip("v");
52060a72835SWilliam A. Kennington III     }
52113367e49SWilliam A. Kennington III 
52260a72835SWilliam A. Kennington III     sdbusplus::message::variant<int, bool> ret;
52360a72835SWilliam A. Kennington III     new_message().read(ret);
52460a72835SWilliam A. Kennington III }
52560a72835SWilliam A. Kennington III 
52613367e49SWilliam A. Kennington III TEST_F(ReadTest, VariantSkipError)
52713367e49SWilliam A. Kennington III {
52813367e49SWilliam A. Kennington III     {
52913367e49SWilliam A. Kennington III         testing::InSequence seq;
53013367e49SWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "i", false);
53113367e49SWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "b", false);
53213367e49SWilliam A. Kennington III         expect_skip("v", -EINVAL);
53313367e49SWilliam A. Kennington III     }
53413367e49SWilliam A. Kennington III 
53513367e49SWilliam A. Kennington III     sdbusplus::message::variant<int, bool> ret;
53613367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
53713367e49SWilliam A. Kennington III }
53813367e49SWilliam A. Kennington III 
53913367e49SWilliam A. Kennington III TEST_F(ReadTest, VariantEnterError)
54013367e49SWilliam A. Kennington III {
54113367e49SWilliam A. Kennington III     {
54213367e49SWilliam A. Kennington III         testing::InSequence seq;
54313367e49SWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "i", true);
54413367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_VARIANT, "i", -EINVAL);
54513367e49SWilliam A. Kennington III     }
54613367e49SWilliam A. Kennington III 
54713367e49SWilliam A. Kennington III     sdbusplus::message::variant<int, bool> ret;
54813367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
54913367e49SWilliam A. Kennington III }
55013367e49SWilliam A. Kennington III 
55113367e49SWilliam A. Kennington III TEST_F(ReadTest, VariantExitError)
55213367e49SWilliam A. Kennington III {
55313367e49SWilliam A. Kennington III     {
55413367e49SWilliam A. Kennington III         testing::InSequence seq;
55513367e49SWilliam A. Kennington III         expect_verify_type(SD_BUS_TYPE_VARIANT, "i", true);
55613367e49SWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_VARIANT, "i");
55713367e49SWilliam A. Kennington III         expect_basic<int>(SD_BUS_TYPE_INT32, 10);
55813367e49SWilliam A. Kennington III         expect_exit_container(-EINVAL);
55913367e49SWilliam A. Kennington III     }
56013367e49SWilliam A. Kennington III 
56113367e49SWilliam A. Kennington III     sdbusplus::message::variant<int, bool> ret;
56213367e49SWilliam A. Kennington III     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
56313367e49SWilliam A. Kennington III }
56413367e49SWilliam A. Kennington III 
565b4b4fa1fSWilliam A. Kennington III TEST_F(ReadTest, LargeCombo)
566b4b4fa1fSWilliam A. Kennington III {
567b4b4fa1fSWilliam A. Kennington III     const std::vector<std::set<std::string>> vas{
568b4b4fa1fSWilliam A. Kennington III         {"a", "b", "c"},
569b4b4fa1fSWilliam A. Kennington III         {"d", "", "e"},
570b4b4fa1fSWilliam A. Kennington III     };
571b4b4fa1fSWilliam A. Kennington III     const std::map<std::string, sdbusplus::message::variant<int, double>> msv =
572b4b4fa1fSWilliam A. Kennington III         {{"a", 3.3}, {"b", 1}, {"c", 4.4}};
573b4b4fa1fSWilliam A. Kennington III 
574b4b4fa1fSWilliam A. Kennington III     {
575b4b4fa1fSWilliam A. Kennington III         testing::InSequence seq;
576b4b4fa1fSWilliam A. Kennington III 
577b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "as");
578b4b4fa1fSWilliam A. Kennington III         for (const auto &as : vas)
579b4b4fa1fSWilliam A. Kennington III         {
580b4b4fa1fSWilliam A. Kennington III             expect_at_end(false, 0);
581b4b4fa1fSWilliam A. Kennington III             expect_enter_container(SD_BUS_TYPE_ARRAY, "s");
582b4b4fa1fSWilliam A. Kennington III             for (const auto &s : as)
583b4b4fa1fSWilliam A. Kennington III             {
584b4b4fa1fSWilliam A. Kennington III                 expect_at_end(false, 0);
585b4b4fa1fSWilliam A. Kennington III                 expect_basic<const char *>(SD_BUS_TYPE_STRING, s.c_str());
586b4b4fa1fSWilliam A. Kennington III             }
587b4b4fa1fSWilliam A. Kennington III             expect_at_end(false, 1);
588b4b4fa1fSWilliam A. Kennington III             expect_exit_container();
589b4b4fa1fSWilliam A. Kennington III         }
590b4b4fa1fSWilliam A. Kennington III         expect_at_end(false, 1);
591b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
592b4b4fa1fSWilliam A. Kennington III 
593b4b4fa1fSWilliam A. Kennington III         expect_enter_container(SD_BUS_TYPE_ARRAY, "{sv}");
594b4b4fa1fSWilliam A. Kennington III         for (const auto &sv : msv)
595b4b4fa1fSWilliam A. Kennington III         {
596b4b4fa1fSWilliam A. Kennington III             expect_at_end(false, 0);
597b4b4fa1fSWilliam A. Kennington III             expect_enter_container(SD_BUS_TYPE_DICT_ENTRY, "sv");
598b4b4fa1fSWilliam A. Kennington III             expect_basic<const char *>(SD_BUS_TYPE_STRING, sv.first.c_str());
599b4b4fa1fSWilliam A. Kennington III             if (sv.second.is<int>())
600b4b4fa1fSWilliam A. Kennington III             {
601b4b4fa1fSWilliam A. Kennington III                 expect_verify_type(SD_BUS_TYPE_VARIANT, "i", true);
602b4b4fa1fSWilliam A. Kennington III                 expect_enter_container(SD_BUS_TYPE_VARIANT, "i");
603b4b4fa1fSWilliam A. Kennington III                 expect_basic<int>(SD_BUS_TYPE_INT32, sv.second.get<int>());
604b4b4fa1fSWilliam A. Kennington III                 expect_exit_container();
6054fe85a30SPatrick Williams             }
6064fe85a30SPatrick Williams             else
6074fe85a30SPatrick Williams             {
608b4b4fa1fSWilliam A. Kennington III                 expect_verify_type(SD_BUS_TYPE_VARIANT, "i", false);
609b4b4fa1fSWilliam A. Kennington III                 expect_verify_type(SD_BUS_TYPE_VARIANT, "d", true);
610b4b4fa1fSWilliam A. Kennington III                 expect_enter_container(SD_BUS_TYPE_VARIANT, "d");
611b4b4fa1fSWilliam A. Kennington III                 expect_basic<double>(SD_BUS_TYPE_DOUBLE,
612b4b4fa1fSWilliam A. Kennington III                                      sv.second.get<double>());
613b4b4fa1fSWilliam A. Kennington III                 expect_exit_container();
6144fe85a30SPatrick Williams             }
615b4b4fa1fSWilliam A. Kennington III             expect_exit_container();
6164fe85a30SPatrick Williams         }
617b4b4fa1fSWilliam A. Kennington III         expect_at_end(false, 1);
618b4b4fa1fSWilliam A. Kennington III         expect_exit_container();
6194fe85a30SPatrick Williams     }
620696e3159SPatrick Williams 
621b4b4fa1fSWilliam A. Kennington III     std::vector<std::set<std::string>> ret_vas;
622b4b4fa1fSWilliam A. Kennington III     std::map<std::string, sdbusplus::message::variant<int, double>> ret_msv;
623b4b4fa1fSWilliam A. Kennington III     new_message().read(ret_vas, ret_msv);
624b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(vas, ret_vas);
625b4b4fa1fSWilliam A. Kennington III     EXPECT_EQ(msv, ret_msv);
6264fe85a30SPatrick Williams }
6274fe85a30SPatrick Williams 
628b4b4fa1fSWilliam A. Kennington III } // namespace
629