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