OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license | |
5 * that can be found in the LICENSE file in the root of the source | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 #include <string> | |
12 #include <vector> | |
13 | |
14 #include "webrtc/libjingle/xmllite/xmlelement.h" | |
15 #include "webrtc/libjingle/xmpp/constants.h" | |
16 #include "webrtc/libjingle/xmpp/fakexmppclient.h" | |
17 #include "webrtc/libjingle/xmpp/mucroomdiscoverytask.h" | |
18 #include "webrtc/base/faketaskrunner.h" | |
19 #include "webrtc/base/gunit.h" | |
20 #include "webrtc/base/sigslot.h" | |
21 | |
22 class MucRoomDiscoveryListener : public sigslot::has_slots<> { | |
23 public: | |
24 MucRoomDiscoveryListener() : error_count(0) {} | |
25 | |
26 void OnResult(buzz::MucRoomDiscoveryTask* task, | |
27 bool exists, | |
28 const std::string& name, | |
29 const std::string& conversation_id, | |
30 const std::set<std::string>& features, | |
31 const std::map<std::string, std::string>& extended_info) { | |
32 last_exists = exists; | |
33 last_name = name; | |
34 last_conversation_id = conversation_id; | |
35 last_features = features; | |
36 last_extended_info = extended_info; | |
37 } | |
38 | |
39 void OnError(buzz::IqTask* task, | |
40 const buzz::XmlElement* error) { | |
41 ++error_count; | |
42 } | |
43 | |
44 bool last_exists; | |
45 std::string last_name; | |
46 std::string last_conversation_id; | |
47 std::set<std::string> last_features; | |
48 std::map<std::string, std::string> last_extended_info; | |
49 int error_count; | |
50 }; | |
51 | |
52 class MucRoomDiscoveryTaskTest : public testing::Test { | |
53 public: | |
54 MucRoomDiscoveryTaskTest() : | |
55 room_jid("muc-jid-ponies@domain.com"), | |
56 room_name("ponies"), | |
57 conversation_id("test_conversation_id") { | |
58 } | |
59 | |
60 virtual void SetUp() { | |
61 runner = new rtc::FakeTaskRunner(); | |
62 xmpp_client = new buzz::FakeXmppClient(runner); | |
63 listener = new MucRoomDiscoveryListener(); | |
64 } | |
65 | |
66 virtual void TearDown() { | |
67 delete listener; | |
68 // delete xmpp_client; Deleted by deleting runner. | |
69 delete runner; | |
70 } | |
71 | |
72 rtc::FakeTaskRunner* runner; | |
73 buzz::FakeXmppClient* xmpp_client; | |
74 MucRoomDiscoveryListener* listener; | |
75 buzz::Jid room_jid; | |
76 std::string room_name; | |
77 std::string conversation_id; | |
78 }; | |
79 | |
80 TEST_F(MucRoomDiscoveryTaskTest, TestDiscovery) { | |
81 ASSERT_EQ(0U, xmpp_client->sent_stanzas().size()); | |
82 | |
83 buzz::MucRoomDiscoveryTask* task = new buzz::MucRoomDiscoveryTask( | |
84 xmpp_client, room_jid); | |
85 task->SignalResult.connect(listener, &MucRoomDiscoveryListener::OnResult); | |
86 task->Start(); | |
87 | |
88 std::string expected_iq = | |
89 "<cli:iq type=\"get\" to=\"muc-jid-ponies@domain.com\" id=\"0\" " | |
90 "xmlns:cli=\"jabber:client\">" | |
91 "<info:query xmlns:info=\"http://jabber.org/protocol/disco#info\"/>" | |
92 "</cli:iq>"; | |
93 | |
94 ASSERT_EQ(1U, xmpp_client->sent_stanzas().size()); | |
95 EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str()); | |
96 | |
97 EXPECT_EQ("", listener->last_name); | |
98 EXPECT_EQ("", listener->last_conversation_id); | |
99 | |
100 std::string response_iq = | |
101 "<iq xmlns='jabber:client'" | |
102 " from='muc-jid-ponies@domain.com' id='0' type='result'>" | |
103 " <info:query xmlns:info='http://jabber.org/protocol/disco#info'>" | |
104 " <info:identity name='ponies'>" | |
105 " <han:conversation-id xmlns:han='google:muc#hangout'>" | |
106 "test_conversation_id</han:conversation-id>" | |
107 " </info:identity>" | |
108 " <info:feature var='feature1'/>" | |
109 " <info:feature var='feature2'/>" | |
110 " <data:x xmlns:data='jabber:x:data'>" | |
111 " <data:field var='var1' data:value='value1' />" | |
112 " <data:field var='var2' data:value='value2' />" | |
113 " </data:x>" | |
114 " </info:query>" | |
115 "</iq>"; | |
116 | |
117 xmpp_client->HandleStanza(buzz::XmlElement::ForStr(response_iq)); | |
118 | |
119 EXPECT_EQ(true, listener->last_exists); | |
120 EXPECT_EQ(room_name, listener->last_name); | |
121 EXPECT_EQ(conversation_id, listener->last_conversation_id); | |
122 EXPECT_EQ(2U, listener->last_features.size()); | |
123 EXPECT_EQ(1U, listener->last_features.count("feature1")); | |
124 EXPECT_EQ(2U, listener->last_extended_info.size()); | |
125 EXPECT_EQ("value1", listener->last_extended_info["var1"]); | |
126 EXPECT_EQ(0, listener->error_count); | |
127 } | |
128 | |
129 TEST_F(MucRoomDiscoveryTaskTest, TestMissingName) { | |
130 buzz::MucRoomDiscoveryTask* task = new buzz::MucRoomDiscoveryTask( | |
131 xmpp_client, room_jid); | |
132 task->SignalError.connect(listener, &MucRoomDiscoveryListener::OnError); | |
133 task->Start(); | |
134 | |
135 std::string error_iq = | |
136 "<iq xmlns='jabber:client'" | |
137 " from='muc-jid-ponies@domain.com' id='0' type='result'>" | |
138 " <info:query xmlns:info='http://jabber.org/protocol/disco#info'>" | |
139 " <info:identity />" | |
140 " </info:query>" | |
141 "</iq>"; | |
142 EXPECT_EQ(0, listener->error_count); | |
143 xmpp_client->HandleStanza(buzz::XmlElement::ForStr(error_iq)); | |
144 EXPECT_EQ(0, listener->error_count); | |
145 } | |
OLD | NEW |