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