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 13269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmllite/qname.h" 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/jid.h" 18269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmpp/pubsubclient.h" 19269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/faketaskrunner.h" 20269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/gunit.h" 21269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/sigslot.h" 22269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 23269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgstruct HandledPubSubItem { 24269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string itemid; 25269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string payload; 26269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org}; 27269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 28269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgclass TestPubSubItemsListener : public sigslot::has_slots<> { 29269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org public: 30269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org TestPubSubItemsListener() : error_count(0) {} 31269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 32269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnItems(buzz::PubSubClient*, 33269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::vector<buzz::PubSubItem>& items) { 34269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org for (std::vector<buzz::PubSubItem>::const_iterator item = items.begin(); 35269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org item != items.end(); ++item) { 36269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org HandledPubSubItem handled_item; 37269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org handled_item.itemid = item->itemid; 38269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org if (item->elem->FirstElement() != NULL) { 39269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org handled_item.payload = item->elem->FirstElement()->Str(); 40269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 41269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org this->items.push_back(handled_item); 42269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 43269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 44269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 45269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnRequestError(buzz::PubSubClient* client, 46269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const buzz::XmlElement* stanza) { 47269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org error_count++; 48269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 49269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 50269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnPublishResult(buzz::PubSubClient* client, 51269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string& task_id, 52269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const buzz::XmlElement* item) { 53269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org result_task_id = task_id; 54269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 55269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 56269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnPublishError(buzz::PubSubClient* client, 57269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string& task_id, 58269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const buzz::XmlElement* item, 59269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const buzz::XmlElement* stanza) { 60269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org error_count++; 61269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org error_task_id = task_id; 62269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 63269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 64269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnRetractResult(buzz::PubSubClient* client, 65269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string& task_id) { 66269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org result_task_id = task_id; 67269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 68269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 69269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void OnRetractError(buzz::PubSubClient* client, 70269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string& task_id, 71269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const buzz::XmlElement* stanza) { 72269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org error_count++; 73269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org error_task_id = task_id; 74269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 75269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 76269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::vector<HandledPubSubItem> items; 77269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org int error_count; 78269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string error_task_id; 79269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string result_task_id; 80269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org}; 81269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 82269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgclass PubSubClientTest : public testing::Test { 83269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org public: 84269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org PubSubClientTest() : 85269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org pubsubjid("room@domain.com"), 86269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org node("topic"), 87269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org itemid("key") { 88269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org runner.reset(new rtc::FakeTaskRunner()); 89269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client = new buzz::FakeXmppClient(runner.get()); 90269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client.reset(new buzz::PubSubClient(xmpp_client, pubsubjid, node)); 91269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener.reset(new TestPubSubItemsListener()); 92269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->SignalItems.connect( 93269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnItems); 94269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->SignalRequestError.connect( 95269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnRequestError); 96269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->SignalPublishResult.connect( 97269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnPublishResult); 98269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->SignalPublishError.connect( 99269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnPublishError); 100269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->SignalRetractResult.connect( 101269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnRetractResult); 102269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->SignalRetractError.connect( 103269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener.get(), &TestPubSubItemsListener::OnRetractError); 104269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org } 105269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 106269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::scoped_ptr<rtc::FakeTaskRunner> runner; 107269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org // xmpp_client deleted by deleting runner. 108269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org buzz::FakeXmppClient* xmpp_client; 109269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::scoped_ptr<buzz::PubSubClient> client; 110269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org rtc::scoped_ptr<TestPubSubItemsListener> listener; 111269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org buzz::Jid pubsubjid; 112269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string node; 113269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string itemid; 114269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org}; 115269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 116269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgTEST_F(PubSubClientTest, TestRequest) { 117269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->RequestItems(); 118269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 119269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string expected_iq = 120269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<cli:iq type=\"get\" to=\"room@domain.com\" id=\"0\" " 121269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "xmlns:cli=\"jabber:client\">" 122269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<pub:pubsub xmlns:pub=\"http://jabber.org/protocol/pubsub\">" 123269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<pub:items node=\"topic\"/>" 124269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</pub:pubsub>" 125269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</cli:iq>"; 126269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 127269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ASSERT_EQ(1U, xmpp_client->sent_stanzas().size()); 128269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str()); 129269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 130269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string result_iq = 131269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'>" 132269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <pubsub xmlns='http://jabber.org/protocol/pubsub'>" 133269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <items node='topic'>" 134269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <item id='key0'>" 135269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <value0a/>" 136269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </item>" 137269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <item id='key1'>" 138269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <value1a/>" 139269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </item>" 140269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </items>" 141269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </pubsub>" 142269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</iq>"; 143269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 144269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 145269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ASSERT_EQ(2U, listener->items.size()); 146269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("key0", listener->items[0].itemid); 147269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("<pub:value0a xmlns:pub=\"http://jabber.org/protocol/pubsub\"/>", 148269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener->items[0].payload); 149269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("key1", listener->items[1].itemid); 150269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("<pub:value1a xmlns:pub=\"http://jabber.org/protocol/pubsub\"/>", 151269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener->items[1].payload); 152269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 153269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string items_message = 154269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<message xmlns='jabber:client' from='room@domain.com'>" 155269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <event xmlns='http://jabber.org/protocol/pubsub#event'>" 156269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <items node='topic'>" 157269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <item id='key0'>" 158269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <value0b/>" 159269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </item>" 160269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <item id='key1'>" 161269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <value1b/>" 162269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </item>" 163269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </items>" 164269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </event>" 165269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</message>"; 166269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 167269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(items_message)); 168269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ASSERT_EQ(4U, listener->items.size()); 169269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("key0", listener->items[2].itemid); 170269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("<eve:value0b" 171269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " xmlns:eve=\"http://jabber.org/protocol/pubsub#event\"/>", 172269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener->items[2].payload); 173269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("key1", listener->items[3].itemid); 174269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ("<eve:value1b" 175269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " xmlns:eve=\"http://jabber.org/protocol/pubsub#event\"/>", 176269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org listener->items[3].payload); 177269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 178269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 179269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgTEST_F(PubSubClientTest, TestRequestError) { 180269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string result_iq = 181269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='error' from='room@domain.com'>" 182269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <error type='auth'>" 183269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" 184269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </error>" 185269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</iq>"; 186269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 187269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->RequestItems(); 188269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 189269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(1, listener->error_count); 190269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 191269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 192269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgTEST_F(PubSubClientTest, TestPublish) { 193269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org buzz::XmlElement* payload = 194269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org new buzz::XmlElement(buzz::QName(buzz::NS_PUBSUB, "value")); 195269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 196269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string task_id; 197269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->PublishItem(itemid, payload, &task_id); 198269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 199269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string expected_iq = 200269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<cli:iq type=\"set\" to=\"room@domain.com\" id=\"0\" " 201269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "xmlns:cli=\"jabber:client\">" 202269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" 203269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<publish node=\"topic\">" 204269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<item id=\"key\">" 205269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<value/>" 206269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</item>" 207269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</publish>" 208269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</pubsub>" 209269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</cli:iq>"; 210269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 211269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ASSERT_EQ(1U, xmpp_client->sent_stanzas().size()); 212269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str()); 213269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 214269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string result_iq = 215269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'/>"; 216269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 217269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 218269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(task_id, listener->result_task_id); 219269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 220269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 221269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgTEST_F(PubSubClientTest, TestPublishError) { 222269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org buzz::XmlElement* payload = 223269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org new buzz::XmlElement(buzz::QName(buzz::NS_PUBSUB, "value")); 224269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 225269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string task_id; 226269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->PublishItem(itemid, payload, &task_id); 227269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 228269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string result_iq = 229269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='error' from='room@domain.com'>" 230269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <error type='auth'>" 231269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" 232269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </error>" 233269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</iq>"; 234269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 235269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 236269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(1, listener->error_count); 237269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(task_id, listener->error_task_id); 238269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 239269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 240269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgTEST_F(PubSubClientTest, TestRetract) { 241269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string task_id; 242269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->RetractItem(itemid, &task_id); 243269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 244269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string expected_iq = 245269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<cli:iq type=\"set\" to=\"room@domain.com\" id=\"0\" " 246269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "xmlns:cli=\"jabber:client\">" 247269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" 248269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<retract node=\"topic\" notify=\"true\">" 249269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<item id=\"key\"/>" 250269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</retract>" 251269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</pubsub>" 252269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</cli:iq>"; 253269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 254269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ASSERT_EQ(1U, xmpp_client->sent_stanzas().size()); 255269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(expected_iq, xmpp_client->sent_stanzas()[0]->Str()); 256269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 257269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string result_iq = 258269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='result' from='room@domain.com'/>"; 259269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 260269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 261269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(task_id, listener->result_task_id); 262269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 263269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 264269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgTEST_F(PubSubClientTest, TestRetractError) { 265269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string task_id; 266269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org client->RetractItem(itemid, &task_id); 267269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 268269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string result_iq = 269269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "<iq xmlns='jabber:client' id='0' type='error' from='room@domain.com'>" 270269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <error type='auth'>" 271269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" 272269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org " </error>" 273269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org "</iq>"; 274269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 275269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org xmpp_client->HandleStanza(buzz::XmlElement::ForStr(result_iq)); 276269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(1, listener->error_count); 277269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org EXPECT_EQ(task_id, listener->error_task_id); 278269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 279