aboutsummaryrefslogtreecommitdiff
path: root/tests/stun.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/stun.cpp
parent32183be3ef5fcbdca5b7f222e949898d5841a1a3 (diff)
downloadqxmpp-0a584900db720454f06d136e6bdf445a8f87e8b7.tar.gz
split out RPC and STUN tests
Diffstat (limited to 'tests/stun.cpp')
-rw-r--r--tests/stun.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/tests/stun.cpp b/tests/stun.cpp
new file mode 100644
index 00000000..7238f05f
--- /dev/null
+++ b/tests/stun.cpp
@@ -0,0 +1,120 @@
+/*
+ * 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 "QXmppStun.h"
+
+#include "stun.h"
+#include "tests.h"
+
+void TestStun::testFingerprint()
+{
+ // without fingerprint
+ QXmppStunMessage msg;
+ msg.setType(0x0001);
+ QCOMPARE(msg.encode(QByteArray(), false),
+ QByteArray("\x00\x01\x00\x00\x21\x12\xA4\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 20));
+
+ // with fingerprint
+ QCOMPARE(msg.encode(QByteArray(), true),
+ QByteArray("\x00\x01\x00\x08\x21\x12\xA4\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x28\x00\x04\xB2\xAA\xF9\xF6", 28));
+}
+
+void TestStun::testIntegrity()
+{
+ QXmppStunMessage msg;
+ msg.setType(0x0001);
+ QCOMPARE(msg.encode(QByteArray("somesecret"), false),
+ QByteArray("\x00\x01\x00\x18\x21\x12\xA4\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x14\x96\x4B\x40\xD1\x84\x67\x6A\xFD\xB5\xE0\x7C\xC5\x1F\xFB\xBD\xA2\x61\xAF\xB1\x26", 44));
+}
+
+void TestStun::testIPv4Address()
+{
+ // encode
+ QXmppStunMessage msg;
+ msg.setType(0x0001);
+ msg.mappedHost = QHostAddress("127.0.0.1");
+ msg.mappedPort = 12345;
+ QByteArray packet = msg.encode(QByteArray(), false);
+ QCOMPARE(packet,
+ QByteArray("\x00\x01\x00\x0C\x21\x12\xA4\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x01\x30\x39\x7F\x00\x00\x01", 32));
+
+ // decode
+ QXmppStunMessage msg2;
+ msg2.decode(packet);
+ QCOMPARE(msg2.mappedHost, QHostAddress("127.0.0.1"));
+ QCOMPARE(msg2.mappedPort, quint16(12345));
+}
+
+void TestStun::testIPv6Address()
+{
+ // encode
+ QXmppStunMessage msg;
+ msg.setType(0x0001);
+ msg.mappedHost = QHostAddress("::1");
+ msg.mappedPort = 12345;
+ const QByteArray packet = msg.encode(QByteArray(), false);
+ QCOMPARE(packet,
+ QByteArray("\x00\x01\x00\x18\x21\x12\xA4\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x14\x00\x02\x30\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 44));
+
+ // decode
+ QXmppStunMessage msg2;
+ msg2.decode(packet);
+ QCOMPARE(msg2.mappedHost, QHostAddress("::1"));
+ QCOMPARE(msg2.mappedPort, quint16(12345));
+}
+
+void TestStun::testXorIPv4Address()
+{
+ // encode
+ QXmppStunMessage msg;
+ msg.setType(0x0001);
+ msg.xorMappedHost = QHostAddress("127.0.0.1");
+ msg.xorMappedPort = 12345;
+ QByteArray packet = msg.encode(QByteArray(), false);
+ QCOMPARE(packet,
+ QByteArray("\x00\x01\x00\x0C\x21\x12\xA4\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x08\x00\x01\x11\x2B\x5E\x12\xA4\x43", 32));
+
+ // decode
+ QXmppStunMessage msg2;
+ msg2.decode(packet);
+ QCOMPARE(msg2.xorMappedHost, QHostAddress("127.0.0.1"));
+ QCOMPARE(msg2.xorMappedPort, quint16(12345));
+}
+
+void TestStun::testXorIPv6Address()
+{
+ // encode
+ QXmppStunMessage msg;
+ msg.setType(0x0001);
+ msg.xorMappedHost = QHostAddress("::1");
+ msg.xorMappedPort = 12345;
+ const QByteArray packet = msg.encode(QByteArray(), false);
+ QCOMPARE(packet,
+ QByteArray("\x00\x01\x00\x18\x21\x12\xA4\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x14\x00\x02\x11\x2B\x21\x12\xA4\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 44));
+
+ // decode
+ QXmppStunMessage msg2;
+ msg2.decode(packet);
+ QCOMPARE(msg2.xorMappedHost, QHostAddress("::1"));
+ QCOMPARE(msg2.xorMappedPort, quint16(12345));
+}