aboutsummaryrefslogtreecommitdiff
path: root/tests/rpc.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-07-21 22:16:24 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-07-21 22:16:24 +0200
commit0a584900db720454f06d136e6bdf445a8f87e8b7 (patch)
treec4b98aad62def1d9063abf9269c718a13d4b32b8 /tests/rpc.cpp
parent32183be3ef5fcbdca5b7f222e949898d5841a1a3 (diff)
downloadqxmpp-0a584900db720454f06d136e6bdf445a8f87e8b7.tar.gz
split out RPC and STUN tests
Diffstat (limited to 'tests/rpc.cpp')
-rw-r--r--tests/rpc.cpp212
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);
+}
+