From bd6d9531fc0fdc0f7db22d6739f71b2eb995f202 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Mon, 11 Oct 2010 11:00:35 +0000 Subject: add unit tests for STUN encoding / decoding --- tests/tests.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) (limited to 'tests/tests.cpp') diff --git a/tests/tests.cpp b/tests/tests.cpp index 177d025e..b1d57255 100644 --- a/tests/tests.cpp +++ b/tests/tests.cpp @@ -40,6 +40,7 @@ #include "QXmppSaslAuth.h" #include "QXmppSessionIq.h" #include "QXmppStreamFeatures.h" +#include "QXmppStun.h" #include "QXmppUtils.h" #include "QXmppVCardIq.h" #include "QXmppVersionIq.h" @@ -912,6 +913,99 @@ void TestPubSub::testSubscriptions() serializePacket(iq, xml); } +void TestStun::testFingerprint() +{ + // without fingerprint + QXmppStunMessage msg; + msg.setType(0x0001); + QCOMPARE(msg.encode(QString(), 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(QString(), 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(QString("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(QString(), 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(QString(), 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(QString(), 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(QString(), 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)); +} + static void checkVariant(const QVariant &value, const QByteArray &xml) { // serialise @@ -1115,6 +1209,9 @@ int main(int argc, char *argv[]) TestPubSub testPubSub; errors += QTest::qExec(&testPubSub); + TestStun testStun; + errors += QTest::qExec(&testStun); + TestXmlRpc testXmlRpc; errors += QTest::qExec(&testXmlRpc); -- cgit v1.2.3