diff options
Diffstat (limited to 'tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp')
-rw-r--r-- | tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 76 |
1 files changed, 52 insertions, 24 deletions
diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index 9b544e0db8..00c3a41d88 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -1,32 +1,27 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. +** Copyright (C) 2016 The Qt Company Ltd. ** Copyright (C) 2014 Governikus GmbH & Co. KG. -** Contact: http://www.qt.io/licensing/ +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** 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 The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/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 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company 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 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** @@ -102,7 +97,6 @@ class tst_QSslSocket : public QObject public: tst_QSslSocket(); - virtual ~tst_QSslSocket(); static void enterLoop(int secs) { @@ -230,13 +224,18 @@ private slots: void verifyClientCertificate_data(); void verifyClientCertificate(); void readBufferMaxSize(); - void setEmptyDefaultConfiguration(); // this test should be last #ifndef QT_NO_OPENSSL void simplePskConnect_data(); void simplePskConnect(); + void ephemeralServerKey_data(); + void ephemeralServerKey(); #endif + void setEmptyDefaultConfiguration(); // this test should be last + +protected slots: + static void exitLoop() { // Safe exit - if we aren't in an event loop, don't @@ -247,7 +246,6 @@ private slots: } } -protected slots: void ignoreErrorSlot() { socket->ignoreSslErrors(); @@ -297,10 +295,6 @@ tst_QSslSocket::tst_QSslSocket() #endif } -tst_QSslSocket::~tst_QSslSocket() -{ -} - enum ProxyTests { NoProxy = 0x00, Socks5Proxy = 0x01, @@ -3438,6 +3432,40 @@ void tst_QSslSocket::simplePskConnect() QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState); QCOMPARE(disconnectedSpy.count(), 1); } + +void tst_QSslSocket::ephemeralServerKey_data() +{ + QTest::addColumn<QString>("cipher"); + QTest::addColumn<bool>("emptyKey"); + + QTest::newRow("NonForwardSecrecyCipher") << "RC4-SHA" << true; + QTest::newRow("ForwardSecrecyCipher") << "ECDHE-RSA-AES256-SHA" << (QSslSocket::sslLibraryVersionNumber() < 0x10002000L); +} + +void tst_QSslSocket::ephemeralServerKey() +{ + QFETCH_GLOBAL(bool, setProxy); + if (!QSslSocket::supportsSsl() || setProxy) + return; + + QFETCH(QString, cipher); + QFETCH(bool, emptyKey); + SslServer server; + server.config.setCiphers(QList<QSslCipher>() << QSslCipher(cipher)); + QVERIFY(server.listen()); + QSslSocketPtr client = newSocket(); + socket = client.data(); + connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(ignoreErrorSlot())); + QSignalSpy spy(client.data(), &QSslSocket::encrypted); + + client->connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(), server.serverPort()); + spy.wait(); + + QCOMPARE(spy.count(), 1); + QVERIFY(server.config.ephemeralServerKey().isNull()); + QCOMPARE(client->sslConfiguration().ephemeralServerKey().isNull(), emptyKey); +} + #endif // QT_NO_OPENSSL #endif // QT_NO_SSL |