From 4bd384ec7fe824e0694ca8742f59f4c522662314 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Tue, 24 Nov 2020 12:43:41 +0100 Subject: tst_QSslError: improve the code coverage, as pointed at by LCOV MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit And also, reduce the utter sloppiness, weirdness of the test and make it more a test and not a joke. Since the test itself depends on !QT_NO_SSL, why bother building and running its main, to create a useless tst_QSslError and do nothing then? Exclude test from no-ssl build. Change-Id: I67879b0de036cbc8c2f75a18f4cf94e6c43c5af0 Reviewed-by: MÃ¥rten Nordheim (cherry picked from commit fe009bd51438877d864d2444f40582508c43c1f3) --- tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp | 128 +++++++++++++++------ tests/auto/network/ssl/ssl.pro | 7 +- 2 files changed, 98 insertions(+), 37 deletions(-) diff --git a/tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp b/tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp index 438234b6dd..06f0325248 100644 --- a/tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp +++ b/tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp @@ -28,51 +28,113 @@ #include + +#include + +#include #include -#include -#include +#include +#include +#include +#include + +QT_USE_NAMESPACE + +const QByteArray certificateBytes = + "-----BEGIN CERTIFICATE-----\n" + "MIIEjjCCBDOgAwIBAgIQCQsKtxCf9ik3vIVQ+PMa5TAKBggqhkjOPQQDAjBKMQsw\n" + "CQYDVQQGEwJVUzEZMBcGA1UEChMQQ2xvdWRmbGFyZSwgSW5jLjEgMB4GA1UEAxMX\n" + "Q2xvdWRmbGFyZSBJbmMgRUNDIENBLTMwHhcNMjAwODE2MDAwMDAwWhcNMjEwODE2\n" + "MTIwMDAwWjBhMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNh\n" + "biBGcmFuY2lzY28xGTAXBgNVBAoTEENsb3VkZmxhcmUsIEluYy4xEjAQBgNVBAMT\n" + "CXd3dy5xdC5pbzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABP/r0xH22wdU8fLk\n" + "RsXhxRj5fmUNUo7rxnUl3lyqYYp53cLvn3agQifXkegpE8Xv4pGmuyWZj85FtoeZ\n" + "UZh8iyCjggLiMIIC3jAfBgNVHSMEGDAWgBSlzjfq67B1DpRniLRF+tkkEIeWHzAd\n" + "BgNVHQ4EFgQU7qPYGi9VtC4/6MS+54LNEAXApBgwFAYDVR0RBA0wC4IJd3d3LnF0\n" + "LmlvMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH\n" + "AwIwewYDVR0fBHQwcjA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Ns\n" + "b3VkZmxhcmVJbmNFQ0NDQS0zLmNybDA3oDWgM4YxaHR0cDovL2NybDQuZGlnaWNl\n" + "cnQuY29tL0Nsb3VkZmxhcmVJbmNFQ0NDQS0zLmNybDBMBgNVHSAERTBDMDcGCWCG\n" + "SAGG/WwBATAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20v\n" + "Q1BTMAgGBmeBDAECAjB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGGGGh0dHA6\n" + "Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBABggrBgEFBQcwAoY0aHR0cDovL2NhY2VydHMu\n" + "ZGlnaWNlcnQuY29tL0Nsb3VkZmxhcmVJbmNFQ0NDQS0zLmNydDAMBgNVHRMBAf8E\n" + "AjAAMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYA9lyUL9F3MCIUVBgIMJRWjuNN\n" + "Exkzv98MLyALzE7xZOMAAAFz90PlSQAABAMARzBFAiAhrrtxdmuxpCy8HAJJ5Qkg\n" + "WNvlo8nZqfe6pqGUcz0dmwIhAOMqDtd5ZhcfRk96GAJxPm8bH4hDnmqDP/zJG2Mq\n" + "nFpMAHYAXNxDkv7mq0VEsV6a1FbmEDf71fpH3KFzlLJe5vbHDsoAAAFz90PlewAA\n" + "BAMARzBFAiB/EkdY10LDdaRcf6eSc/QxucxU+2PI+3pWjh/21A8ZUAIhAK2Qz9Kw\n" + "onlRNyHpV3E6qyVydkXihj3c3q5UclpURYcmMAoGCCqGSM49BAMCA0kAMEYCIQDz\n" + "K/lzLb2Rbeg1HErRLLm2HkJUmfOGU2+tbROSTGK8ugIhAKA+MKqaZ8VjPxQ+Ho4v\n" + "fuwccvZfkU/fg8tAHTOzX23v\n" + "-----END CERTIFICATE-----"; class tst_QSslError : public QObject { Q_OBJECT - -public: - static void enterLoop(int secs) - { - ++loopLevel; - QTestEventLoop::instance().enterLoop(secs); - --loopLevel; - } - static void exitLoop() - { - // Safe exit - if we aren't in an event loop, don't - // exit one. - if (loopLevel > 0) - QTestEventLoop::instance().exitLoop(); - } - static bool timeout() - { - return QTestEventLoop::instance().timeout(); - } - -#ifndef QT_NO_SSL private slots: void constructing(); + void nonDefaultConstructors(); void hash(); -#endif - -private: - static int loopLevel; }; -int tst_QSslError::loopLevel = 0; - -#ifndef QT_NO_SSL - void tst_QSslError::constructing() { - QSslError error; + const QSslError error; + QCOMPARE(error.error(), QSslError::NoError); + QCOMPARE(error.errorString(), QStringLiteral("No error")); + QVERIFY(error.certificate().isNull()); +} + +void tst_QSslError::nonDefaultConstructors() +{ + if (!QSslSocket::supportsSsl()) + QSKIP("This test requires a working TLS library"); + + const auto chain = QSslCertificate::fromData(certificateBytes); + QCOMPARE(chain.size(), 1); + const auto certificate = chain.at(0); + QVERIFY(!certificate.isNull()); + + const auto visitor = QSslError::staticMetaObject; + const int nEnums = visitor.enumeratorCount(); + QMetaEnum errorCodesEnum; + for (int i = 0; i < nEnums; ++i) { + const auto metaEnum = visitor.enumerator(i); + if (metaEnum.enumName() == QStringLiteral("SslError")) { + errorCodesEnum = metaEnum; + break; + } + } + + QCOMPARE(errorCodesEnum.enumName(), QStringLiteral("SslError")); + for (int i = 0, e = errorCodesEnum.keyCount(); i < e; ++i) { + const int value = errorCodesEnum.value(i); + if (value == -1) { + QVERIFY(i); + break; + } + const auto errorCode = QSslError::SslError(value); + QSslError error(errorCode); + + const auto basicChecks = [](const QSslError &err, QSslError::SslError code) { + QCOMPARE(err.error(), code); + const auto errorString = err.errorString(); + if (code == QSslError::NoError) + QCOMPARE(errorString, QStringLiteral("No error")); + else + QVERIFY(errorString != QStringLiteral("No error")); + }; + + basicChecks(error, errorCode); + + // ;) + error = QSslError(errorCode, certificate); + + basicChecks(error, errorCode); + QVERIFY(!error.certificate().isNull()); + } } void tst_QSslError::hash() @@ -83,7 +145,5 @@ void tst_QSslError::hash() QCOMPARE(errors.size(), 1); } -#endif // QT_NO_SSL - QTEST_MAIN(tst_QSslError) #include "tst_qsslerror.moc" diff --git a/tests/auto/network/ssl/ssl.pro b/tests/auto/network/ssl/ssl.pro index 169e9bce83..c9a4474c4c 100644 --- a/tests/auto/network/ssl/ssl.pro +++ b/tests/auto/network/ssl/ssl.pro @@ -5,11 +5,12 @@ SUBDIRS=\ qpassworddigestor \ qsslcertificate \ qsslcipher \ - qsslellipticcurve \ - qsslerror \ - qsslkey \ + qsslellipticcurve qtConfig(ssl) { + SUBDIRS += qsslkey \ + qsslerror + qtConfig(private_tests) { SUBDIRS += \ qsslsocket \ -- cgit v1.2.3