1269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org/* 2269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * Copyright 2011 The WebRTC Project Authors. All rights reserved. 3269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * 4269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org */ 10269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 11269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include <string> 12269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include <vector> 13269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 14269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlelement.h" 15269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmpp/constants.h" 16269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmpp/fakexmppclient.h" 17269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmpp/mucroomdiscoverytask.h" 18269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/faketaskrunner.h" 19269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/gunit.h" 20269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/sigslot.h" 21269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 22269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgclass MucRoomDiscoveryListener : public sigslot::has_slots<> { 23269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org public: 24269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org MucRoomDiscoveryListener() : error_count(0) {} 25269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 26269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnResult(buzz::MucRoomDiscoveryTask* task, 27269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool exists, 28269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string& name, 29269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string& conversation_id, 30269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::set<std::string>& features, 31269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::map<std::string, std::string>& extended_info) { 32269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org last_exists = exists; 33269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org last_name = name; 34269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org last_conversation_id = conversation_id; 35269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org last_features = features; 36269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org last_extended_info = extended_info; 37269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 38269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 39269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnError(buzz::IqTask* task, 40269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const buzz::XmlElement* error) { 41269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ++error_count; 42269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 43269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 44269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool last_exists; 45269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string last_name; 46269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string last_conversation_id; 47269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::set<std::string> last_features; 48269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::map<std::string, std::string> last_extended_info; 49269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org int error_count; 50269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org}; 51269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 52269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgclass MucRoomDiscoveryTaskTest : public testing::Test { 53269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org public: 54269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org MucRoomDiscoveryTaskTest() : 55269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org room_jid("muc-jid-ponies@domain.com"), 56269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org room_name("ponies"), 57269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org conversation_id("test_conversation_id") { 58269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 59269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 60269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org virtual void SetUp() { 61269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org runner = new rtc::FakeTaskRunner(); 62269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client = new buzz::FakeXmppClient(runner); 63269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener = new MucRoomDiscoveryListener(); 64269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 65269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 66269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org virtual void TearDown() { 67269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org delete listener; 68269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org // delete xmpp_client; Deleted by deleting runner. 69269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org delete runner; 70269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 71269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 72269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::FakeTaskRunner* runner; 73269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org buzz::FakeXmppClient* xmpp_client; 74269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org MucRoomDiscoveryListener* listener; 75269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org buzz::Jid room_jid; 76269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string room_name; 77269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string conversation_id; 78269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org}; 79269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 80269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgTEST_F(MucRoomDiscoveryTaskTest, TestDiscovery) { 81269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ASSERT_EQ(0U, xmpp_client->sent_stanzas().size()); 82269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 83269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org buzz::MucRoomDiscoveryTask* task = new buzz::MucRoomDiscoveryTask( 84269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client, room_jid); 85269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org task->SignalResult.connect(listener, &MucRoomDiscoveryListener::OnResult); 86269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org task->Start(); 87269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 88269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string expected_iq = 89269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<cli:iq type=\"get\" to=\"muc-jid-ponies@domain.com\" id=\"0\" " 90269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "xmlns:cli=\"jabber:client\">" 91269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<info:query xmlns:info=\"http://jabber.org/protocol/disco#info\"/>" 92269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</cli:iq>"; 93269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 94269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ASSERT_EQ(1U, xmpp_client->sent_stanzas().size()); 95269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str()); 96269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 97269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("", listener->last_name); 98269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("", listener->last_conversation_id); 99269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 100269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string response_iq = 101269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<iq xmlns='jabber:client'" 102269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " from='muc-jid-ponies@domain.com' id='0' type='result'>" 103269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <info:query xmlns:info='http://jabber.org/protocol/disco#info'>" 104269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <info:identity name='ponies'>" 105269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <han:conversation-id xmlns:han='google:muc#hangout'>" 106269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "test_conversation_id</han:conversation-id>" 107269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </info:identity>" 108269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <info:feature var='feature1'/>" 109269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <info:feature var='feature2'/>" 110269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <data:x xmlns:data='jabber:x:data'>" 111269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <data:field var='var1' data:value='value1' />" 112269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <data:field var='var2' data:value='value2' />" 113269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </data:x>" 114269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </info:query>" 115269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</iq>"; 116269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 117269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(response_iq)); 118269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 119269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(true, listener->last_exists); 120269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(room_name, listener->last_name); 121269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(conversation_id, listener->last_conversation_id); 122269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(2U, listener->last_features.size()); 123269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(1U, listener->last_features.count("feature1")); 124269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(2U, listener->last_extended_info.size()); 125269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("value1", listener->last_extended_info["var1"]); 126269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(0, listener->error_count); 127269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 128269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 129269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgTEST_F(MucRoomDiscoveryTaskTest, TestMissingName) { 130269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org buzz::MucRoomDiscoveryTask* task = new buzz::MucRoomDiscoveryTask( 131269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client, room_jid); 132269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org task->SignalError.connect(listener, &MucRoomDiscoveryListener::OnError); 133269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org task->Start(); 134269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 135269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string error_iq = 136269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<iq xmlns='jabber:client'" 137269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " from='muc-jid-ponies@domain.com' id='0' type='result'>" 138269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <info:query xmlns:info='http://jabber.org/protocol/disco#info'>" 139269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <info:identity />" 140269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </info:query>" 141269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</iq>"; 142269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(0, listener->error_count); 143269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(error_iq)); 144269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(0, listener->error_count); 145269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 146