15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// Copyright 2011 Google Inc. All Rights Reserved 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string> 55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/faketaskrunner.h" 75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/gunit.h" 85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/sigslot.h" 95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/qname.h" 105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/xmlelement.h" 115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/constants.h" 125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/iqtask.h" 135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/fakexmppclient.h" 145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/jid.h" 155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmpp/pubsubtasks.h" 165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct HandledPubSubItem { 185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string itemid; 195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string payload; 205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass TestPubSubTasksListener : public sigslot::has_slots<> { 235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org TestPubSubTasksListener() : result_count(0), error_count(0) {} 255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnReceiveUpdate(buzz::PubSubReceiveTask* task, 275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::vector<buzz::PubSubItem>& items) { 285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org OnItems(items); 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnRequestResult(buzz::PubSubRequestTask* task, 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::vector<buzz::PubSubItem>& items) { 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org OnItems(items); 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnItems(const std::vector<buzz::PubSubItem>& items) { 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (std::vector<buzz::PubSubItem>::const_iterator item = items.begin(); 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org item != items.end(); ++item) { 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org HandledPubSubItem handled_item; 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org handled_item.itemid = item->itemid; 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (item->elem->FirstElement() != NULL) { 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org handled_item.payload = item->elem->FirstElement()->Str(); 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org this->items.push_back(handled_item); 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnPublishResult(buzz::PubSubPublishTask* task) { 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ++result_count; 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnRetractResult(buzz::PubSubRetractTask* task) { 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ++result_count; 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnError(buzz::IqTask* task, const buzz::XmlElement* stanza) { 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ++error_count; 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<HandledPubSubItem> items; 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int result_count; 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int error_count; 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass PubSubTasksTest : public testing::Test { 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org PubSubTasksTest() : 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org pubsubjid("room@domain.com"), 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org node("topic"), 705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org itemid("key") { 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org runner.reset(new talk_base::FakeTaskRunner()); 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org client = new buzz::FakeXmppClient(runner.get()); 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.reset(new TestPubSubTasksListener()); 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<talk_base::FakeTaskRunner> runner; 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Client deleted by deleting runner. 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::FakeXmppClient* client; 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<TestPubSubTasksListener> listener; 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::Jid pubsubjid; 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string node; 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string itemid; 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(PubSubTasksTest, TestRequest) { 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::PubSubRequestTask* task = 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org new buzz::PubSubRequestTask(client, pubsubjid, node); 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalResult.connect( 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnRequestResult); 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->Start(); 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string expected_iq = 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<cli:iq type=\"get\" to=\"room@domain.com\" id=\"0\" " 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "xmlns:cli=\"jabber:client\">" 955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<pub:pubsub xmlns:pub=\"http://jabber.org/protocol/pubsub\">" 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<pub:items node=\"topic\"/>" 975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</pub:pubsub>" 985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</cli:iq>"; 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ASSERT_EQ(1U, client->sent_stanzas().size()); 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(expected_iq, client->sent_stanzas()[0]->Str()); 1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string result_iq = 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'>" 1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <pubsub xmlns='http://jabber.org/protocol/pubsub'>" 1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <items node='topic'>" 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <item id='key0'>" 1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <value0/>" 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </item>" 1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <item id='key1'>" 1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <value1/>" 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </item>" 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </items>" 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </pubsub>" 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</iq>"; 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ASSERT_EQ(2U, listener->items.size()); 1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("key0", listener->items[0].itemid); 1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("<pub:value0 xmlns:pub=\"http://jabber.org/protocol/pubsub\"/>", 1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener->items[0].payload); 1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("key1", listener->items[1].itemid); 1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("<pub:value1 xmlns:pub=\"http://jabber.org/protocol/pubsub\"/>", 1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener->items[1].payload); 1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(PubSubTasksTest, TestRequestError) { 1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string result_iq = 1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<iq xmlns='jabber:client' id='0' type='error' from='room@domain.com'>" 1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <error type='auth'>" 1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" 1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </error>" 1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</iq>"; 1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::PubSubRequestTask* task = 1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org new buzz::PubSubRequestTask(client, pubsubjid, node); 1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalResult.connect( 1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnRequestResult); 1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalError.connect( 1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnError); 1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->Start(); 1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(0, listener->result_count); 1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1, listener->error_count); 1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(PubSubTasksTest, TestReceive) { 1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string items_message = 1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<message xmlns='jabber:client' from='room@domain.com'>" 1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <event xmlns='http://jabber.org/protocol/pubsub#event'>" 1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <items node='topic'>" 1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <item id='key0'>" 1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <value0/>" 1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </item>" 1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <item id='key1'>" 1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <value1/>" 1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </item>" 1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </items>" 1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </event>" 1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</message>"; 1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::PubSubReceiveTask* task = 1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org new buzz::PubSubReceiveTask(client, pubsubjid, node); 1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalUpdate.connect( 1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnReceiveUpdate); 1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->Start(); 1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org client->HandleStanza(buzz::XmlElement::ForStr(items_message)); 1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ASSERT_EQ(2U, listener->items.size()); 1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("key0", listener->items[0].itemid); 1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ( 1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<eve:value0 xmlns:eve=\"http://jabber.org/protocol/pubsub#event\"/>", 1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener->items[0].payload); 1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("key1", listener->items[1].itemid); 1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ( 1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<eve:value1 xmlns:eve=\"http://jabber.org/protocol/pubsub#event\"/>", 1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener->items[1].payload); 1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(PubSubTasksTest, TestPublish) { 1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::XmlElement* payload = 1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org new buzz::XmlElement(buzz::QName(buzz::NS_PUBSUB, "value")); 1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string expected_iq = 1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<cli:iq type=\"set\" to=\"room@domain.com\" id=\"0\" " 1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "xmlns:cli=\"jabber:client\">" 1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" 1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<publish node=\"topic\">" 1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<item id=\"key\">" 1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<value/>" 1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</item>" 1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</publish>" 1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</pubsub>" 1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</cli:iq>"; 1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<buzz::XmlElement*> children; 1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org children.push_back(payload); 1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::PubSubPublishTask* task = 2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org new buzz::PubSubPublishTask(client, pubsubjid, node, itemid, children); 2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalResult.connect( 2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnPublishResult); 2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->Start(); 2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ASSERT_EQ(1U, client->sent_stanzas().size()); 2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(expected_iq, client->sent_stanzas()[0]->Str()); 2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string result_iq = 2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'/>"; 2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1, listener->result_count); 2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(0, listener->error_count); 2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(PubSubTasksTest, TestPublishError) { 2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::XmlElement* payload = 2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org new buzz::XmlElement(buzz::QName(buzz::NS_PUBSUB, "value")); 2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<buzz::XmlElement*> children; 2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org children.push_back(payload); 2235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::PubSubPublishTask* task = 2245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org new buzz::PubSubPublishTask(client, pubsubjid, node, itemid, children); 2255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalResult.connect( 2265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnPublishResult); 2275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalError.connect( 2285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnError); 2295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->Start(); 2305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string result_iq = 2325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<iq xmlns='jabber:client' id='0' type='error' from='room@domain.com'>" 2335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <error type='auth'>" 2345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" 2355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org " </error>" 2365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</iq>"; 2375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 2395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(0, listener->result_count); 2415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1, listener->error_count); 2425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(PubSubTasksTest, TestRetract) { 2455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org buzz::PubSubRetractTask* task = 2465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org new buzz::PubSubRetractTask(client, pubsubjid, node, itemid); 2475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalResult.connect( 2485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnRetractResult); 2495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->SignalError.connect( 2505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.get(), &TestPubSubTasksListener::OnError); 2515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org task->Start(); 2525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string expected_iq = 2545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<cli:iq type=\"set\" to=\"room@domain.com\" id=\"0\" " 2555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "xmlns:cli=\"jabber:client\">" 2565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" 2575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<retract node=\"topic\" notify=\"true\">" 2585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<item id=\"key\"/>" 2595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</retract>" 2605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</pubsub>" 2615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "</cli:iq>"; 2625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ASSERT_EQ(1U, client->sent_stanzas().size()); 2645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(expected_iq, client->sent_stanzas()[0]->Str()); 2655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string result_iq = 2675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'/>"; 2685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 2705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1, listener->result_count); 2725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(0, listener->error_count); 2735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 274