2
* Copyright (C) 2015 Canonical, Ltd.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 3, as published
6
* by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranties of
10
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11
* PURPOSE. See the GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License along
14
* with this program. If not, see <http://www.gnu.org/licenses/>.
19
#include <gtest/gtest.h>
21
#include <w11t/message.h>
24
w11t::Message m = w11t::Message::CreateRequest("P2P_CONNECT");
25
EXPECT_TRUE(m.ItsType() == w11t::Message::Type::kRequest);
26
EXPECT_TRUE(m.Name() == std::string("P2P_CONNECT"));
29
TEST(Message, ReadAndSkip) {
30
w11t::Message m = w11t::Message::Parse("<3>P2P-GROUP-STARTED p2p0 GO ssid=\"DIRECT-hB\" freq=2412 go_dev_addr=4e:74:03:64:95:a7");
32
struct P2PGroupStarted {
33
std::string interface_name;
35
w11t::Named<std::string> ssid{"ssid"};
36
w11t::Named<std::uint32_t> freq{"freq"};
37
w11t::Named<std::string> go_dev_addr{"go_dev_addr"};
42
EXPECT_STREQ(m.Name().c_str(), "P2P-GROUP-STARTED");
43
EXPECT_NO_THROW(m.Read(ev.interface_name, ev.type, ev.ssid, ev.freq, ev.go_dev_addr));
44
EXPECT_EQ(ev.interface_name, "p2p0");
45
EXPECT_EQ(ev.ssid.Value(), "\"DIRECT-hB\"");
46
EXPECT_EQ(ev.freq.Value(), 2412);
47
EXPECT_EQ(ev.go_dev_addr.Value(), "4e:74:03:64:95:a7");
49
m = w11t::Message::Parse("<3>P2P-GROUP-STARTED p2p0 GO -12 ssid=\"DIRECT-hB\" 45623 freq=2412 11223344 -42");
51
ev = P2PGroupStarted{};
56
EXPECT_STREQ(m.Name().c_str(), "P2P-GROUP-STARTED");
57
EXPECT_NO_THROW(m.Read(ev.interface_name, w11t::skip<std::string>(), w11t::skip<std::string>(), w11t::skip<std::string>(), ev.freq, u32, i32));
58
EXPECT_EQ(ev.interface_name, "p2p0");
59
EXPECT_EQ(ev.freq.Value(), 2412);
60
EXPECT_EQ(u32, 11223344);
64
ev = P2PGroupStarted{};
67
EXPECT_NO_THROW(m.Read(ev.interface_name, w11t::skip<std::string>(), i32));
68
EXPECT_EQ(ev.interface_name, "p2p0");
72
ev = P2PGroupStarted{};
75
EXPECT_NO_THROW(m.Read(w11t::skip<std::string>(), w11t::skip<std::string>(), w11t::skip<std::int32_t>(), ev.ssid, w11t::skip<std::int32_t>(), ev.freq));
76
EXPECT_EQ(ev.ssid.Value(), "\"DIRECT-hB\"");
77
EXPECT_EQ(ev.freq.Value(), 2412);
80
TEST(Message, Append) {
81
w11t::Message m = w11t::Message::CreateRequest("P2P_CONNECT")
82
<< "string" << -42 << 1337 << w11t::Named<std::string>{"key", "value"};
84
EXPECT_STREQ(raw.c_str(), "P2P_CONNECT string -42 1337 key=value");
86
m = w11t::Message::CreateRequest("P2P_FIND");
90
EXPECT_STREQ(raw.c_str(), "P2P_FIND 30");
93
TEST(Message, Sealing) {
94
w11t::Message m = w11t::Message::CreateRequest("P2P_CONNECT");
96
EXPECT_TRUE(!m.Sealed());
97
m << "test1" << "test2";
99
EXPECT_TRUE(m.Sealed());
100
EXPECT_THROW(m << "foo", std::logic_error);
101
EXPECT_STREQ(m.Raw().c_str(), "P2P_CONNECT test1 test2");
104
TEST(Message, CopyCtor) {
105
w11t::Message m = w11t::Message::CreateRequest("P2P_CONNECT") << "test1" << "test2";
106
EXPECT_TRUE(!m.Sealed());
107
EXPECT_EQ(m.ItsType(), w11t::Message::Type::kRequest);
108
EXPECT_STREQ(m.Name().c_str(), "P2P_CONNECT");
110
EXPECT_TRUE(m.Sealed());
111
EXPECT_STREQ(m.Raw().c_str(), "P2P_CONNECT test1 test2");
113
w11t::Message m2 = m;
114
EXPECT_TRUE(m.ItsType() == w11t::Message::Type::kRequest);
115
EXPECT_STREQ(m.Name().c_str(), "P2P_CONNECT");
116
EXPECT_TRUE(m.Sealed());
117
EXPECT_STREQ(m.Raw().c_str(), "P2P_CONNECT test1 test2");
120
TEST(Message, OkFail) {
121
w11t::Message m = w11t::Message::Parse("OK");
122
EXPECT_TRUE(m.IsOk());
124
m = w11t::Message::Parse("FAIL");
125
EXPECT_TRUE(m.IsFail());