diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-27 15:06:55 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-27 15:06:55 +0200 |
| commit | db2f84e966682c1072cd579baa9511906a276ab0 (patch) | |
| tree | 6554c194b2cf52e19e7940ed31f9c64c9d540569 /tests/tests.cpp | |
| parent | 40c1ce264991447522e8296ad86a55ca5c3b81d1 (diff) | |
| download | qxmpp-db2f84e966682c1072cd579baa9511906a276ab0.tar.gz | |
start splitting tests
Diffstat (limited to 'tests/tests.cpp')
| -rw-r--r-- | tests/tests.cpp | 966 |
1 files changed, 0 insertions, 966 deletions
diff --git a/tests/tests.cpp b/tests/tests.cpp deleted file mode 100644 index 0937afb1..00000000 --- a/tests/tests.cpp +++ /dev/null @@ -1,966 +0,0 @@ -/* - * Copyright (C) 2008-2012 The QXmpp developers - * - * Authors: - * Jeremy Lainé - * Manjeet Dahiya - * - * Source: - * http://code.google.com/p/qxmpp - * - * This file is a part of QXmpp library. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - */ - -#include <cstdlib> - -#include <QCoreApplication> -#include <QDomDocument> -#include <QEventLoop> -#include <QtTest/QtTest> - -#include "QXmppArchiveIq.h" -#include "QXmppBindIq.h" -#include "QXmppClient.h" -#include "QXmppDiscoveryIq.h" -#include "QXmppNonSASLAuth.h" -#include "QXmppPasswordChecker.h" -#include "QXmppPubSubIq.h" -#include "QXmppSessionIq.h" -#include "QXmppServer.h" -#include "QXmppStreamFeatures.h" -#include "QXmppUtils.h" -#include "QXmppVersionIq.h" -#include "QXmppGlobal.h" -#include "QXmppEntityTimeIq.h" - -#include "codec.h" -#include "dataform.h" -#include "iq.h" -#include "jingle.h" -#include "message.h" -#include "presence.h" -#include "register.h" -#include "roster.h" -#include "rpc.h" -#include "rsm.h" -#include "rtp.h" -#include "sasl.h" -#include "si.h" -#include "stanza.h" -#include "stun.h" -#include "tests.h" -#include "vcard.h" - -void TestUtils::testCrc32() -{ - quint32 crc = QXmppUtils::generateCrc32(QByteArray()); - QCOMPARE(crc, 0u); - - crc = QXmppUtils::generateCrc32(QByteArray("Hi There")); - QCOMPARE(crc, 0xDB143BBEu); -} - -void TestUtils::testHmac() -{ - QByteArray hmac = QXmppUtils::generateHmacMd5(QByteArray(16, 0x0b), QByteArray("Hi There")); - QCOMPARE(hmac, QByteArray::fromHex("9294727a3638bb1c13f48ef8158bfc9d")); - - hmac = QXmppUtils::generateHmacMd5(QByteArray("Jefe"), QByteArray("what do ya want for nothing?")); - QCOMPARE(hmac, QByteArray::fromHex("750c783e6ab0b503eaa86e310a5db738")); - - hmac = QXmppUtils::generateHmacMd5(QByteArray(16, 0xaa), QByteArray(50, 0xdd)); - QCOMPARE(hmac, QByteArray::fromHex("56be34521d144c88dbb8c733f0e8b3f6")); -} - -void TestUtils::testJid() -{ - QCOMPARE(QXmppUtils::jidToBareJid("foo@example.com/resource"), QLatin1String("foo@example.com")); - QCOMPARE(QXmppUtils::jidToBareJid("foo@example.com"), QLatin1String("foo@example.com")); - QCOMPARE(QXmppUtils::jidToBareJid("example.com"), QLatin1String("example.com")); - QCOMPARE(QXmppUtils::jidToBareJid(QString()), QString()); - - QCOMPARE(QXmppUtils::jidToDomain("foo@example.com/resource"), QLatin1String("example.com")); - QCOMPARE(QXmppUtils::jidToDomain("foo@example.com"), QLatin1String("example.com")); - QCOMPARE(QXmppUtils::jidToDomain("example.com"), QLatin1String("example.com")); - QCOMPARE(QXmppUtils::jidToDomain(QString()), QString()); - - QCOMPARE(QXmppUtils::jidToResource("foo@example.com/resource"), QLatin1String("resource")); - QCOMPARE(QXmppUtils::jidToResource("foo@example.com"), QString()); - QCOMPARE(QXmppUtils::jidToResource("example.com"), QString()); - QCOMPARE(QXmppUtils::jidToResource(QString()), QString()); - - QCOMPARE(QXmppUtils::jidToUser("foo@example.com/resource"), QLatin1String("foo")); - QCOMPARE(QXmppUtils::jidToUser("foo@example.com"), QLatin1String("foo")); - QCOMPARE(QXmppUtils::jidToUser("example.com"), QString()); - QCOMPARE(QXmppUtils::jidToUser(QString()), QString()); -} - -// FIXME: how should we test MIME detection without expose getImageType? -#if 0 -QString getImageType(const QByteArray &contents); - -static void testMimeType(const QString &fileName, const QString fileType) -{ - // load file from resources - QFile file(":/" + fileName); - QCOMPARE(file.open(QIODevice::ReadOnly), true); - QCOMPARE(getImageType(file.readAll()), fileType); - file.close(); -} - -void TestUtils::testMime() -{ - testMimeType("test.bmp", "image/bmp"); - testMimeType("test.gif", "image/gif"); - testMimeType("test.jpg", "image/jpeg"); - testMimeType("test.mng", "video/x-mng"); - testMimeType("test.png", "image/png"); - testMimeType("test.svg", "image/svg+xml"); - testMimeType("test.xpm", "image/x-xpm"); -} -#else -void TestUtils::testMime() -{ -} -#endif - -void TestUtils::testLibVersion() -{ - QCOMPARE(QXmppVersion(), QString("0.7.3")); -} - -void TestUtils::testTimezoneOffset() -{ - // parsing - QCOMPARE(QXmppUtils::timezoneOffsetFromString("Z"), 0); - QCOMPARE(QXmppUtils::timezoneOffsetFromString("+00:00"), 0); - QCOMPARE(QXmppUtils::timezoneOffsetFromString("-00:00"), 0); - QCOMPARE(QXmppUtils::timezoneOffsetFromString("+01:30"), 5400); - QCOMPARE(QXmppUtils::timezoneOffsetFromString("-01:30"), -5400); - - // serialization - QCOMPARE(QXmppUtils::timezoneOffsetToString(0), QLatin1String("Z")); - QCOMPARE(QXmppUtils::timezoneOffsetToString(5400), QLatin1String("+01:30")); - QCOMPARE(QXmppUtils::timezoneOffsetToString(-5400), QLatin1String("-01:30")); -} - -void TestPackets::testArchiveList_data() -{ - QTest::addColumn<QByteArray>("xml"); - QTest::addColumn<int>("max"); - - QTest::newRow("no rsm") << - QByteArray( - "<iq id=\"list_1\" type=\"get\">" - "<list xmlns=\"urn:xmpp:archive\" with=\"juliet@capulet.com\"" - " start=\"1469-07-21T02:00:00Z\" end=\"1479-07-21T04:00:00Z\"/>" - "</iq>") << -1; - - QTest::newRow("with rsm") << - QByteArray( - "<iq id=\"list_1\" type=\"get\">" - "<list xmlns=\"urn:xmpp:archive\" with=\"juliet@capulet.com\"" - " start=\"1469-07-21T02:00:00Z\" end=\"1479-07-21T04:00:00Z\">" - "<set xmlns=\"http://jabber.org/protocol/rsm\">" - "<max>30</max>" - "</set>" - "</list>" - "</iq>") << 30; -} - -void TestPackets::testArchiveList() -{ - QFETCH(QByteArray, xml); - QFETCH(int, max); - - QXmppArchiveListIq iq; - parsePacket(iq, xml); - QCOMPARE(iq.type(), QXmppIq::Get); - QCOMPARE(iq.id(), QLatin1String("list_1")); - QCOMPARE(iq.with(), QLatin1String("juliet@capulet.com")); - QCOMPARE(iq.start(), QDateTime(QDate(1469, 7, 21), QTime(2, 0, 0), Qt::UTC)); - QCOMPARE(iq.end(), QDateTime(QDate(1479, 7, 21), QTime(4, 0, 0), Qt::UTC)); - QCOMPARE(iq.resultSetQuery().max(), max); - serializePacket(iq, xml); -} - -void TestPackets::testArchiveChat_data() -{ - QTest::addColumn<QByteArray>("xml"); - QTest::addColumn<int>("count"); - - QTest::newRow("no rsm") << - QByteArray( - "<iq id=\"chat_1\" type=\"result\">" - "<chat xmlns=\"urn:xmpp:archive\"" - " with=\"juliet@capulet.com\"" - " start=\"1469-07-21T02:56:15Z\"" - " subject=\"She speaks!\"" - " version=\"4\"" - ">" - "<from secs=\"0\"><body>Art thou not Romeo, and a Montague?</body></from>" - "<to secs=\"11\"><body>Neither, fair saint, if either thee dislike.</body></to>" - "<from secs=\"7\"><body>How cam'st thou hither, tell me, and wherefore?</body></from>" - "</chat>" - "</iq>") << -1; - - QTest::newRow("with rsm") << - QByteArray( - "<iq id=\"chat_1\" type=\"result\">" - "<chat xmlns=\"urn:xmpp:archive\"" - " with=\"juliet@capulet.com\"" - " start=\"1469-07-21T02:56:15Z\"" - " subject=\"She speaks!\"" - " version=\"4\"" - ">" - "<from secs=\"0\"><body>Art thou not Romeo, and a Montague?</body></from>" - "<to secs=\"11\"><body>Neither, fair saint, if either thee dislike.</body></to>" - "<from secs=\"7\"><body>How cam'st thou hither, tell me, and wherefore?</body></from>" - "<set xmlns=\"http://jabber.org/protocol/rsm\">" - "<count>3</count>" - "</set>" - "</chat>" - "</iq>") << 3; -} - -void TestPackets::testArchiveChat() -{ - QFETCH(QByteArray, xml); - QFETCH(int, count); - - QXmppArchiveChatIq iq; - parsePacket(iq, xml); - QCOMPARE(iq.type(), QXmppIq::Result); - QCOMPARE(iq.id(), QLatin1String("chat_1")); - QCOMPARE(iq.chat().with(), QLatin1String("juliet@capulet.com")); - QCOMPARE(iq.chat().messages().size(), 3); - QCOMPARE(iq.chat().messages()[0].isReceived(), true); - QCOMPARE(iq.chat().messages()[0].body(), QLatin1String("Art thou not Romeo, and a Montague?")); - QCOMPARE(iq.chat().messages()[0].date(), QDateTime(QDate(1469, 7, 21), QTime(2, 56, 15), Qt::UTC)); - QCOMPARE(iq.chat().messages()[1].isReceived(), false); - QCOMPARE(iq.chat().messages()[1].date(), QDateTime(QDate(1469, 7, 21), QTime(2, 56, 26), Qt::UTC)); - QCOMPARE(iq.chat().messages()[1].body(), QLatin1String("Neither, fair saint, if either thee dislike.")); - QCOMPARE(iq.chat().messages()[2].isReceived(), true); - QCOMPARE(iq.chat().messages()[2].date(), QDateTime(QDate(1469, 7, 21), QTime(2, 56, 33), Qt::UTC)); - QCOMPARE(iq.chat().messages()[2].body(), QLatin1String("How cam'st thou hither, tell me, and wherefore?")); - QCOMPARE(iq.resultSetReply().count(), count); - serializePacket(iq, xml); -} - -void TestPackets::testArchiveRemove() -{ - const QByteArray xml( - "<iq id=\"remove_1\" type=\"set\">" - "<remove xmlns=\"urn:xmpp:archive\" with=\"juliet@capulet.com\"" - " start=\"1469-07-21T02:00:00Z\" end=\"1479-07-21T04:00:00Z\"/>" - "</iq>"); - - QXmppArchiveRemoveIq iq; - parsePacket(iq, xml); - QCOMPARE(iq.type(), QXmppIq::Set); - QCOMPARE(iq.id(), QLatin1String("remove_1")); - QCOMPARE(iq.with(), QLatin1String("juliet@capulet.com")); - QCOMPARE(iq.start(), QDateTime(QDate(1469, 7, 21), QTime(2, 0, 0), Qt::UTC)); - QCOMPARE(iq.end(), QDateTime(QDate(1479, 7, 21), QTime(4, 0, 0), Qt::UTC)); - serializePacket(iq, xml); -} - -void TestPackets::testArchiveRetrieve_data() -{ - QTest::addColumn<QByteArray>("xml"); - QTest::addColumn<int>("max"); - - QTest::newRow("no rsm") << - QByteArray( - "<iq id=\"retrieve_1\" type=\"get\">" - "<retrieve xmlns=\"urn:xmpp:archive\" with=\"juliet@capulet.com\"" - " start=\"1469-07-21T02:00:00Z\"/>" - "</iq>") << -1; - - QTest::newRow("with rsm") << - QByteArray( - "<iq id=\"retrieve_1\" type=\"get\">" - "<retrieve xmlns=\"urn:xmpp:archive\" with=\"juliet@capulet.com\"" - " start=\"1469-07-21T02:00:00Z\">" - "<set xmlns=\"http://jabber.org/protocol/rsm\">" - "<max>30</max>" - "</set>" - "</retrieve>" - "</iq>") << 30; -} - -void TestPackets::testArchiveRetrieve() -{ - QFETCH(QByteArray, xml); - QFETCH(int, max); - - QXmppArchiveRetrieveIq iq; - parsePacket(iq, xml); - QCOMPARE(iq.type(), QXmppIq::Get); - QCOMPARE(iq.id(), QLatin1String("retrieve_1")); - QCOMPARE(iq.with(), QLatin1String("juliet@capulet.com")); - QCOMPARE(iq.start(), QDateTime(QDate(1469, 7, 21), QTime(2, 0, 0), Qt::UTC)); - QCOMPARE(iq.resultSetQuery().max(), max); - serializePacket(iq, xml); -} - -void TestPackets::testBindNoResource() -{ - const QByteArray xml( - "<iq id=\"bind_1\" type=\"set\">" - "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"/>" - "</iq>"); - - QXmppBindIq bind; - parsePacket(bind, xml); - QCOMPARE(bind.type(), QXmppIq::Set); - QCOMPARE(bind.id(), QString("bind_1")); - QCOMPARE(bind.jid(), QString()); - QCOMPARE(bind.resource(), QString()); - serializePacket(bind, xml); -} - -void TestPackets::testBindResource() -{ - const QByteArray xml( - "<iq id=\"bind_2\" type=\"set\">" - "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\">" - "<resource>someresource</resource>" - "</bind>" - "</iq>"); - - QXmppBindIq bind; - parsePacket(bind, xml); - QCOMPARE(bind.type(), QXmppIq::Set); - QCOMPARE(bind.id(), QString("bind_2")); - QCOMPARE(bind.jid(), QString()); - QCOMPARE(bind.resource(), QString("someresource")); - serializePacket(bind, xml); -} - -void TestPackets::testBindResult() -{ - const QByteArray xml( - "<iq id=\"bind_2\" type=\"result\">" - "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\">" - "<jid>somenode@example.com/someresource</jid>" - "</bind>" - "</iq>"); - - QXmppBindIq bind; - parsePacket(bind, xml); - QCOMPARE(bind.type(), QXmppIq::Result); - QCOMPARE(bind.id(), QString("bind_2")); - QCOMPARE(bind.jid(), QString("somenode@example.com/someresource")); - QCOMPARE(bind.resource(), QString()); - serializePacket(bind, xml); -} - -void TestPackets::testDiscovery() -{ - const QByteArray xml( - "<iq id=\"disco1\" from=\"benvolio@capulet.lit/230193\" type=\"result\">" - "<query xmlns=\"http://jabber.org/protocol/disco#info\">" - "<identity category=\"client\" name=\"Exodus 0.9.1\" type=\"pc\"/>" - "<feature var=\"http://jabber.org/protocol/caps\"/>" - "<feature var=\"http://jabber.org/protocol/disco#info\"/>" - "<feature var=\"http://jabber.org/protocol/disco#items\"/>" - "<feature var=\"http://jabber.org/protocol/muc\"/>" - "</query>" - "</iq>"); - - QXmppDiscoveryIq disco; - parsePacket(disco, xml); - QCOMPARE(disco.verificationString(), QByteArray::fromBase64("QgayPKawpkPSDYmwT/WM94uAlu0=")); - serializePacket(disco, xml); -} - -void TestPackets::testDiscoveryWithForm() -{ - const QByteArray xml( - "<iq id=\"disco1\" to=\"juliet@capulet.lit/chamber\" from=\"benvolio@capulet.lit/230193\" type=\"result\">" - "<query xmlns=\"http://jabber.org/protocol/disco#info\" node=\"http://psi-im.org#q07IKJEyjvHSyhy//CH0CxmKi8w=\">" - "<identity xml:lang=\"en\" category=\"client\" name=\"Psi 0.11\" type=\"pc\"/>" - "<identity xml:lang=\"el\" category=\"client\" name=\"Ψ 0.11\" type=\"pc\"/>" - "<feature var=\"http://jabber.org/protocol/caps\"/>" - "<feature var=\"http://jabber.org/protocol/disco#info\"/>" - "<feature var=\"http://jabber.org/protocol/disco#items\"/>" - "<feature var=\"http://jabber.org/protocol/muc\"/>" - "<x xmlns=\"jabber:x:data\" type=\"result\">" - "<field type=\"hidden\" var=\"FORM_TYPE\">" - "<value>urn:xmpp:dataforms:softwareinfo</value>" - "</field>" - "<field type=\"text-multi\" var=\"ip_version\">" - "<value>ipv4</value>" - "<value>ipv6</value>" - "</field>" - "<field type=\"text-single\" var=\"os\">" - "<value>Mac</value>" - "</field>" - "<field type=\"text-single\" var=\"os_version\">" - "<value>10.5.1</value>" - "</field>" - "<field type=\"text-single\" var=\"software\">" - "<value>Psi</value>" - "</field>" - "<field type=\"text-single\" var=\"software_version\">" - "<value>0.11</value>" - "</field>" - "</x>" - "</query>" - "</iq>"); - - QXmppDiscoveryIq disco; - parsePacket(disco, xml); - QCOMPARE(disco.verificationString(), QByteArray::fromBase64("q07IKJEyjvHSyhy//CH0CxmKi8w=")); - serializePacket(disco, xml); -} - -void TestPackets::testNonSaslAuth() -{ - // Client Requests Authentication Fields from Server - const QByteArray xml1( - "<iq id=\"auth1\" to=\"shakespeare.lit\" type=\"get\">" - "<query xmlns=\"jabber:iq:auth\"/>" - "</iq>"); - - QXmppNonSASLAuthIq iq1; - parsePacket(iq1, xml1); - serializePacket(iq1, xml1); - - // Client Provides Required Information (Plaintext) - const QByteArray xml3( - "<iq id=\"auth2\" type=\"set\">" - "<query xmlns=\"jabber:iq:auth\">" - "<username>bill</username>" - "<password>Calli0pe</password>" - "<resource>globe</resource>" - "</query>" - "</iq>"); - QXmppNonSASLAuthIq iq3; - parsePacket(iq3, xml3); - QCOMPARE(iq3.username(), QLatin1String("bill")); - QCOMPARE(iq3.digest(), QByteArray()); - QCOMPARE(iq3.password(), QLatin1String("Calli0pe")); - QCOMPARE(iq3.resource(), QLatin1String("globe")); - serializePacket(iq3, xml3); - - // Client Provides Required Information (Plaintext) - const QByteArray xml4( - "<iq id=\"auth2\" type=\"set\">" - "<query xmlns=\"jabber:iq:auth\">" - "<username>bill</username>" - "<digest>48fc78be9ec8f86d8ce1c39c320c97c21d62334d</digest>" - "<resource>globe</resource>" - "</query>" - "</iq>"); - QXmppNonSASLAuthIq iq4; - parsePacket(iq4, xml4); - QCOMPARE(iq4.username(), QLatin1String("bill")); - QCOMPARE(iq4.digest(), QByteArray("\x48\xfc\x78\xbe\x9e\xc8\xf8\x6d\x8c\xe1\xc3\x9c\x32\x0c\x97\xc2\x1d\x62\x33\x4d")); - QCOMPARE(iq4.password(), QString()); - QCOMPARE(iq4.resource(), QLatin1String("globe")); - serializePacket(iq4, xml4); -} - -void TestPackets::testSession() -{ - const QByteArray xml( - "<iq id=\"session_1\" to=\"example.com\" type=\"set\">" - "<session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/>" - "</iq>"); - - QXmppSessionIq session; - parsePacket(session, xml); - QCOMPARE(session.id(), QString("session_1")); - QCOMPARE(session.to(), QString("example.com")); - QCOMPARE(session.type(), QXmppIq::Set); - serializePacket(session, xml); -} - -void TestPackets::testStreamFeatures() -{ - const QByteArray xml("<stream:features/>"); - QXmppStreamFeatures features; - parsePacket(features, xml); - QCOMPARE(features.bindMode(), QXmppStreamFeatures::Disabled); - QCOMPARE(features.sessionMode(), QXmppStreamFeatures::Disabled); - QCOMPARE(features.nonSaslAuthMode(), QXmppStreamFeatures::Disabled); - QCOMPARE(features.tlsMode(), QXmppStreamFeatures::Disabled); - QCOMPARE(features.authMechanisms(), QStringList()); - QCOMPARE(features.compressionMethods(), QStringList()); - serializePacket(features, xml); - - const QByteArray xml2("<stream:features>" - "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"/>" - "<session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/>" - "<auth xmlns=\"http://jabber.org/features/iq-auth\"/>" - "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>" - "<compression xmlns=\"http://jabber.org/features/compress\"><method>zlib</method></compression>" - "<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"><mechanism>PLAIN</mechanism></mechanisms>" - "</stream:features>"); - QXmppStreamFeatures features2; - parsePacket(features2, xml2); - QCOMPARE(features2.bindMode(), QXmppStreamFeatures::Enabled); - QCOMPARE(features2.sessionMode(), QXmppStreamFeatures::Enabled); - QCOMPARE(features2.nonSaslAuthMode(), QXmppStreamFeatures::Enabled); - QCOMPARE(features2.tlsMode(), QXmppStreamFeatures::Enabled); - QCOMPARE(features2.authMechanisms(), QStringList() << "PLAIN"); - QCOMPARE(features2.compressionMethods(), QStringList() << "zlib"); - serializePacket(features2, xml2); -} - -void TestPackets::testVersionGet() -{ - const QByteArray xmlGet( - "<iq id=\"version_1\" to=\"juliet@capulet.com/balcony\" " - "from=\"romeo@montague.net/orchard\" type=\"get\">" - "<query xmlns=\"jabber:iq:version\"/></iq>"); - - QXmppVersionIq verIqGet; - parsePacket(verIqGet, xmlGet); - QCOMPARE(verIqGet.id(), QLatin1String("version_1")); - QCOMPARE(verIqGet.to(), QLatin1String("juliet@capulet.com/balcony")); - QCOMPARE(verIqGet.from(), QLatin1String("romeo@montague.net/orchard")); - QCOMPARE(verIqGet.type(), QXmppIq::Get); - serializePacket(verIqGet, xmlGet); -} - -void TestPackets::testVersionResult() -{ - const QByteArray xmlResult( - "<iq id=\"version_1\" to=\"romeo@montague.net/orchard\" " - "from=\"juliet@capulet.com/balcony\" type=\"result\">" - "<query xmlns=\"jabber:iq:version\">" - "<name>qxmpp</name>" - "<os>Windows-XP</os>" - "<version>0.2.0</version>" - "</query></iq>"); - - QXmppVersionIq verIqResult; - parsePacket(verIqResult, xmlResult); - QCOMPARE(verIqResult.id(), QLatin1String("version_1")); - QCOMPARE(verIqResult.to(), QLatin1String("romeo@montague.net/orchard")); - QCOMPARE(verIqResult.from(), QLatin1String("juliet@capulet.com/balcony")); - QCOMPARE(verIqResult.type(), QXmppIq::Result); - QCOMPARE(verIqResult.name(), QString("qxmpp")); - QCOMPARE(verIqResult.version(), QString("0.2.0")); - QCOMPARE(verIqResult.os(), QString("Windows-XP")); - - serializePacket(verIqResult, xmlResult); -} - -void TestPackets::testEntityTimeGet() -{ - const QByteArray xml("<iq id=\"time_1\" " - "to=\"juliet@capulet.com/balcony\" " - "from=\"romeo@montague.net/orchard\" type=\"get\">" - "<time xmlns=\"urn:xmpp:time\"/>" - "</iq>"); - - QXmppEntityTimeIq entityTime; - parsePacket(entityTime, xml); - QCOMPARE(entityTime.id(), QLatin1String("time_1")); - QCOMPARE(entityTime.to(), QLatin1String("juliet@capulet.com/balcony")); - QCOMPARE(entityTime.from(), QLatin1String("romeo@montague.net/orchard")); - QCOMPARE(entityTime.type(), QXmppIq::Get); - serializePacket(entityTime, xml); -} - -void TestPackets::testEntityTimeResult() -{ - const QByteArray xml( - "<iq id=\"time_1\" to=\"romeo@montague.net/orchard\" from=\"juliet@capulet.com/balcony\" type=\"result\">" - "<time xmlns=\"urn:xmpp:time\">" - "<tzo>-06:00</tzo>" - "<utc>2006-12-19T17:58:35Z</utc>" - "</time>" - "</iq>"); - - QXmppEntityTimeIq entityTime; - parsePacket(entityTime, xml); - QCOMPARE(entityTime.id(), QLatin1String("time_1")); - QCOMPARE(entityTime.from(), QLatin1String("juliet@capulet.com/balcony")); - QCOMPARE(entityTime.to(), QLatin1String("romeo@montague.net/orchard")); - QCOMPARE(entityTime.type(), QXmppIq::Result); - QCOMPARE(entityTime.tzo(), -21600); - QCOMPARE(entityTime.utc(), QDateTime(QDate(2006, 12, 19), QTime(17, 58, 35), Qt::UTC)); - serializePacket(entityTime, xml); -} - -void TestPubSub::testItems() -{ - const QByteArray xml( - "<iq" - " id=\"items1\"" - " to=\"pubsub.shakespeare.lit\"" - " from=\"francisco@denmark.lit/barracks\"" - " type=\"get\">" - "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" - "<items node=\"storage:bookmarks\"/>" - "</pubsub>" - "</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::Get); - QCOMPARE(iq.queryType(), QXmppPubSubIq::ItemsQuery); - QCOMPARE(iq.queryJid(), QString()); - QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks")); - serializePacket(iq, xml); -} - -void TestPubSub::testItemsResponse() -{ - const QByteArray xml( - "<iq" - " id=\"items1\"" - " to=\"francisco@denmark.lit/barracks\"" - " from=\"pubsub.shakespeare.lit\"" - " 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>" - "</items>" - "</pubsub>" - "</iq>"); - - QXmppPubSubIq iq; - parsePacket(iq, xml); - QCOMPARE(iq.id(), QLatin1String("items1")); - 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.queryJid(), QString()); - QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks")); - serializePacket(iq, xml); -} - -void TestPubSub::testPublish() -{ - const QByteArray xml( - "<iq" - " id=\"items1\"" - " to=\"pubsub.shakespeare.lit\"" - " from=\"francisco@denmark.lit/barracks\"" - " 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>" - "</publish>" - "</pubsub>" - "</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.queryJid(), QString()); - QCOMPARE(iq.queryNode(), QLatin1String("storage:bookmarks")); - serializePacket(iq, xml); -} - -void TestPubSub::testSubscribe() -{ - const QByteArray xml( - "<iq" - " id=\"sub1\"" - " to=\"pubsub.shakespeare.lit\"" - " from=\"francisco@denmark.lit/barracks\"" - " type=\"set\">" - "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" - "<subscribe jid=\"francisco@denmark.lit\" node=\"princely_musings\"/>" - "</pubsub>" - "</iq>"); - - QXmppPubSubIq iq; - parsePacket(iq, xml); - QCOMPARE(iq.id(), QLatin1String("sub1")); - 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.queryJid(), QLatin1String("francisco@denmark.lit")); - QCOMPARE(iq.queryNode(), QLatin1String("princely_musings")); - serializePacket(iq, xml); -} - -void TestPubSub::testSubscription() -{ - const QByteArray xml( - "<iq" - " id=\"sub1\"" - " to=\"francisco@denmark.lit/barracks\"" - " from=\"pubsub.shakespeare.lit\"" - " type=\"result\">" - "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" - "<subscription jid=\"francisco@denmark.lit\"" - " node=\"princely_musings\"" - " subid=\"ba49252aaa4f5d320c24d3766f0bdcade78c78d3\"" - " subscription=\"subscribed\"/>" - "</pubsub>" - "</iq>"); - - 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.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")); - serializePacket(iq, xml); -} - -void TestPubSub::testSubscriptions() -{ - const QByteArray xml( - "<iq" - " id=\"subscriptions1\"" - " to=\"pubsub.shakespeare.lit\"" - " from=\"francisco@denmark.lit/barracks\"" - " type=\"get\">" - "<pubsub xmlns=\"http://jabber.org/protocol/pubsub\">" - "<subscriptions/>" - "</pubsub>" - "</iq>"); - - QXmppPubSubIq iq; - parsePacket(iq, xml); - QCOMPARE(iq.id(), QLatin1String("subscriptions1")); - 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.queryJid(), QString()); - QCOMPARE(iq.queryNode(), QString()); - serializePacket(iq, xml); -} - -class TestPasswordChecker : public QXmppPasswordChecker -{ -public: - TestPasswordChecker(const QString &username, const QString &password) - : m_getPassword(true), m_username(username), m_password(password) - { - }; - - /// Retrieves the password for the given username. - QXmppPasswordReply::Error getPassword(const QXmppPasswordRequest &request, QString &password) - { - if (request.username() == m_username) - { - password = m_password; - return QXmppPasswordReply::NoError; - } else { - return QXmppPasswordReply::AuthorizationError; - } - }; - - /// Sets whether getPassword() is enabled. - void setGetPassword(bool getPassword) - { - m_getPassword = getPassword; - } - - /// Returns whether getPassword() is enabled. - bool hasGetPassword() const - { - return m_getPassword; - }; - -private: - bool m_getPassword; - QString m_username; - QString m_password; -}; - -void TestServer::testConnect_data() -{ - QTest::addColumn<QString>("username"); - QTest::addColumn<QString>("password"); - QTest::addColumn<QString>("mechanism"); - QTest::addColumn<bool>("connected"); - - QTest::newRow("plain-good") << "testuser" << "testpwd" << "PLAIN" << true; - QTest::newRow("plain-bad-username") << "baduser" << "testpwd" << "PLAIN" << false; - QTest::newRow("plain-bad-password") << "testuser" << "badpwd" << "PLAIN" << false; - - QTest::newRow("digest-good") << "testuser" << "testpwd" << "DIGEST-MD5" << true; - QTest::newRow("digest-bad-username") << "baduser" << "testpwd" << "DIGEST-MD5" << false; - QTest::newRow("digest-bad-password") << "testuser" << "badpwd" << "DIGEST-MD5" << false; -} - -void TestServer::testConnect() -{ - QFETCH(QString, username); - QFETCH(QString, password); - QFETCH(QString, mechanism); - QFETCH(bool, connected); - - const QString testDomain("localhost"); - const QHostAddress testHost(QHostAddress::LocalHost); - const quint16 testPort = 12345; - - QXmppLogger logger; - logger.setLoggingType(QXmppLogger::StdoutLogging); - - // prepare server - TestPasswordChecker passwordChecker("testuser", "testpwd"); - - QXmppServer server; - server.setDomain(testDomain); - server.setLogger(&logger); - server.setPasswordChecker(&passwordChecker); - server.listenForClients(testHost, testPort); - - // prepare client - QXmppClient client; - client.setLogger(&logger); - - QEventLoop loop; - connect(&client, SIGNAL(connected()), - &loop, SLOT(quit())); - connect(&client, SIGNAL(disconnected()), - &loop, SLOT(quit())); - - QXmppConfiguration config; - config.setDomain(testDomain); - config.setHost(testHost.toString()); - config.setPort(testPort); - config.setUser(username); - config.setPassword(password); - config.setSaslAuthMechanism(mechanism); - client.connectToServer(config); - loop.exec(); - QCOMPARE(client.isConnected(), connected); -} - -int main(int argc, char *argv[]) -{ - QCoreApplication app(argc, argv); - - QXmppPresence pres; - pres.availableStatusType(); - - // run tests - int errors = 0; - - TestUtils testUtils; - errors += QTest::qExec(&testUtils); - - TestPackets testPackets; - errors += QTest::qExec(&testPackets); - -#ifdef QXMPP_AUTOTEST_INTERNAL - TestCodec testCodec; - errors += QTest::qExec(&testCodec); -#endif - - tst_QXmppDataForm testDataForm; - errors += QTest::qExec(&testDataForm); - - tst_QXmppIq testIq; - errors += QTest::qExec(&testIq); - - TestJingle testJingle; - errors += QTest::qExec(&testJingle); - - tst_QXmppMessage testMessage; - errors += QTest::qExec(&testMessage); - - tst_QXmppPresence testPresence; - errors += QTest::qExec(&testPresence); - - TestPubSub testPubSub; - errors += QTest::qExec(&testPubSub); - - tst_QXmppRegisterIq testRegister; - errors += QTest::qExec(&testRegister); - - tst_QXmppResultSet testRsm; - errors += QTest::qExec(&testRsm); - - tst_QXmppRosterIq testRoster; - errors += QTest::qExec(&testRoster); - - tst_QXmppRtpPacket testRtp; - errors += QTest::qExec(&testRtp); - -#ifdef QXMPP_AUTOTEST_INTERNAL - tst_QXmppSasl testSasl; - errors += QTest::qExec(&testSasl); - - tst_QXmppSaslClient testSaslClient; - errors += QTest::qExec(&testSaslClient); - - tst_QXmppSaslServer testSaslServer; - errors += QTest::qExec(&testSaslServer); -#endif - - TestServer testServer; - errors += QTest::qExec(&testServer); - - tst_QXmppStanza testStanza; - errors += QTest::qExec(&testStanza); - -#ifdef QXMPP_AUTOTEST_INTERNAL - tst_QXmppStreamInitiationIq testSI; - errors += QTest::qExec(&testSI); -#endif - - TestStun testStun; - errors += QTest::qExec(&testStun); - - tst_QXmppVCardIq testVCard; - errors += QTest::qExec(&testVCard); - - TestXmlRpc testXmlRpc; - errors += QTest::qExec(&testXmlRpc); - - if (errors) - { - qWarning() << "Total failed tests:" << errors; - return EXIT_FAILURE; - } - return EXIT_SUCCESS; -}; - |
