diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-07-21 10:59:55 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-07-21 10:59:55 +0200 |
| commit | 0ee6b11759f22cc81f06933982debf52035f9095 (patch) | |
| tree | 940a53893ba6509aebbacaa208d6e2f70e9db40e | |
| parent | 8cd1fbffe24271bc4a03c4c525829365daf95a0f (diff) | |
| download | qxmpp-0ee6b11759f22cc81f06933982debf52035f9095.tar.gz | |
improve SASL test coverage
| -rw-r--r-- | src/base/QXmppSasl.cpp | 21 | ||||
| -rw-r--r-- | src/base/QXmppSasl_p.h | 6 | ||||
| -rw-r--r-- | tests/sasl.cpp | 54 | ||||
| -rw-r--r-- | tests/sasl.h | 4 |
4 files changed, 78 insertions, 7 deletions
diff --git a/src/base/QXmppSasl.cpp b/src/base/QXmppSasl.cpp index 98e9caf7..9373c3d8 100644 --- a/src/base/QXmppSasl.cpp +++ b/src/base/QXmppSasl.cpp @@ -62,8 +62,8 @@ static QByteArray generateNonce() } QXmppSaslAuth::QXmppSaslAuth(const QString &mechanism, const QByteArray &value) - : QXmppSaslStanza("auth", value) - , m_mechanism(mechanism) + : m_mechanism(mechanism) + , m_value(value) { } @@ -77,10 +77,20 @@ void QXmppSaslAuth::setMechanism(const QString &mechanism) m_mechanism = mechanism; } +QByteArray QXmppSaslAuth::value() const +{ + return m_value; +} + +void QXmppSaslAuth::setValue(const QByteArray &value) +{ + m_value = value; +} + void QXmppSaslAuth::parse(const QDomElement &element) { m_mechanism = element.attribute("mechanism"); - setValue(QByteArray::fromBase64(element.text().toAscii())); + m_value = QByteArray::fromBase64(element.text().toAscii()); } void QXmppSaslAuth::toXml(QXmlStreamWriter *writer) const @@ -88,8 +98,8 @@ void QXmppSaslAuth::toXml(QXmlStreamWriter *writer) const writer->writeStartElement("auth"); writer->writeAttribute("xmlns", ns_xmpp_sasl); writer->writeAttribute("mechanism", m_mechanism); - if (!value().isEmpty()) - writer->writeCharacters(value().toBase64()); + if (!m_value.isEmpty()) + writer->writeCharacters(m_value.toBase64()); writer->writeEndElement(); } @@ -163,7 +173,6 @@ void QXmppSaslStanza::setValue(const QByteArray &value) m_value = value; } - void QXmppSaslStanza::parse(const QDomElement &element) { m_type = element.nodeName(); diff --git a/src/base/QXmppSasl_p.h b/src/base/QXmppSasl_p.h index be72152f..f6eeaf71 100644 --- a/src/base/QXmppSasl_p.h +++ b/src/base/QXmppSasl_p.h @@ -141,7 +141,7 @@ private: QByteArray m_value; }; -class QXmppSaslAuth : public QXmppSaslStanza +class QXmppSaslAuth : public QXmppStanza { public: QXmppSaslAuth(const QString &mechanism = QString(), const QByteArray &value = QByteArray()); @@ -149,6 +149,9 @@ public: QString mechanism() const; void setMechanism(const QString &mechanism); + QByteArray value() const; + void setValue(const QByteArray &value); + /// \cond void parse(const QDomElement &element); void toXml(QXmlStreamWriter *writer) const; @@ -156,6 +159,7 @@ public: private: QString m_mechanism; + QByteArray m_value; }; class QXmppSaslChallenge : public QXmppSaslStanza diff --git a/tests/sasl.cpp b/tests/sasl.cpp index a5399294..46f5f22b 100644 --- a/tests/sasl.cpp +++ b/tests/sasl.cpp @@ -45,6 +45,60 @@ void tst_QXmppSasl::testParsing() QCOMPARE(QXmppSaslDigestMd5::serializeMessage(map), bytes); } +void tst_QXmppSasl::testAuth_data() +{ + QTest::addColumn<QByteArray>("xml"); + QTest::addColumn<QString>("mechanism"); + QTest::addColumn<QByteArray>("value"); + + QTest::newRow("plain") + << QByteArray("<auth xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\" mechanism=\"PLAIN\">AGZvbwBiYXI=</auth>") + << "PLAIN" << QByteArray("\0foo\0bar", 8); + + QTest::newRow("digest-md5") + << QByteArray("<auth xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\" mechanism=\"DIGEST-MD5\"/>") + << "DIGEST-MD5" << QByteArray(); +} + +void tst_QXmppSasl::testAuth() +{ + QFETCH(QByteArray, xml); + QFETCH(QString, mechanism); + QFETCH(QByteArray, value); + + // no condition + QXmppSaslAuth auth; + parsePacket(auth, xml); + QCOMPARE(auth.mechanism(), mechanism); + QCOMPARE(auth.value(), value); + serializePacket(auth, xml); +} + +void tst_QXmppSasl::testFailure() +{ + // no condition + const QByteArray xml = "<failure xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"/>"; + QXmppSaslFailure failure; + parsePacket(failure, xml); + QCOMPARE(failure.condition(), QString()); + serializePacket(failure, xml); + + // not authorized + const QByteArray xml2 = "<failure xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"><not-authorized/></failure>"; + QXmppSaslFailure failure2; + parsePacket(failure2, xml2); + QCOMPARE(failure2.condition(), QLatin1String("not-authorized")); + serializePacket(failure2, xml2); +} + +void tst_QXmppSasl::testSuccess() +{ + const QByteArray xml = "<success xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"/>"; + QXmppSaslSuccess stanza; + parsePacket(stanza, xml); + serializePacket(stanza, xml); +} + void tst_QXmppSaslClient::testAvailableMechanisms() { QCOMPARE(QXmppSaslClient::availableMechanisms(), QStringList() << "PLAIN" << "DIGEST-MD5" << "ANONYMOUS" << "X-FACEBOOK-PLATFORM"); diff --git a/tests/sasl.h b/tests/sasl.h index 0d2db34e..5271fbbb 100644 --- a/tests/sasl.h +++ b/tests/sasl.h @@ -29,6 +29,10 @@ class tst_QXmppSasl : public QObject private slots: void testParsing(); + void testAuth_data(); + void testAuth(); + void testFailure(); + void testSuccess(); }; class tst_QXmppSaslClient : public QObject |
