diff options
| author | Linus Jahn <lnj@kaidan.im> | 2020-07-05 01:31:09 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-08-22 16:09:02 +0200 |
| commit | d280d09fcb458c680565420651c7f18702ba0ceb (patch) | |
| tree | 535a0a8b49fd3d3cd1fd717165b50ef4f75842db /tests | |
| parent | 08a67a6a06b09a6b1e4fe0c6277b4a77e66b770a (diff) | |
| download | qxmpp-d280d09fcb458c680565420651c7f18702ba0ceb.tar.gz | |
tests: Add tests for QXmppPubSubIq<T>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp | 239 |
2 files changed, 168 insertions, 73 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b026f25e..571ca27b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -40,7 +40,7 @@ add_simple_test(qxmppoutgoingclient) add_simple_test(qxmpppushenableiq) add_simple_test(qxmpppresence) add_simple_test(qxmpppubsub) -#add_simple_test(qxmpppubsubiq) +add_simple_test(qxmpppubsubiq) add_simple_test(qxmppregisteriq) add_simple_test(qxmppregistrationmanager) add_simple_test(qxmppresultset) diff --git a/tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp b/tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp index 4b52ce54..95588cc6 100644 --- a/tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp +++ b/tests/qxmpppubsubiq/tst_qxmpppubsubiq.cpp @@ -3,6 +3,7 @@ * * Author: * Jeremy Lainé + * Linus Jahn * * Source: * https://github.com/qxmpp-project/qxmpp @@ -22,7 +23,11 @@ */ #include "QXmppPubSubIq.h" +#include "QXmppPubSubItem.h" +#include "QXmppPubSubSubscription.h" +#include "QXmppResultSet.h" +#include "pubsubutil.h" #include "util.h" #include <QObject> @@ -33,6 +38,8 @@ class tst_QXmppPubSubIq : public QObject private slots: void testItems(); void testItemsResponse(); + void testCreateNode(); + void testDeleteNode(); void testPublish(); void testRetractItem(); void testSubscribe(); @@ -40,6 +47,8 @@ private slots: void testSubscriptions(); void testIsPubSubIq_data(); void testIsPubSubIq(); + + void testCustomItem(); }; void tst_QXmppPubSubIq::testItems() @@ -61,7 +70,7 @@ void tst_QXmppPubSubIq::testItems() QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit")); QCOMPARE(iq.from(), QLatin1String("francisco@denmark.lit/barracks")); QCOMPARE(iq.type(), QXmppIq::Get); - QCOMPARE(iq.queryType(), QXmppPubSubIq::ItemsQuery); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Items); QCOMPARE(iq.queryJid(), QString()); QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks")); serializePacket(iq, xml); @@ -71,7 +80,7 @@ void tst_QXmppPubSubIq::testItems() iq.setTo(QLatin1String("pubsub.shakespeare.lit")); iq.setFrom(QLatin1String("francisco@denmark.lit/barracks")); iq.setType(QXmppIq::Get); - iq.setQueryType(QXmppPubSubIq::ItemsQuery); + iq.setQueryType(QXmppPubSubIq<>::Items); iq.setQueryJid({}); iq.setQueryNode(QLatin1String("storage:bookmarks")); serializePacket(iq, xml); @@ -87,17 +96,13 @@ void tst_QXmppPubSubIq::testItemsResponse() " type=\"result\">" "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" "<items node=\"storage:bookmarks\">" - "<item id=\"current\">" - "<storage xmlns=\"storage:bookmarks\">" - "<conference" - " autojoin=\"true\"" - " jid=\"theplay@conference.shakespeare.lit\"" - " name=\"The Play's the Thing\">" - "<nick>JC</nick>" - "</conference>" - "</storage>" - "</item>" + "<item id=\"current\"/>" "</items>" + "<set xmlns=\"http://jabber.org/protocol/rsm\">" + "<first index=\"0\">current</first>" + "<last>otheritemid</last>" + "<count>19</count>" + "</set>" "</pubsub>" "</iq>"); @@ -107,9 +112,74 @@ void tst_QXmppPubSubIq::testItemsResponse() QCOMPARE(iq.to(), QLatin1String("francisco@denmark.lit/barracks")); QCOMPARE(iq.from(), QLatin1String("pubsub.shakespeare.lit")); QCOMPARE(iq.type(), QXmppIq::Result); - QCOMPARE(iq.queryType(), QXmppPubSubIq::ItemsQuery); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Items); QCOMPARE(iq.queryJid(), QString()); QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks")); + QVERIFY(iq.itemsContinuation().has_value()); + QCOMPARE(iq.itemsContinuation()->count(), 19); + QCOMPARE(iq.itemsContinuation()->index(), 0); + QCOMPARE(iq.itemsContinuation()->first(), QStringLiteral("current")); + QCOMPARE(iq.itemsContinuation()->last(), QStringLiteral("otheritemid")); + serializePacket(iq, xml); +} + +void tst_QXmppPubSubIq::testCreateNode() +{ + const QByteArray xml( + "<iq id=\"create1\" to=\"pubsub.shakespeare.lit\" from=\"hamlet@denmark.lit/elsinore\" type=\"set\">" + "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" + "<create node=\"princely_musings\"/>" + "</pubsub>" + "</iq>"); + + QXmppPubSubIq iq; + parsePacket(iq, xml); + QCOMPARE(iq.id(), QString("create1")); + QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit")); + QCOMPARE(iq.from(), QLatin1String("hamlet@denmark.lit/elsinore")); + QCOMPARE(iq.type(), QXmppIq::Set); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Create); + QCOMPARE(iq.queryJid(), QString()); + QCOMPARE(iq.queryNode(), QLatin1String("princely_musings")); + serializePacket(iq, xml); + + iq = QXmppPubSubIq(); + iq.setId(QLatin1String("create1")); + iq.setTo(QLatin1String("pubsub.shakespeare.lit")); + iq.setFrom(QLatin1String("hamlet@denmark.lit/elsinore")); + iq.setType(QXmppIq::Set); + iq.setQueryType(QXmppPubSubIq<>::Create); + iq.setQueryNode(QLatin1String("princely_musings")); + serializePacket(iq, xml); +} + +void tst_QXmppPubSubIq::testDeleteNode() +{ + const QByteArray xml( + "<iq id=\"delete1\" to=\"pubsub.shakespeare.lit\" from=\"hamlet@denmark.lit/elsinore\" type=\"set\">" + "<pubsub xmlns=\"http://jabber.org/protocol/pubsub#owner\">" + "<delete node=\"princely_musings\"/>" + "</pubsub>" + "</iq>"); + + QXmppPubSubIq iq; + parsePacket(iq, xml); + QCOMPARE(iq.id(), QString("delete1")); + QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit")); + QCOMPARE(iq.from(), QLatin1String("hamlet@denmark.lit/elsinore")); + QCOMPARE(iq.type(), QXmppIq::Set); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Delete); + QCOMPARE(iq.queryJid(), QString()); + QCOMPARE(iq.queryNode(), QLatin1String("princely_musings")); + serializePacket(iq, xml); + + iq = QXmppPubSubIq<>(); + iq.setId(QLatin1String("delete1")); + iq.setTo(QLatin1String("pubsub.shakespeare.lit")); + iq.setFrom(QLatin1String("hamlet@denmark.lit/elsinore")); + iq.setType(QXmppIq::Set); + iq.setQueryType(QXmppPubSubIq<>::Delete); + iq.setQueryNode(QLatin1String("princely_musings")); serializePacket(iq, xml); } @@ -123,63 +193,34 @@ void tst_QXmppPubSubIq::testPublish() " type=\"result\">" "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" "<publish node=\"storage:bookmarks\">" - "<item id=\"current\">" - "<storage xmlns=\"storage:bookmarks\">" - "<conference" - " autojoin=\"true\"" - " jid=\"theplay@conference.shakespeare.lit\"" - " name=\"The Play's the Thing\">" - "<nick>JC</nick>" - "</conference>" - "</storage>" - "</item>" + "<item id=\"current\"/>" "</publish>" "</pubsub>" "</iq>"); - QXmppPubSubIq iq; + QXmppPubSubIq<> iq; parsePacket(iq, xml); QCOMPARE(iq.id(), QLatin1String("items1")); QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit")); QCOMPARE(iq.from(), QLatin1String("francisco@denmark.lit/barracks")); QCOMPARE(iq.type(), QXmppIq::Result); - QCOMPARE(iq.queryType(), QXmppPubSubIq::PublishQuery); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Publish); QCOMPARE(iq.queryJid(), QString()); QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks")); - QCOMPARE(iq.items().first().contents().tagName(), QLatin1String("storage")); serializePacket(iq, xml); // serialize using setters - - QXmppElement itemContentNick; - itemContentNick.setTagName(QStringLiteral("nick")); - itemContentNick.setValue(QStringLiteral("JC")); - - QXmppElement itemContentConference; - itemContentConference.setTagName(QStringLiteral("conference")); - itemContentConference.setAttribute(QStringLiteral("autojoin"), QStringLiteral("true")); - itemContentConference.setAttribute(QStringLiteral("jid"), QStringLiteral("theplay@conference.shakespeare.lit")); - itemContentConference.setAttribute(QStringLiteral("name"), QStringLiteral("The Play's the Thing")); - itemContentConference.appendChild(itemContentNick); - - QXmppElement itemContent; - itemContent.setTagName(QStringLiteral("storage")); - itemContent.setAttribute(QStringLiteral("xmlns"), QStringLiteral("storage:bookmarks")); - itemContent.appendChild(itemContentConference); - - QXmppPubSubItem item; - item.setId(QStringLiteral("current")); - item.setContents(itemContent); + QXmppPubSubItem item(QStringLiteral("current")); iq = QXmppPubSubIq(); iq.setId(QLatin1String("items1")); iq.setTo(QLatin1String("pubsub.shakespeare.lit")); iq.setFrom(QLatin1String("francisco@denmark.lit/barracks")); iq.setType(QXmppIq::Result); - iq.setQueryType(QXmppPubSubIq::PublishQuery); + iq.setQueryType(QXmppPubSubIq<>::Publish); iq.setQueryJid({}); iq.setQueryNode(QLatin1String("storage:bookmarks")); - iq.setItems(QList<QXmppPubSubItem>() << item); + iq.setItems({ item }); serializePacket(iq, xml); } @@ -199,13 +240,13 @@ void tst_QXmppPubSubIq::testRetractItem() "</pubsub>" "</iq>"); - QXmppPubSubIq iq; + QXmppPubSubIq<> iq; parsePacket(iq, xml); QCOMPARE(iq.id(), QString("retract1")); QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit")); QCOMPARE(iq.from(), QLatin1String("hamlet@denmark.lit/elsinore")); QCOMPARE(iq.type(), QXmppIq::Set); - QCOMPARE(iq.queryType(), QXmppPubSubIq::RetractQuery); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Retract); QCOMPARE(iq.queryJid(), QString()); QCOMPARE(iq.queryNode(), QLatin1String("princely_musings")); QCOMPARE(iq.items().size(), 1); @@ -217,13 +258,13 @@ void tst_QXmppPubSubIq::testRetractItem() iq.setTo(QLatin1String("pubsub.shakespeare.lit")); iq.setFrom(QLatin1String("hamlet@denmark.lit/elsinore")); iq.setType(QXmppIq::Set); - iq.setQueryType(QXmppPubSubIq::RetractQuery); + iq.setQueryType(QXmppPubSubIq<>::Retract); iq.setQueryJid({}); iq.setQueryNode(QLatin1String("princely_musings")); QXmppPubSubItem item; item.setId(QStringLiteral("ae890ac52d0df67ed7cfdf51b644e901")); - iq.setItems(QList<QXmppPubSubItem>() << item); + iq.setItems({ item }); serializePacket(iq, xml); } @@ -247,7 +288,7 @@ void tst_QXmppPubSubIq::testSubscribe() QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit")); QCOMPARE(iq.from(), QLatin1String("francisco@denmark.lit/barracks")); QCOMPARE(iq.type(), QXmppIq::Set); - QCOMPARE(iq.queryType(), QXmppPubSubIq::SubscribeQuery); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Subscribe); QCOMPARE(iq.queryJid(), QLatin1String("francisco@denmark.lit")); QCOMPARE(iq.queryNode(), QLatin1String("princely_musings")); serializePacket(iq, xml); @@ -270,25 +311,26 @@ void tst_QXmppPubSubIq::testSubscription() QXmppPubSubIq iq; parsePacket(iq, xml); - QCOMPARE(iq.id(), QLatin1String("sub1")); - QCOMPARE(iq.to(), QLatin1String("francisco@denmark.lit/barracks")); - QCOMPARE(iq.from(), QLatin1String("pubsub.shakespeare.lit")); + QCOMPARE(iq.id(), QString("sub1")); + QCOMPARE(iq.to(), QString("francisco@denmark.lit/barracks")); + QCOMPARE(iq.from(), QString("pubsub.shakespeare.lit")); QCOMPARE(iq.type(), QXmppIq::Result); - QCOMPARE(iq.queryType(), QXmppPubSubIq::SubscriptionQuery); - QCOMPARE(iq.queryJid(), QLatin1String("francisco@denmark.lit")); - QCOMPARE(iq.queryNode(), QLatin1String("princely_musings")); - QCOMPARE(iq.subscriptionId(), QLatin1String("ba49252aaa4f5d320c24d3766f0bdcade78c78d3")); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Subscription); + QCOMPARE(iq.subscription()->jid(), QString("francisco@denmark.lit")); + QCOMPARE(iq.subscription()->node(), QString("princely_musings")); + QCOMPARE(iq.subscription()->subId(), QStringLiteral("ba49252aaa4f5d320c24d3766f0bdcade78c78d3")); serializePacket(iq, xml); iq = QXmppPubSubIq(); - iq.setId(QLatin1String("sub1")); - iq.setTo(QLatin1String("francisco@denmark.lit/barracks")); - iq.setFrom(QLatin1String("pubsub.shakespeare.lit")); + iq.setId("sub1"); + iq.setTo("francisco@denmark.lit/barracks"); + iq.setFrom("pubsub.shakespeare.lit"); iq.setType(QXmppIq::Result); - iq.setQueryType(QXmppPubSubIq::SubscriptionQuery); - iq.setQueryJid(QLatin1String("francisco@denmark.lit")); - iq.setQueryNode(QLatin1String("princely_musings")); - iq.setSubscriptionId(QLatin1String("ba49252aaa4f5d320c24d3766f0bdcade78c78d3")); + iq.setQueryType(QXmppPubSubIq<>::Subscription); + iq.setSubscription(QXmppPubSubSubscription( + "francisco@denmark.lit", + "princely_musings", + "ba49252aaa4f5d320c24d3766f0bdcade78c78d3")); serializePacket(iq, xml); } @@ -311,7 +353,7 @@ void tst_QXmppPubSubIq::testSubscriptions() QCOMPARE(iq.to(), QLatin1String("pubsub.shakespeare.lit")); QCOMPARE(iq.from(), QLatin1String("francisco@denmark.lit/barracks")); QCOMPARE(iq.type(), QXmppIq::Get); - QCOMPARE(iq.queryType(), QXmppPubSubIq::SubscriptionsQuery); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Subscriptions); QCOMPARE(iq.queryJid(), QString()); QCOMPARE(iq.queryNode(), QString()); serializePacket(iq, xml); @@ -323,15 +365,23 @@ void tst_QXmppPubSubIq::testIsPubSubIq_data() QTest::addColumn<bool>("isValid"); QTest::newRow("valid-pubsub-iq") - << QByteArrayLiteral("<iq><pubsub xmlns=\"http://jabber.org/protocol/pubsub\"></pubsub></iq>") + << QByteArrayLiteral("<iq><pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><items node=\"smth\"/></pubsub></iq>") << true; + QTest::newRow("items-missing-node-name") + << QByteArrayLiteral("<iq><pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><items/></pubsub></iq>") + << false; + + QTest::newRow("unknown-query-type") + << QByteArrayLiteral("<iq><pubsub xmlns=\"http://jabber.org/protocol/pubsub\"><shuffle/></pubsub></iq>") + << false; + QTest::newRow("wrong-element") - << QByteArrayLiteral("<iq><pubsub2 xmlns=\"http://jabber.org/protocol/pubsub\"></pubsub2></iq>") + << QByteArrayLiteral("<iq><pubsub2 xmlns=\"http://jabber.org/protocol/pubsub\"><items node=\"smth\"/></pubsub2></iq>") << false; QTest::newRow("wrong-namespace") - << QByteArrayLiteral("<iq><pubsub xmlns=\"urn:xmpp:pubsub2:0\"></pubsub></iq>") + << QByteArrayLiteral("<iq><pubsub xmlns=\"urn:xmpp:pubsub2:0\"><items node=\"smth\"/></pubsub></iq>") << false; } @@ -344,7 +394,52 @@ void tst_QXmppPubSubIq::testIsPubSubIq() QCOMPARE(doc.setContent(xml, true), true); QDomElement element = doc.documentElement(); - QCOMPARE(QXmppPubSubIq::isPubSubIq(element), isValid); + QCOMPARE(QXmppPubSubIq<>::isPubSubIq(element), isValid); +} + +void tst_QXmppPubSubIq::testCustomItem() +{ + const QByteArray xml( + "<iq id=\"a1\" type=\"result\">" + "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" + "<items node=\"blah\">" + "<item id=\"42\"><test-payload/></item>" + "<item id=\"23\"><test-payload/></item>" + "</items>" + "</pubsub>" + "</iq>"); + + // test isPubSubIq also checks item validity + TestItem::isItemCalled = false; + QVERIFY(QXmppPubSubIq<TestItem>::isPubSubIq(xmlToDom(xml))); + QVERIFY(TestItem::isItemCalled); + + QXmppPubSubIq<TestItem> iq; + parsePacket(iq, xml); + QCOMPARE(iq.type(), QXmppIq::Result); + QCOMPARE(iq.queryType(), QXmppPubSubIq<>::Items); + QCOMPARE(iq.queryJid(), QString()); + QCOMPARE(iq.queryNode(), QStringLiteral("blah")); + QCOMPARE(iq.items().size(), 2); + QCOMPARE(iq.items().at(0).id(), QStringLiteral("42")); + QCOMPARE(iq.items().at(1).id(), QStringLiteral("23")); + QCOMPARE(iq.items().at(0).publisher(), QString()); + QCOMPARE(iq.items().at(1).publisher(), QString()); + + QVERIFY(iq.items().at(0).parseCalled); + QVERIFY(iq.items().at(1).parseCalled); + QVERIFY(!iq.items().at(0).serializeCalled); + QVERIFY(!iq.items().at(1).serializeCalled); + + serializePacket(iq, xml); + + iq = QXmppPubSubIq<TestItem>(); + iq.setId("a1"); + iq.setType(QXmppIq::Result); + iq.setQueryType(QXmppPubSubIq<>::Items); + iq.setQueryNode("blah"); + iq.setItems({ TestItem("42"), TestItem("23") }); + serializePacket(iq, xml); } QTEST_MAIN(tst_QXmppPubSubIq) |
