aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-07-21 10:59:55 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-07-21 10:59:55 +0200
commit0ee6b11759f22cc81f06933982debf52035f9095 (patch)
tree940a53893ba6509aebbacaa208d6e2f70e9db40e
parent8cd1fbffe24271bc4a03c4c525829365daf95a0f (diff)
downloadqxmpp-0ee6b11759f22cc81f06933982debf52035f9095.tar.gz
improve SASL test coverage
-rw-r--r--src/base/QXmppSasl.cpp21
-rw-r--r--src/base/QXmppSasl_p.h6
-rw-r--r--tests/sasl.cpp54
-rw-r--r--tests/sasl.h4
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