• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/mucroomlookuptask.h"
18 #include "webrtc/base/faketaskrunner.h"
19 #include "webrtc/base/gunit.h"
20 #include "webrtc/base/sigslot.h"
21 
22 class MucRoomLookupListener : public sigslot::has_slots<> {
23  public:
MucRoomLookupListener()24   MucRoomLookupListener() : error_count(0) {}
25 
OnResult(buzz::MucRoomLookupTask * task,const buzz::MucRoomInfo & room)26   void OnResult(buzz::MucRoomLookupTask* task,
27                 const buzz::MucRoomInfo& room) {
28     last_room = room;
29   }
30 
OnError(buzz::IqTask * task,const buzz::XmlElement * error)31   void OnError(buzz::IqTask* task,
32                const buzz::XmlElement* error) {
33     ++error_count;
34   }
35 
36   buzz::MucRoomInfo last_room;
37   int error_count;
38 };
39 
40 class MucRoomLookupTaskTest : public testing::Test {
41  public:
MucRoomLookupTaskTest()42   MucRoomLookupTaskTest() :
43       lookup_server_jid("lookup@domain.com"),
44       room_jid("muc-jid-ponies@domain.com"),
45       room_name("ponies"),
46       room_domain("domain.com"),
47       room_full_name("ponies@domain.com"),
48       hangout_id("some_hangout_id") {
49   }
50 
SetUp()51   virtual void SetUp() {
52     runner = new rtc::FakeTaskRunner();
53     xmpp_client = new buzz::FakeXmppClient(runner);
54     listener = new MucRoomLookupListener();
55   }
56 
TearDown()57   virtual void TearDown() {
58     delete listener;
59     // delete xmpp_client;  Deleted by deleting runner.
60     delete runner;
61   }
62 
63   rtc::FakeTaskRunner* runner;
64   buzz::FakeXmppClient* xmpp_client;
65   MucRoomLookupListener* listener;
66   buzz::Jid lookup_server_jid;
67   buzz::Jid room_jid;
68   std::string room_name;
69   std::string room_domain;
70   std::string room_full_name;
71   std::string hangout_id;
72 };
73 
TEST_F(MucRoomLookupTaskTest,TestLookupName)74 TEST_F(MucRoomLookupTaskTest, TestLookupName) {
75   ASSERT_EQ(0U, xmpp_client->sent_stanzas().size());
76 
77   buzz::MucRoomLookupTask* task =
78       buzz::MucRoomLookupTask::CreateLookupTaskForRoomName(
79           xmpp_client, lookup_server_jid, room_name, room_domain);
80   task->SignalResult.connect(listener, &MucRoomLookupListener::OnResult);
81   task->Start();
82 
83   std::string expected_iq =
84       "<cli:iq type=\"set\" to=\"lookup@domain.com\" id=\"0\" "
85         "xmlns:cli=\"jabber:client\">"
86         "<query xmlns=\"jabber:iq:search\">"
87           "<room-name>ponies</room-name>"
88           "<room-domain>domain.com</room-domain>"
89         "</query>"
90       "</cli:iq>";
91 
92   ASSERT_EQ(1U, xmpp_client->sent_stanzas().size());
93   EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str());
94 
95   EXPECT_EQ("", listener->last_room.name);
96 
97   std::string response_iq =
98       "<iq xmlns='jabber:client' from='lookup@domain.com' id='0' type='result'>"
99       "  <query xmlns='jabber:iq:search'>"
100       "    <item jid='muc-jid-ponies@domain.com'>"
101       "      <room-name>ponies</room-name>"
102       "      <room-domain>domain.com</room-domain>"
103       "    </item>"
104       "  </query>"
105       "</iq>";
106 
107   xmpp_client->HandleStanza(buzz::XmlElement::ForStr(response_iq));
108 
109   EXPECT_EQ(room_name, listener->last_room.name);
110   EXPECT_EQ(room_domain, listener->last_room.domain);
111   EXPECT_EQ(room_jid, listener->last_room.jid);
112   EXPECT_EQ(room_full_name, listener->last_room.full_name());
113   EXPECT_EQ(0, listener->error_count);
114 }
115 
TEST_F(MucRoomLookupTaskTest,TestLookupHangoutId)116 TEST_F(MucRoomLookupTaskTest, TestLookupHangoutId) {
117   ASSERT_EQ(0U, xmpp_client->sent_stanzas().size());
118 
119   buzz::MucRoomLookupTask* task = buzz::MucRoomLookupTask::CreateLookupTaskForHangoutId(
120       xmpp_client, lookup_server_jid, hangout_id);
121   task->SignalResult.connect(listener, &MucRoomLookupListener::OnResult);
122   task->Start();
123 
124   std::string expected_iq =
125       "<cli:iq type=\"set\" to=\"lookup@domain.com\" id=\"0\" "
126         "xmlns:cli=\"jabber:client\">"
127         "<query xmlns=\"jabber:iq:search\">"
128           "<hangout-id>some_hangout_id</hangout-id>"
129         "</query>"
130       "</cli:iq>";
131 
132   ASSERT_EQ(1U, xmpp_client->sent_stanzas().size());
133   EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str());
134 
135   EXPECT_EQ("", listener->last_room.name);
136 
137   std::string response_iq =
138       "<iq xmlns='jabber:client' from='lookup@domain.com' id='0' type='result'>"
139       "  <query xmlns='jabber:iq:search'>"
140       "    <item jid='muc-jid-ponies@domain.com'>"
141       "      <room-name>some_hangout_id</room-name>"
142       "      <room-domain>domain.com</room-domain>"
143       "    </item>"
144       "  </query>"
145       "</iq>";
146 
147   xmpp_client->HandleStanza(buzz::XmlElement::ForStr(response_iq));
148 
149   EXPECT_EQ(hangout_id, listener->last_room.name);
150   EXPECT_EQ(room_domain, listener->last_room.domain);
151   EXPECT_EQ(room_jid, listener->last_room.jid);
152   EXPECT_EQ(0, listener->error_count);
153 }
154 
TEST_F(MucRoomLookupTaskTest,TestError)155 TEST_F(MucRoomLookupTaskTest, TestError) {
156   buzz::MucRoomLookupTask* task = buzz::MucRoomLookupTask::CreateLookupTaskForRoomName(
157       xmpp_client, lookup_server_jid, room_name, room_domain);
158   task->SignalError.connect(listener, &MucRoomLookupListener::OnError);
159   task->Start();
160 
161   std::string error_iq =
162       "<iq xmlns='jabber:client' id='0' type='error'"
163       "  from='lookup@domain.com'>"
164       "</iq>";
165 
166   EXPECT_EQ(0, listener->error_count);
167   xmpp_client->HandleStanza(buzz::XmlElement::ForStr(error_iq));
168   EXPECT_EQ(1, listener->error_count);
169 }
170 
TEST_F(MucRoomLookupTaskTest,TestBadJid)171 TEST_F(MucRoomLookupTaskTest, TestBadJid) {
172   buzz::MucRoomLookupTask* task = buzz::MucRoomLookupTask::CreateLookupTaskForRoomName(
173       xmpp_client, lookup_server_jid, room_name, room_domain);
174   task->SignalError.connect(listener, &MucRoomLookupListener::OnError);
175   task->Start();
176 
177   std::string response_iq =
178       "<iq xmlns='jabber:client' from='lookup@domain.com' id='0' type='result'>"
179       "  <query xmlns='jabber:iq:search'>"
180       "    <item/>"
181       "  </query>"
182       "</iq>";
183 
184   EXPECT_EQ(0, listener->error_count);
185   xmpp_client->HandleStanza(buzz::XmlElement::ForStr(response_iq));
186   EXPECT_EQ(1, listener->error_count);
187 }
188