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 "third_party/xmllite/xmlelement.h" |
| 15 #include "third_party/xmpp/constants.h" |
| 16 #include "third_party/xmpp/fakexmppclient.h" |
| 17 #include "third_party/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 |