summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2014-08-23 12:46:05 +0200
committerOliver Wolff <oliver.wolff@digia.com>2014-08-24 06:01:05 +0200
commit4040bc21ab09408cb6f188c4c747fb55499d9f5c (patch)
tree756a57c1a0f7590082d55e9d76467991bf375bbc /tests/auto
parent2d0072b0b3992b82385c72c2dad7e754d35e0bf7 (diff)
Added QAsn1Element
This element can be used for backends that do not offer all the information that is needed when implementing a ssl certificate backend. WinRT and the SecureTransport lack functionality in this area for example. The sources and tests are added for ssl and openssl configurations in order to be tested. The condition for adding these can be changed as soon as they are used by an actual implementation Change-Id: I2b836133105afdc178bf3b1ee7d732bea069effa Reviewed-by: Andrew Knight <andrew.knight@digia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/network/ssl/qasn1element/qasn1element.pro7
-rw-r--r--tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp209
-rw-r--r--tests/auto/network/ssl/ssl.pro5
3 files changed, 221 insertions, 0 deletions
diff --git a/tests/auto/network/ssl/qasn1element/qasn1element.pro b/tests/auto/network/ssl/qasn1element/qasn1element.pro
new file mode 100644
index 0000000000..524c772443
--- /dev/null
+++ b/tests/auto/network/ssl/qasn1element/qasn1element.pro
@@ -0,0 +1,7 @@
+CONFIG += testcase
+CONFIG += parallel_test
+
+SOURCES += tst_qasn1element.cpp
+QT = core network network-private testlib
+
+TARGET = tst_qasn1element
diff --git a/tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp b/tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp
new file mode 100644
index 0000000000..661d13bc69
--- /dev/null
+++ b/tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp
@@ -0,0 +1,209 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Jeremy Lainé <jeremy.laine@m4x.org>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include "private/qasn1element_p.h"
+
+class tst_QAsn1Element : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void emptyConstructor();
+ void dateTime_data();
+ void dateTime();
+ void integer_data();
+ void integer();
+ void invalid_data();
+ void invalid();
+ void octetString_data();
+ void octetString();
+ void objectIdentifier_data();
+ void objectIdentifier();
+};
+
+void tst_QAsn1Element::emptyConstructor()
+{
+ QAsn1Element elem;
+ QCOMPARE(elem.type(), quint8(0));
+ QCOMPARE(elem.value(), QByteArray());
+}
+
+void tst_QAsn1Element::dateTime_data()
+{
+ QTest::addColumn<QByteArray>("encoded");
+ QTest::addColumn<QDateTime>("value");
+
+ QTest::newRow("bad type")
+ << QByteArray::fromHex("020100")
+ << QDateTime();
+ QTest::newRow("UTCTime - 070417074026Z")
+ << QByteArray::fromHex("170d3037303431373037343032365a")
+ << QDateTime(QDate(2007, 4, 17), QTime(7, 40, 26), Qt::UTC);
+ QTest::newRow("UTCTime - bad length")
+ << QByteArray::fromHex("170c30373034313730373430325a")
+ << QDateTime();
+ QTest::newRow("UTCTime - no trailing Z")
+ << QByteArray::fromHex("170d30373034313730373430323659")
+ << QDateTime();
+ QTest::newRow("GeneralizedTime - 20510829095341Z")
+ << QByteArray::fromHex("180f32303531303832393039353334315a")
+ << QDateTime(QDate(2051, 8, 29), QTime(9, 53, 41), Qt::UTC);
+ QTest::newRow("GeneralizedTime - bad length")
+ << QByteArray::fromHex("180e323035313038323930393533345a")
+ << QDateTime();
+ QTest::newRow("GeneralizedTime - no trailing Z")
+ << QByteArray::fromHex("180f323035313038323930393533343159")
+ << QDateTime();
+}
+
+void tst_QAsn1Element::dateTime()
+{
+ QFETCH(QByteArray, encoded);
+ QFETCH(QDateTime, value);
+
+ QAsn1Element elem;
+ QVERIFY(elem.read(encoded));
+ QCOMPARE(elem.toDateTime(), value);
+}
+
+void tst_QAsn1Element::integer_data()
+{
+ QTest::addColumn<QByteArray>("encoded");
+ QTest::addColumn<int>("value");
+
+ QTest::newRow("0") << QByteArray::fromHex("020100") << 0;
+ QTest::newRow("127") << QByteArray::fromHex("02017F") << 127;
+ QTest::newRow("128") << QByteArray::fromHex("02020080") << 128;
+ QTest::newRow("256") << QByteArray::fromHex("02020100") << 256;
+}
+
+void tst_QAsn1Element::integer()
+{
+ QFETCH(QByteArray, encoded);
+ QFETCH(int, value);
+
+ // write
+ QByteArray buffer;
+ QDataStream stream(&buffer, QIODevice::WriteOnly);
+ QAsn1Element::fromInteger(value).write(stream);
+ QCOMPARE(buffer, encoded);
+}
+
+void tst_QAsn1Element::invalid_data()
+{
+ QTest::addColumn<QByteArray>("encoded");
+
+ QTest::newRow("empty") << QByteArray();
+ QTest::newRow("bad type") << QByteArray::fromHex("000100");
+ QTest::newRow("truncated value") << QByteArray::fromHex("0401");
+}
+
+void tst_QAsn1Element::invalid()
+{
+ QFETCH(QByteArray, encoded);
+
+ QAsn1Element elem;
+ QVERIFY(!elem.read(encoded));
+}
+
+void tst_QAsn1Element::octetString_data()
+{
+ QTest::addColumn<QByteArray>("encoded");
+ QTest::addColumn<QByteArray>("value");
+
+ QTest::newRow("0 byte") << QByteArray::fromHex("0400") << QByteArray();
+ QTest::newRow("1 byte") << QByteArray::fromHex("040100") << QByteArray(1, '\0');
+ QTest::newRow("127 bytes") << QByteArray::fromHex("047f") + QByteArray(127, '\0') << QByteArray(127, '\0');
+ QTest::newRow("128 bytes") << QByteArray::fromHex("048180") + QByteArray(128, '\0') << QByteArray(128, '\0');
+}
+
+void tst_QAsn1Element::octetString()
+{
+ QFETCH(QByteArray, encoded);
+ QFETCH(QByteArray, value);
+
+ // read
+ QAsn1Element elem;
+ QVERIFY(elem.read(encoded));
+ QCOMPARE(elem.type(), quint8(QAsn1Element::OctetStringType));
+ QCOMPARE(elem.value(), value);
+
+ // write
+ QByteArray buffer;
+ QDataStream stream(&buffer, QIODevice::WriteOnly);
+ elem.write(stream);
+ QCOMPARE(buffer, encoded);
+}
+
+void tst_QAsn1Element::objectIdentifier_data()
+{
+ QTest::addColumn<QByteArray>("encoded");
+ QTest::addColumn<QByteArray>("oid");
+ QTest::addColumn<QByteArray>("name");
+
+ QTest::newRow("1.2.3.4")
+ << QByteArray::fromHex("06032a0304")
+ << QByteArray("1.2.3.4")
+ << QByteArray("1.2.3.4");
+ QTest::newRow("favouriteDrink")
+ << QByteArray::fromHex("060a0992268993f22c640105")
+ << QByteArray("0.9.2342.19200300.100.1.5")
+ << QByteArray("favouriteDrink");
+}
+
+void tst_QAsn1Element::objectIdentifier()
+{
+ QFETCH(QByteArray, encoded);
+ QFETCH(QByteArray, oid);
+ QFETCH(QByteArray, name);
+
+ QAsn1Element elem;
+ QVERIFY(elem.read(encoded));
+ QCOMPARE(elem.type(), quint8(QAsn1Element::ObjectIdentifierType));
+ QCOMPARE(elem.toObjectId(), oid);
+ QCOMPARE(QAsn1Element::fromObjectId(oid).toObjectId(), oid);
+ QCOMPARE(elem.toObjectName(), name);
+}
+
+QTEST_MAIN(tst_QAsn1Element)
+#include "tst_qasn1element.moc"
diff --git a/tests/auto/network/ssl/ssl.pro b/tests/auto/network/ssl/ssl.pro
index 0b8f269fac..0cf910df73 100644
--- a/tests/auto/network/ssl/ssl.pro
+++ b/tests/auto/network/ssl/ssl.pro
@@ -16,3 +16,8 @@ contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked):
winrt: SUBDIRS -= \
qsslsocket_onDemandCertificates_member \
qsslsocket_onDemandCertificates_static \
+
+contains(QT_CONFIG, ssl) | contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked):
+ contains(QT_CONFIG, private_tests) {
+ SUBDIRS += qasn1element
+}