10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Copyright 2011 Google Inc. All Rights Reserved 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string> 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 613b2d035e2e7f2f18e3a4d3377bc1a09f43a4ff9buildbot@webrtc.org#include "webrtc/libjingle/xmllite/qname.h" 713b2d035e2e7f2f18e3a4d3377bc1a09f43a4ff9buildbot@webrtc.org#include "webrtc/libjingle/xmllite/xmlelement.h" 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/xmpp/constants.h" 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/xmpp/fakexmppclient.h" 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/xmpp/jid.h" 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/xmpp/pubsubclient.h" 12cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/faketaskrunner.h" 13cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/gunit.h" 14cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/sigslot.h" 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstruct HandledPubSubItem { 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string itemid; 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string payload; 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass TestPubSubItemsListener : public sigslot::has_slots<> { 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestPubSubItemsListener() : error_count(0) {} 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnItems(buzz::PubSubClient*, 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::vector<buzz::PubSubItem>& items) { 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (std::vector<buzz::PubSubItem>::const_iterator item = items.begin(); 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org item != items.end(); ++item) { 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HandledPubSubItem handled_item; 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org handled_item.itemid = item->itemid; 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (item->elem->FirstElement() != NULL) { 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org handled_item.payload = item->elem->FirstElement()->Str(); 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this->items.push_back(handled_item); 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnRequestError(buzz::PubSubClient* client, 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const buzz::XmlElement* stanza) { 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_count++; 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnPublishResult(buzz::PubSubClient* client, 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& task_id, 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const buzz::XmlElement* item) { 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org result_task_id = task_id; 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnPublishError(buzz::PubSubClient* client, 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& task_id, 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const buzz::XmlElement* item, 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const buzz::XmlElement* stanza) { 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_count++; 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_task_id = task_id; 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnRetractResult(buzz::PubSubClient* client, 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& task_id) { 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org result_task_id = task_id; 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnRetractError(buzz::PubSubClient* client, 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& task_id, 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const buzz::XmlElement* stanza) { 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_count++; 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_task_id = task_id; 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<HandledPubSubItem> items; 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int error_count; 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string error_task_id; 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string result_task_id; 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass PubSubClientTest : public testing::Test { 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PubSubClientTest() : 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org pubsubjid("room@domain.com"), 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org node("topic"), 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org itemid("key") { 812a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org runner.reset(new rtc::FakeTaskRunner()); 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org xmpp_client = new buzz::FakeXmppClient(runner.get()); 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client.reset(new buzz::PubSubClient(xmpp_client, pubsubjid, node)); 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener.reset(new TestPubSubItemsListener()); 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->SignalItems.connect( 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnItems); 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->SignalRequestError.connect( 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnRequestError); 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->SignalPublishResult.connect( 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnPublishResult); 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->SignalPublishError.connect( 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnPublishError); 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->SignalRetractResult.connect( 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnRetractResult); 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->SignalRetractError.connect( 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnRetractError); 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 992a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::FakeTaskRunner> runner; 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // xmpp_client deleted by deleting runner. 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org buzz::FakeXmppClient* xmpp_client; 1022a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<buzz::PubSubClient> client; 1032a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<TestPubSubItemsListener> listener; 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org buzz::Jid pubsubjid; 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string node; 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string itemid; 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(PubSubClientTest, TestRequest) { 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->RequestItems(); 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string expected_iq = 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<cli:iq type=\"get\" to=\"room@domain.com\" id=\"0\" " 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "xmlns:cli=\"jabber:client\">" 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<pub:pubsub xmlns:pub=\"http://jabber.org/protocol/pubsub\">" 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<pub:items node=\"topic\"/>" 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</pub:pubsub>" 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</cli:iq>"; 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, xmpp_client->sent_stanzas().size()); 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str()); 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string result_iq = 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'>" 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <pubsub xmlns='http://jabber.org/protocol/pubsub'>" 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <items node='topic'>" 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <item id='key0'>" 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <value0a/>" 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </item>" 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <item id='key1'>" 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <value1a/>" 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </item>" 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </items>" 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </pubsub>" 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</iq>"; 1360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(2U, listener->items.size()); 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("key0", listener->items[0].itemid); 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("<pub:value0a xmlns:pub=\"http://jabber.org/protocol/pubsub\"/>", 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener->items[0].payload); 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("key1", listener->items[1].itemid); 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("<pub:value1a xmlns:pub=\"http://jabber.org/protocol/pubsub\"/>", 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener->items[1].payload); 1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string items_message = 1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<message xmlns='jabber:client' from='room@domain.com'>" 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <event xmlns='http://jabber.org/protocol/pubsub#event'>" 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <items node='topic'>" 1500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <item id='key0'>" 1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <value0b/>" 1520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </item>" 1530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <item id='key1'>" 1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <value1b/>" 1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </item>" 1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </items>" 1570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </event>" 1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</message>"; 1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(items_message)); 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(4U, listener->items.size()); 1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("key0", listener->items[2].itemid); 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("<eve:value0b" 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " xmlns:eve=\"http://jabber.org/protocol/pubsub#event\"/>", 1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener->items[2].payload); 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("key1", listener->items[3].itemid); 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("<eve:value1b" 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " xmlns:eve=\"http://jabber.org/protocol/pubsub#event\"/>", 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org listener->items[3].payload); 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(PubSubClientTest, TestRequestError) { 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string result_iq = 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='error' from='room@domain.com'>" 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <error type='auth'>" 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </error>" 1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</iq>"; 1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->RequestItems(); 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1, listener->error_count); 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(PubSubClientTest, TestPublish) { 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org buzz::XmlElement* payload = 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new buzz::XmlElement(buzz::QName(buzz::NS_PUBSUB, "value")); 1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string task_id; 1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->PublishItem(itemid, payload, &task_id); 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string expected_iq = 1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<cli:iq type=\"set\" to=\"room@domain.com\" id=\"0\" " 1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "xmlns:cli=\"jabber:client\">" 1950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" 1960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<publish node=\"topic\">" 1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<item id=\"key\">" 1980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<value/>" 1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</item>" 2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</publish>" 2010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</pubsub>" 2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</cli:iq>"; 2030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, xmpp_client->sent_stanzas().size()); 2050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str()); 2060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string result_iq = 2080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'/>"; 2090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 2110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(task_id, listener->result_task_id); 2120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 2130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(PubSubClientTest, TestPublishError) { 2150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org buzz::XmlElement* payload = 2160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new buzz::XmlElement(buzz::QName(buzz::NS_PUBSUB, "value")); 2170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string task_id; 2190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->PublishItem(itemid, payload, &task_id); 2200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string result_iq = 2220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='error' from='room@domain.com'>" 2230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <error type='auth'>" 2240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" 2250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </error>" 2260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</iq>"; 2270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 2290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1, listener->error_count); 2300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(task_id, listener->error_task_id); 2310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 2320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(PubSubClientTest, TestRetract) { 2340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string task_id; 2350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->RetractItem(itemid, &task_id); 2360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string expected_iq = 2380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<cli:iq type=\"set\" to=\"room@domain.com\" id=\"0\" " 2390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "xmlns:cli=\"jabber:client\">" 2400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" 2410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<retract node=\"topic\" notify=\"true\">" 2420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<item id=\"key\"/>" 2430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</retract>" 2440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</pubsub>" 2450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</cli:iq>"; 2460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, xmpp_client->sent_stanzas().size()); 2480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str()); 2490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string result_iq = 2510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'/>"; 2520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 2540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(task_id, listener->result_task_id); 2550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 2560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(PubSubClientTest, TestRetractError) { 2580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string task_id; 2590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org client->RetractItem(itemid, &task_id); 2600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string result_iq = 2620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='error' from='room@domain.com'>" 2630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <error type='auth'>" 2640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" 2650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org " </error>" 2660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "</iq>"; 2670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 2690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1, listener->error_count); 2700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(task_id, listener->error_task_id); 2710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 272