diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-07-21 22:16:24 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-07-21 22:16:24 +0200 |
| commit | 0a584900db720454f06d136e6bdf445a8f87e8b7 (patch) | |
| tree | c4b98aad62def1d9063abf9269c718a13d4b32b8 /tests/rpc.cpp | |
| parent | 32183be3ef5fcbdca5b7f222e949898d5841a1a3 (diff) | |
| download | qxmpp-0a584900db720454f06d136e6bdf445a8f87e8b7.tar.gz | |
split out RPC and STUN tests
Diffstat (limited to 'tests/rpc.cpp')
| -rw-r--r-- | tests/rpc.cpp | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/tests/rpc.cpp b/tests/rpc.cpp new file mode 100644 index 00000000..a5136f65 --- /dev/null +++ b/tests/rpc.cpp @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2008-2012 The QXmpp developers + * + * Author: + * Jeremy Lainé + * + * 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 "QXmppRpcIq.h" + +#include "rpc.h" +#include "tests.h" + +static void checkVariant(const QVariant &value, const QByteArray &xml) +{ + // serialise + QBuffer buffer; + buffer.open(QIODevice::ReadWrite); + QXmlStreamWriter writer(&buffer); + QXmppRpcMarshaller::marshall(&writer, value); + qDebug() << "expect " << xml; + qDebug() << "writing" << buffer.data(); + QCOMPARE(buffer.data(), xml); + + // parse + QDomDocument doc; + QCOMPARE(doc.setContent(xml, true), true); + QDomElement element = doc.documentElement(); + QStringList errors; + QVariant test = QXmppRpcMarshaller::demarshall(element, errors); + if (!errors.isEmpty()) + qDebug() << errors; + QCOMPARE(errors, QStringList()); + QCOMPARE(test, value); +} + +void TestXmlRpc::testBase64() +{ + checkVariant(QByteArray("\0\1\2\3", 4), + QByteArray("<value><base64>AAECAw==</base64></value>")); +} + +void TestXmlRpc::testBool() +{ + checkVariant(false, + QByteArray("<value><boolean>0</boolean></value>")); + checkVariant(true, + QByteArray("<value><boolean>1</boolean></value>")); +} + +void TestXmlRpc::testDateTime() +{ + checkVariant(QDateTime(QDate(1998, 7, 17), QTime(14, 8, 55)), + QByteArray("<value><dateTime.iso8601>1998-07-17T14:08:55</dateTime.iso8601></value>")); +} + +void TestXmlRpc::testDouble() +{ + checkVariant(double(-12.214), + QByteArray("<value><double>-12.214</double></value>")); +} + +void TestXmlRpc::testInt() +{ + checkVariant(int(-12), + QByteArray("<value><i4>-12</i4></value>")); +} + +void TestXmlRpc::testNil() +{ + checkVariant(QVariant(), + QByteArray("<value><nil/></value>")); +} + +void TestXmlRpc::testString() +{ + checkVariant(QString("hello world"), + QByteArray("<value><string>hello world</string></value>")); +} + +void TestXmlRpc::testArray() +{ + checkVariant(QVariantList() << QString("hello world") << double(-12.214), + QByteArray("<value><array><data>" + "<value><string>hello world</string></value>" + "<value><double>-12.214</double></value>" + "</data></array></value>")); +} + +void TestXmlRpc::testStruct() +{ + QMap<QString, QVariant> map; + map["bar"] = QString("hello world"); + map["foo"] = double(-12.214); + checkVariant(map, + QByteArray("<value><struct>" + "<member>" + "<name>bar</name>" + "<value><string>hello world</string></value>" + "</member>" + "<member>" + "<name>foo</name>" + "<value><double>-12.214</double></value>" + "</member>" + "</struct></value>")); +} + +void TestXmlRpc::testInvoke() +{ + const QByteArray xml( + "<iq" + " id=\"rpc1\"" + " to=\"responder@company-a.com/jrpc-server\"" + " from=\"requester@company-b.com/jrpc-client\"" + " type=\"set\">" + "<query xmlns=\"jabber:iq:rpc\">" + "<methodCall>" + "<methodName>examples.getStateName</methodName>" + "<params>" + "<param>" + "<value><i4>6</i4></value>" + "</param>" + "</params>" + "</methodCall>" + "</query>" + "</iq>"); + + QXmppRpcInvokeIq iq; + parsePacket(iq, xml); + QCOMPARE(iq.method(), QLatin1String("examples.getStateName")); + QCOMPARE(iq.arguments(), QVariantList() << int(6)); + serializePacket(iq, xml); +} + +void TestXmlRpc::testResponse() +{ + const QByteArray xml( + "<iq" + " id=\"rpc1\"" + " to=\"requester@company-b.com/jrpc-client\"" + " from=\"responder@company-a.com/jrpc-server\"" + " type=\"result\">" + "<query xmlns=\"jabber:iq:rpc\">" + "<methodResponse>" + "<params>" + "<param>" + "<value><string>Colorado</string></value>" + "</param>" + "</params>" + "</methodResponse>" + "</query>" + "</iq>"); + + QXmppRpcResponseIq iq; + parsePacket(iq, xml); + QCOMPARE(iq.faultCode(), 0); + QCOMPARE(iq.faultString(), QString()); + QCOMPARE(iq.values(), QVariantList() << QString("Colorado")); + serializePacket(iq, xml); +} + +void TestXmlRpc::testResponseFault() +{ + const QByteArray xml( + "<iq" + " id=\"rpc1\"" + " to=\"requester@company-b.com/jrpc-client\"" + " from=\"responder@company-a.com/jrpc-server\"" + " type=\"result\">" + "<query xmlns=\"jabber:iq:rpc\">" + "<methodResponse>" + "<fault>" + "<value>" + "<struct>" + "<member>" + "<name>faultCode</name>" + "<value><i4>404</i4></value>" + "</member>" + "<member>" + "<name>faultString</name>" + "<value><string>Not found</string></value>" + "</member>" + "</struct>" + "</value>" + "</fault>" + "</methodResponse>" + "</query>" + "</iq>"); + + QXmppRpcResponseIq iq; + parsePacket(iq, xml); + QCOMPARE(iq.faultCode(), 404); + QCOMPARE(iq.faultString(), QLatin1String("Not found")); + QCOMPARE(iq.values(), QVariantList()); + serializePacket(iq, xml); +} + |
