From 0775dbf113f14988d0bf252b2353dfefc0f4d84a Mon Sep 17 00:00:00 2001 From: Christian Hohnstaedt Date: Sun, 14 Jan 2024 21:46:59 +0100 Subject: [PATCH] Move GUI tests to test/ subdir --- CMakeLists.txt | 14 +-- lib/test_main.cpp | 286 -------------------------------------------- test/CMakeLists.txt | 19 +++ test/PwDialogMock.h | 58 +++++++++ test/importPEM.cpp | 52 ++++++++ test/main.cpp | 51 ++++++++ test/main.h | 29 +++++ test/newKey.cpp | 92 ++++++++++++++ test/pem.cpp | 88 ++++++++++++++ 9 files changed, 392 insertions(+), 297 deletions(-) delete mode 100644 lib/test_main.cpp create mode 100644 test/CMakeLists.txt create mode 100644 test/PwDialogMock.h create mode 100644 test/importPEM.cpp create mode 100644 test/main.cpp create mode 100644 test/main.h create mode 100644 test/newKey.cpp create mode 100644 test/pem.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3eb98e2d..c7753763 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,13 +74,6 @@ add_library(xcalib STATIC) add_executable(${CMAKE_PROJECT_NAME} img/imgres.qrc lib/main.cpp ${UI_FILES} ${PROJECT_BINARY_DIR}/local.h) add_executable(xcadoc ${PROJECT_BINARY_DIR}/local.h) -add_executable(testxca EXCLUDE_FROM_ALL - img/imgres.qrc ${PROJECT_SOURCE_DIR}/lib/test_main.cpp - ${UI_FILES} ${PROJECT_BINARY_DIR}/local.h) -add_custom_target(tests) -add_test(NAME testxca COMMAND testxca) -set_tests_properties(testxca PROPERTIES LABELS gui) -add_dependencies(tests testxca) include_directories(${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}) @@ -126,7 +119,6 @@ target_link_libraries(xcadoc OpenSSL::Crypto ${QT}::Core ${ASAN_LIB} ) target_link_libraries(${CMAKE_PROJECT_NAME} ${ASAN_LIB} xcalib) -target_link_libraries(testxca ${ASAN_LIB} ${QT}::Test xcalib) if (APPLE) @@ -135,9 +127,6 @@ if (APPLE) target_link_libraries(${CMAKE_PROJECT_NAME} ${IOKIT_LIBRARY} ${COREFOUNDATION_LIBRARY} ) - target_link_libraries(testxca - ${IOKIT_LIBRARY} ${COREFOUNDATION_LIBRARY} - ) set(CMAKE_MACOSX_BUNDLE ON) # Avoid bin/ sub-directory in DMG @@ -168,6 +157,8 @@ macro(WixFile filename content) "\n\n") endmacro() +add_custom_target(tests) + ##### Sub directories add_subdirectory(lib) @@ -177,6 +168,7 @@ include(lang/CMakeLists.txt) include(misc/CMakeLists.txt) include(doc/CMakeLists.txt) include(img/CMakeLists.txt) +include(test/CMakeLists.txt) install(TARGETS ${CMAKE_PROJECT_NAME} RESOURCE DESTINATION Resources diff --git a/lib/test_main.cpp b/lib/test_main.cpp deleted file mode 100644 index b69dd9ce..00000000 --- a/lib/test_main.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/* vi: set sw=4 ts=4: - * - * Copyright (C) 2023 Christian Hohnstaedt. - * - * All rights reserved. - */ - -#include -#include -#include -#include -#include -#include - -#include "widgets/MainWindow.h" -#include "ui_MainWindow.h" -#include "widgets/ImportMulti.h" -#include "ui_ImportMulti.h" -#include "widgets/NewKey.h" -#include "ui_NewKey.h" -#include "entropy.h" -#include "pki_evp.h" -#include "pki_multi.h" -#include "debug_info.h" -#include "PwDialogCore.h" - -char segv_data[1024]; - -class test_main: public QObject -{ - Q_OBJECT - Entropy *entropy {}; - - void openDB(); - - private slots: - void initTestCase(); - void cleanupTestCase(); - void newKey(); - void importPEM(); -}; - -void test_main::initTestCase() -{ - debug_info::init(); - - entropy = new Entropy; - - Settings.clear(); - initOIDs(); - - mainwin = new MainWindow(); - mainwin->show(); -} - -void test_main::cleanupTestCase() -{ - Database.close(); - delete entropy; - delete mainwin; - pki_export::free_elements(); -} - -void test_main::openDB() -{ - pki_evp::passwd = "pass"; - QString salt = Entropy::makeSalt(); - pki_evp::passHash = pki_evp::sha512passwT(pki_evp::passwd, salt); - Settings["pwhash"] = pki_evp::passHash; - Database.open("testdb.xdb"); -} - -void test_main::newKey() -{ - /* RSA 3012 bit key - Remember as default */ - NewKey *dlg = new NewKey(mainwin, "Alfons"); - dlg->show(); - Q_ASSERT(QTest::qWaitForWindowActive(dlg)); - dlg->keyLength->setEditText("3012 bit"); - QCOMPARE(dlg->rememberDefault->isChecked(), false); - dlg->rememberDefault->setChecked(true); - dlg->accept(); - keyjob job = dlg->getKeyJob(); - QCOMPARE(job.ktype.name, "RSA"); - QCOMPARE(job.size, 3012); - delete dlg; - - /* Remembered RSA:3012 key. Change to EC:secp521r1 */ - dlg = new NewKey(mainwin, "Erwin"); - dlg->show(); - Q_ASSERT(QTest::qWaitForWindowActive(dlg)); - QCOMPARE(dlg->rememberDefault->isChecked(), false); - QCOMPARE(job.toString(), dlg->getKeyJob().toString()); -#ifndef OPENSSL_NO_EC - /* Curve box visible after selecting EC Key */ - QCOMPARE(dlg->curveBox->isVisible(),false); - QCOMPARE(dlg->curveLabel->isVisible(),false); - dlg->keyType->setCurrentIndex(2); - QCOMPARE(dlg->curveBox->isVisible(),true); - QCOMPARE(dlg->curveLabel->isVisible(),true); - dlg->curveBox->setCurrentIndex(2); - QCOMPARE(dlg->getKeyJob().toString(), "EC:secp521r1"); -#ifdef EVP_PKEY_ED25519 - /* Select Edwards Curve */ - dlg->keyType->setCurrentIndex(3); - QCOMPARE(dlg->getKeyJob().toString(), "ED25519"); - /* Neither key size nor curve is visible */ - QCOMPARE(dlg->curveBox->isVisible(),false); - QCOMPARE(dlg->curveLabel->isVisible(),false); - QCOMPARE(dlg->keyLength->isVisible(),false); - QCOMPARE(dlg->keySizeLabel->isVisible(),false); -#endif - /* Back to EC and previously set curve is set */ - dlg->keyType->setCurrentIndex(2); - QCOMPARE(dlg->getKeyJob().toString(), "EC:secp521r1"); -#endif - dlg->accept(); - delete dlg; - - /* Open dialog again and RSA:3012 is remembered */ - dlg = new NewKey(mainwin, "Otto"); - dlg->show(); - Q_ASSERT(QTest::qWaitForWindowActive(dlg)); - QCOMPARE(dlg->rememberDefault->isChecked(), false); - QCOMPARE(job.toString(), dlg->getKeyJob().toString()); - QCOMPARE(dlg->curveBox->isVisible(),false); - QCOMPARE(dlg->curveLabel->isVisible(),false); -#ifndef OPENSSL_NO_EC - /* Select EC and remember as default */ - dlg->keyType->setCurrentIndex(2); - dlg->curveBox->setCurrentIndex(2); - - QCOMPARE(dlg->curveBox->isVisible(),true); - QCOMPARE(dlg->curveLabel->isVisible(),true); - QCOMPARE(dlg->getKeyJob().toString(), "EC:secp521r1"); - dlg->rememberDefault->setChecked(true); - dlg->accept(); - delete dlg; - - /* Now "EC:secp521r1" is remembered as default */ - dlg = new NewKey(mainwin, "Heini"); - dlg->show(); - Q_ASSERT(QTest::qWaitForWindowActive(dlg)); - QCOMPARE(dlg->getKeyJob().toString(), "EC:secp521r1"); - QCOMPARE(dlg->rememberDefault->isChecked(), false); -#endif - dlg->accept(); - delete dlg; -} -const QString pemcert(R"PEM( ------BEGIN CERTIFICATE----- -MIIDGzCCAgOgAwIBAgIIOvC5r9Smk3wwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UE -AxMHUm9vdCBDQTAeFw0yMzEwMjUxODU1MDBaFw0zMzA5MTgxNjQxMDBaMBUxEzAR -BgNVBAMTCkludGVyIENBIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQDJlExG3+oLO6GFuD4pa9sI5mJL/9fADcoe9bv1SAnRKu/GPtCMaruVTKBAt5x4 -mwt5My6WhyPdpYp0z6yUgSCrbkSAMvMzGlS1W5Ke4UU4GaufCRjHeXNVpx9wXEPY -y46HO5vSZZiGzl46UMmeVkV5kGeh8y2giS/M0prVqpOLdIloeJykgp8k29llkFj/ -OEa2WPiKhUnBvna5IDyrjjTKUGo5mxi9RVuArZwZ16kdJPG292WOVtQ8uTg391XQ -2uOho/nv/IoWysZLnwvHIZkcH413owvBULqM5fVda0j9qkvQEKa4GAiitx2HX0wW -YNvtUhZrXnHU/DzYkbhZrW7VAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFE5aAJMfa9ksd7718xYlNHF/YSjtMAsGA1UdDwQEAwIBBjARBglghkgB -hvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkq -hkiG9w0BAQsFAAOCAQEAbUcuBvX6jGBYDFBPn1dK9xEQuexrh7gUtNEEKumDF6vN -Bj6xHxZjjwrJsGeX8aTqS3J5BE8vsv4+xiPWaObalUtmkGrS0x/DAe6ZpzGl/aq7 -tknve6VF9s58SjnefQhf4ko18/sylX0Rp7dliMckM3fcUINe0HgzbO25MqNiTZo4 -/WPhDmvJPxbogzFoHWA/8jh1/EMyxd8JeiEG6SxZE2PL8oY0i52zHDQCFr6S8dyc -OWuGL0dQBu7Oi0f/eKBxWPf8uExTjSj44z6y0y/ioJ4+vvxVJZu9eBY6GtQ3Zjck -HcE+16987H74MazZVpmS1O23RxxT9SSJCTsqQRl58g== ------END CERTIFICATE----- -)PEM"); -const QString pempk8(R"PEM( ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWPH8Cg7cPigCAggA -MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBBiJstpznVPkN4zAO6Sb7jYBIIE -0P+jKWR80+EJuUpm1pOLJrDibuPJZE7HDtWrERL765MnQ8ssPXvF5Cjum5b1S38J -SJ6XCjOknUSkD1vySVZYd3Nlc1ogHWswOslGFiiQtr26tpm7eFvE5pEzAFh/ib/q -Y/hjAaSoC5//HB7jzbqHFW2q8aD6uCHOCOPgRFgLj1yzrgZNVw1WZl1RWRrUmA52 -P4gBtmiU8dSFTpejOi01P7FRPea97UFcdrqqN65Xg3EUOqhrFthY36sj8Z5R+nNP -gggIZmB8nwPbANNjJ0oRYWlYt1dCCZwWMPF4G7uPm8KtFGxLmvc7hCeoayars+oj -W/v2w2xiJMthNMPkhUiKmZdDIgyU1/2y00dlcRotwMSQ5GfBSl+WCJWvi7cSAqDA -ff1z2yrVsjHfg87xgaaJPhE04T8wIAD0AGBuiCxixBOIc5klkcvVP19XgG1k7uxG -MLzp9Q7ZUywWO23uZ/n0I/XKvJuMCda6/Wm0tGHLRjxPDw2xozBkeZuLiwoTsACq -bVUcvv5jQqSfzCyezPHw/RVsxhji3XwaVEka3A5wM9YFjRa6KlTOiQhj8ZmdF5Uu -yOM45KiPMSdupSiP2B5FATM0W8B0+Av6cgpTnIguZXTubx5hxi4zmgic3O/fvaEO -wxT0nYj3Z7AXK9ZBIOdoBG8vW9kd8DmvehWOcseLa41BGtW3ZacjQdDfh08H7bo1 -RELNIEnRLQj//+g1Qbw2wrU0Uymb/LqMDQ5YIQ35WJ0RB5UylBTDZBAHI/9A6yfa -Ospz5sNPkACd9ucEDgLHmj80iMAeou8W5RWsXbyU4exnXudTvjrFhntOSnF4P7yf -+sM1CFD65B6lEdpPtY4f4rrjQQYy2Wwv6HvyTTujI7zgPJ+JO59g/wPD9BdLBAa8 -81uujtoDQsZ0QEHLru+TINTxEk3tLbA0cnJEazG/V3Hlyrv4fxapzkcpct+2z40c -SITi8SESkF6aL2k+jhgAML9VsBuuzJmU/1psVTEtjGo/+vE1n7Cu2JWn1+yfqs2q -BNzt78qCYOivRmALzYIMQfv4vVMPnHiJqN/9+vdrqe+G1B7rrXOR75bB/4MnfXUX -t0ukYZ7nc/2HtX8LNrQWCfDbKJVkuPhGt4ivqY3WPUS9Qxh/rH2m2DKH33Y+bAtc -x+bjs9GSMJppY8o3NUlW4fROhCYpdvm0nmSILg+o68o1RLqu223Suk3mEDFIby+x -wHvlM910X2vXrMfLJ5C1Z5n6lTtuqwDHtKzTwarD5sQNckSPENZLlULKyU8IIncP -ENel06odAkhwE36tn7Vox2+AGpTCcG8N1kOaVbpiLC9WcvdWlQRGsycz57AQAHI+ -8DjkqkbkS+I7IODBv4CTjrwSdbBB+CICzpHFU8jiRRT8JqlwMKnNfSKS1GRcw32A -UI41YouOndS1WTY7bfnYorMW1Qdjb5SadV6PQh/5W7yyeMdGkUVIQ5/1cEfm98F0 -xajsjEdZhbN8DvgJX2fBJrfLzVwNuthwd5cMGYmUSDBhrGZT+hKfmzuMJe3HT7K1 -He169YVmA6yq877fuEQKpKtfVXIkekIJKtRL4l9Ne/4pCnbdB+YYARRJIiea9ofz -u/ubQSGGRgBCW4BhlWMaAJcoQoQR0EzYgzpqBqN9ErwB ------END ENCRYPTED PRIVATE KEY----- -)PEM"); -#define TRACEE fprintf(stderr, "TRACE %s:%d\n", __func__, __LINE__); - -class pw_expect -{ - public: - bool write; - bool abort; - pass_info pi; - - Passwd pass_return; - enum open_result result; - - pw_expect(const char *p, enum open_result r) : - write(false), abort(false), pi(QString(), QString()), - pass_return(), result(r) - { - pass_return = p; - } -}; - -class PwDialogMock: public PwDialogUI_i -{ - enum open_result execute(pass_info *p, Passwd *passwd, - bool write = false, bool abort = false) - { - if (pw_expectations.size() <= expect_idx) - return open_abort; - - pw_expect *pwe = pw_expectations[expect_idx++]; - pwe->write = write; - pwe->abort = abort; - pwe->pi.setTitle(p->getTitle()); - pwe->pi.setDescription(p->getDescription()); - - qWarning() << "PwDialogMock" << p->getDescription() << expect_idx; - *passwd = pwe->pass_return; - return pwe->result; - } - public: - int expect_idx{}; - QList pw_expectations{}; - void setExpectations(const QList pwe) - { - qDeleteAll(pw_expectations); - pw_expectations = pwe; - expect_idx = 0; - } -}; - -void test_main::importPEM() -{ - try { - class PwDialogMock *pwdialog = new PwDialogMock(); - PwDialogCore::setGui(pwdialog); - xcaWarning::setGui(new xcaWarningCore()); - - ign_openssl_error(); - openDB(); - pki_multi *pem = new pki_multi(); - pem->fromPEMbyteArray(pemcert.toUtf8(), QString()); - - pwdialog->setExpectations(QList{ - new pw_expect("Title", pw_ok), - }); - QVERIFY_EXCEPTION_THROWN(pem->fromPEMbyteArray(pempk8.toUtf8(), QString()), errorEx); - - pwdialog->setExpectations(QList{ - new pw_expect("pass", pw_ok), - }); - pem->fromPEMbyteArray(pempk8.toUtf8(), QString()); - QCOMPARE(pem->failed_files.count(), 0); - ImportMulti *dlg = new ImportMulti(mainwin); - dlg->addItem(pem); - - dlg->show(); - Q_ASSERT(QTest::qWaitForWindowActive(dlg)); - delete dlg; - } catch (...) { - QVERIFY2(false, "Exception thrown"); - } -} - -QTEST_MAIN(test_main) -#include "test_main.moc" diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 00000000..c13c13be --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,19 @@ + +list(APPEND srcs PwDialogMock.h importPEM.cpp main.cpp main.h newKey.cpp pem.cpp) + +list(TRANSFORM srcs PREPEND ${PROJECT_SOURCE_DIR}/test/) + +add_executable(testxca EXCLUDE_FROM_ALL + img/imgres.qrc ${srcs} + ${UI_FILES} ${PROJECT_BINARY_DIR}/local.h) + +add_test(NAME testxca COMMAND testxca) +set_tests_properties(testxca PROPERTIES LABELS gui) +add_dependencies(tests testxca) +target_link_libraries(testxca ${ASAN_LIB} ${QT}::Test xcalib) + +if (APPLE) + target_link_libraries(testxca + ${IOKIT_LIBRARY} ${COREFOUNDATION_LIBRARY} + ) +endif() diff --git a/test/PwDialogMock.h b/test/PwDialogMock.h new file mode 100644 index 00000000..f3fba8e4 --- /dev/null +++ b/test/PwDialogMock.h @@ -0,0 +1,58 @@ +/* vi: set sw=4 ts=4: + * + * Copyright (C) 2023 Christian Hohnstaedt. + * + * All rights reserved. + */ + +#include + +#include "lib/debug_info.h" +#include "lib/PwDialogCore.h" + +class pw_expect +{ + public: + bool write; + bool abort; + pass_info pi; + + Passwd pass_return; + enum open_result result; + + pw_expect(const char *p, enum open_result r) : + write(false), abort(false), pi(QString(), QString()), + pass_return(), result(r) + { + pass_return = p; + } +}; + +class PwDialogMock: public PwDialogUI_i +{ + enum open_result execute(pass_info *p, Passwd *passwd, + bool write = false, bool abort = false) + { + if (pw_expectations.size() <= expect_idx) + return open_abort; + + pw_expect *pwe = pw_expectations[expect_idx++]; + pwe->write = write; + pwe->abort = abort; + pwe->pi.setTitle(p->getTitle()); + pwe->pi.setDescription(p->getDescription()); + + qWarning() << "PwDialogMock" << p->getDescription() << expect_idx; + *passwd = pwe->pass_return; + return pwe->result; + } + public: + int expect_idx{}; + QList pw_expectations{}; + void setExpectations(const QList pwe) + { + qDeleteAll(pw_expectations); + pw_expectations = pwe; + expect_idx = 0; + } +}; diff --git a/test/importPEM.cpp b/test/importPEM.cpp new file mode 100644 index 00000000..49a29624 --- /dev/null +++ b/test/importPEM.cpp @@ -0,0 +1,52 @@ +/* vi: set sw=4 ts=4: + * + * Copyright (C) 2023 Christian Hohnstaedt. + * + * All rights reserved. + */ + +#include + +#include "widgets/MainWindow.h" +#include "ui_MainWindow.h" +#include "widgets/ImportMulti.h" +#include "ui_ImportMulti.h" + +#include "lib/pki_multi.h" + +#include "PwDialogMock.h" +#include "main.h" + +void test_main::importPEM() +{ + try { + class PwDialogMock *pwdialog = new PwDialogMock(); + PwDialogCore::setGui(pwdialog); + xcaWarning::setGui(new xcaWarningCore()); + + ign_openssl_error(); + openDB(); + pki_multi *pem = new pki_multi(); + pem->fromPEMbyteArray(pemdata["interca1"].toUtf8(), QString()); + + pwdialog->setExpectations(QList{ + new pw_expect("Title", pw_ok), + }); + QVERIFY_EXCEPTION_THROWN(pem->fromPEMbyteArray( + pemdata["interpk8"].toUtf8(), QString()), errorEx); + + pwdialog->setExpectations(QList{ + new pw_expect("pass", pw_ok), + }); + pem->fromPEMbyteArray(pemdata["interpk8"].toUtf8(), QString()); + QCOMPARE(pem->failed_files.count(), 0); + ImportMulti *dlg = new ImportMulti(mainwin); + dlg->addItem(pem); + + dlg->show(); + Q_ASSERT(QTest::qWaitForWindowActive(dlg)); + delete dlg; + } catch (...) { + QVERIFY2(false, "Exception thrown"); + } +} diff --git a/test/main.cpp b/test/main.cpp new file mode 100644 index 00000000..ed85971a --- /dev/null +++ b/test/main.cpp @@ -0,0 +1,51 @@ +/* vi: set sw=4 ts=4: + * + * Copyright (C) 2023 Christian Hohnstaedt. + * + * All rights reserved. + */ + +#include + +#include "widgets/MainWindow.h" +#include "ui_MainWindow.h" + +#include "lib/debug_info.h" +#include "lib/entropy.h" +#include "lib/pki_evp.h" + +#include "main.h" + +char segv_data[1024]; + +void test_main::initTestCase() +{ + debug_info::init(); + + entropy = new Entropy; + + Settings.clear(); + initOIDs(); + + mainwin = new MainWindow(); + mainwin->show(); +} + +void test_main::cleanupTestCase() +{ + Database.close(); + delete entropy; + delete mainwin; + pki_export::free_elements(); +} + +void test_main::openDB() +{ + pki_evp::passwd = "pass"; + QString salt = Entropy::makeSalt(); + pki_evp::passHash = pki_evp::sha512passwT(pki_evp::passwd, salt); + Settings["pwhash"] = pki_evp::passHash; + Database.open("testdb.xdb"); +} + +QTEST_MAIN(test_main) diff --git a/test/main.h b/test/main.h new file mode 100644 index 00000000..92a41e47 --- /dev/null +++ b/test/main.h @@ -0,0 +1,29 @@ +/* vi: set sw=4 ts=4: + * + * Copyright (C) 2023 Christian Hohnstaedt. + * + * All rights reserved. + */ + +#ifndef __MAIN_H +#define __MAIN_H + +#include "lib/entropy.h" +#include "lib/pki_evp.h" + +class test_main: public QObject +{ + Q_OBJECT + Entropy *entropy {}; + + void openDB(); + static const QMap pemdata; + + private slots: + void initTestCase(); + void cleanupTestCase(); + void newKey(); + void importPEM(); +}; + +#endif diff --git a/test/newKey.cpp b/test/newKey.cpp new file mode 100644 index 00000000..d776832e --- /dev/null +++ b/test/newKey.cpp @@ -0,0 +1,92 @@ +/* vi: set sw=4 ts=4: + * + * Copyright (C) 2023 Christian Hohnstaedt. + * + * All rights reserved. + */ + +#include + +#include "widgets/MainWindow.h" +#include "ui_MainWindow.h" +#include "widgets/NewKey.h" +#include "ui_NewKey.h" +#include "main.h" + +void test_main::newKey() +{ + /* RSA 3012 bit key - Remember as default */ + NewKey *dlg = new NewKey(mainwin, "Alfons"); + dlg->show(); + Q_ASSERT(QTest::qWaitForWindowActive(dlg)); + dlg->keyLength->setEditText("3012 bit"); + QCOMPARE(dlg->rememberDefault->isChecked(), false); + dlg->rememberDefault->setChecked(true); + dlg->accept(); + keyjob job = dlg->getKeyJob(); + QCOMPARE(job.ktype.name, "RSA"); + QCOMPARE(job.size, 3012); + delete dlg; + + /* Remembered RSA:3012 key. Change to EC:secp521r1 */ + dlg = new NewKey(mainwin, "Erwin"); + dlg->show(); + Q_ASSERT(QTest::qWaitForWindowActive(dlg)); + QCOMPARE(dlg->rememberDefault->isChecked(), false); + QCOMPARE(job.toString(), dlg->getKeyJob().toString()); +#ifndef OPENSSL_NO_EC + /* Curve box visible after selecting EC Key */ + QCOMPARE(dlg->curveBox->isVisible(),false); + QCOMPARE(dlg->curveLabel->isVisible(),false); + dlg->keyType->setCurrentIndex(2); + QCOMPARE(dlg->curveBox->isVisible(),true); + QCOMPARE(dlg->curveLabel->isVisible(),true); + dlg->curveBox->setCurrentIndex(2); + QCOMPARE(dlg->getKeyJob().toString(), "EC:secp521r1"); +#ifdef EVP_PKEY_ED25519 + /* Select Edwards Curve */ + dlg->keyType->setCurrentIndex(3); + QCOMPARE(dlg->getKeyJob().toString(), "ED25519"); + /* Neither key size nor curve is visible */ + QCOMPARE(dlg->curveBox->isVisible(),false); + QCOMPARE(dlg->curveLabel->isVisible(),false); + QCOMPARE(dlg->keyLength->isVisible(),false); + QCOMPARE(dlg->keySizeLabel->isVisible(),false); +#endif + /* Back to EC and previously set curve is set */ + dlg->keyType->setCurrentIndex(2); + QCOMPARE(dlg->getKeyJob().toString(), "EC:secp521r1"); +#endif + dlg->accept(); + delete dlg; + + /* Open dialog again and RSA:3012 is remembered */ + dlg = new NewKey(mainwin, "Otto"); + dlg->show(); + Q_ASSERT(QTest::qWaitForWindowActive(dlg)); + QCOMPARE(dlg->rememberDefault->isChecked(), false); + QCOMPARE(job.toString(), dlg->getKeyJob().toString()); + QCOMPARE(dlg->curveBox->isVisible(),false); + QCOMPARE(dlg->curveLabel->isVisible(),false); +#ifndef OPENSSL_NO_EC + /* Select EC and remember as default */ + dlg->keyType->setCurrentIndex(2); + dlg->curveBox->setCurrentIndex(2); + + QCOMPARE(dlg->curveBox->isVisible(),true); + QCOMPARE(dlg->curveLabel->isVisible(),true); + QCOMPARE(dlg->getKeyJob().toString(), "EC:secp521r1"); + dlg->rememberDefault->setChecked(true); + dlg->accept(); + delete dlg; + + /* Now "EC:secp521r1" is remembered as default */ + dlg = new NewKey(mainwin, "Heini"); + dlg->show(); + Q_ASSERT(QTest::qWaitForWindowActive(dlg)); + QCOMPARE(dlg->getKeyJob().toString(), "EC:secp521r1"); + QCOMPARE(dlg->rememberDefault->isChecked(), false); +#endif + dlg->accept(); + delete dlg; +} diff --git a/test/pem.cpp b/test/pem.cpp new file mode 100644 index 00000000..f4370374 --- /dev/null +++ b/test/pem.cpp @@ -0,0 +1,88 @@ +/* vi: set sw=4 ts=4: + * + * Copyright (C) 2023 Christian Hohnstaedt. + * + * All rights reserved. + */ + +#include "main.h" + +const QMap test_main::pemdata = { +{ "RootCA", R"PEM( +-----BEGIN CERTIFICATE----- +MIIDGDCCAgCgAwIBAgIIHaqxKU04FSUwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UE +AxMHUm9vdCBDQTAeFw0yMzA5MTgxNjQxMDBaFw0zMzA5MTgxNjQxMDBaMBIxEDAO +BgNVBAMTB1Jvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCG +ykFQQcbPjwcwY1iXd0U0zTWQA8R2UZCHveyZtza55e55vTRtfeVzAgTxSbmOkgyn +TR4S3yM6inZiNcVRFUkhrFPYMFbHUSpw/DykgbxYAUszE+KTx77JZ3A3pNL/wjlr +XQOGeGENBeVdrMtzSgeeM8jLys3P5FE3s3itKV5xxlZZthcbxrADSTLF85a69iJ+ +yGIy7tm1fLYkLIJzwtUz+MSyIWzg/K+82sPQEWGg3EBEj6zpT+01dk0AAGwOyZHz +0HlvEoZl/py2CYFItycMM8fpvh/u2QIVCYxeqM2TwojwKhDrtmD/Vd9SfCoKqYRj +rjgu3ZCjGyRzHlpSFSlNAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFGOFvC6Qk0JQDPYJ9tlJOFP30mKZMAsGA1UdDwQEAwIBBjARBglghkgBhvhC +AQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG +9w0BAQsFAAOCAQEAWfDIgDR7K8vKdfnAyCYkSX3j8qBjdfuG1yAEGQDgH5N+xBNO +/0Jzq7GfAkv32lmWRwKqUEJ1tv2lhzTDakHldMn4jB+jSPYrMZN4oBjU8EP39Jns +yBixTblnKQeitcYM1U7U4rIPQApemY1C0tmMvT6A0fvslkUhrXIxVt+dTaQVta3w +CabsuzvdC7WeOrT2/g4OlKXs7jvXpNGEm0SY1Y8uOYabVtz6vGeLK7lkzWD78kGJ +qrCpmDuon1hp2wRlDCIvyulQpJT68jSyauOQ5rz29k0EkBOlN4VZiHkI8Zo/tMRc +nv3PQrI5EP7OyrpAZEhav0l25gSzDExzgziqCQ== +-----END CERTIFICATE----- +)PEM" +}, +{ "interca1", R"PEM( +-----BEGIN CERTIFICATE----- +MIIDGzCCAgOgAwIBAgIIOvC5r9Smk3wwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UE +AxMHUm9vdCBDQTAeFw0yMzEwMjUxODU1MDBaFw0zMzA5MTgxNjQxMDBaMBUxEzAR +BgNVBAMTCkludGVyIENBIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDJlExG3+oLO6GFuD4pa9sI5mJL/9fADcoe9bv1SAnRKu/GPtCMaruVTKBAt5x4 +mwt5My6WhyPdpYp0z6yUgSCrbkSAMvMzGlS1W5Ke4UU4GaufCRjHeXNVpx9wXEPY +y46HO5vSZZiGzl46UMmeVkV5kGeh8y2giS/M0prVqpOLdIloeJykgp8k29llkFj/ +OEa2WPiKhUnBvna5IDyrjjTKUGo5mxi9RVuArZwZ16kdJPG292WOVtQ8uTg391XQ +2uOho/nv/IoWysZLnwvHIZkcH413owvBULqM5fVda0j9qkvQEKa4GAiitx2HX0wW +YNvtUhZrXnHU/DzYkbhZrW7VAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFE5aAJMfa9ksd7718xYlNHF/YSjtMAsGA1UdDwQEAwIBBjARBglghkgB +hvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkq +hkiG9w0BAQsFAAOCAQEAbUcuBvX6jGBYDFBPn1dK9xEQuexrh7gUtNEEKumDF6vN +Bj6xHxZjjwrJsGeX8aTqS3J5BE8vsv4+xiPWaObalUtmkGrS0x/DAe6ZpzGl/aq7 +tknve6VF9s58SjnefQhf4ko18/sylX0Rp7dliMckM3fcUINe0HgzbO25MqNiTZo4 +/WPhDmvJPxbogzFoHWA/8jh1/EMyxd8JeiEG6SxZE2PL8oY0i52zHDQCFr6S8dyc +OWuGL0dQBu7Oi0f/eKBxWPf8uExTjSj44z6y0y/ioJ4+vvxVJZu9eBY6GtQ3Zjck +HcE+16987H74MazZVpmS1O23RxxT9SSJCTsqQRl58g== +-----END CERTIFICATE----- +)PEM" +}, +{ "interpk8", R"PEM( +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIWPH8Cg7cPigCAggA +MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBBiJstpznVPkN4zAO6Sb7jYBIIE +0P+jKWR80+EJuUpm1pOLJrDibuPJZE7HDtWrERL765MnQ8ssPXvF5Cjum5b1S38J +SJ6XCjOknUSkD1vySVZYd3Nlc1ogHWswOslGFiiQtr26tpm7eFvE5pEzAFh/ib/q +Y/hjAaSoC5//HB7jzbqHFW2q8aD6uCHOCOPgRFgLj1yzrgZNVw1WZl1RWRrUmA52 +P4gBtmiU8dSFTpejOi01P7FRPea97UFcdrqqN65Xg3EUOqhrFthY36sj8Z5R+nNP +gggIZmB8nwPbANNjJ0oRYWlYt1dCCZwWMPF4G7uPm8KtFGxLmvc7hCeoayars+oj +W/v2w2xiJMthNMPkhUiKmZdDIgyU1/2y00dlcRotwMSQ5GfBSl+WCJWvi7cSAqDA +ff1z2yrVsjHfg87xgaaJPhE04T8wIAD0AGBuiCxixBOIc5klkcvVP19XgG1k7uxG +MLzp9Q7ZUywWO23uZ/n0I/XKvJuMCda6/Wm0tGHLRjxPDw2xozBkeZuLiwoTsACq +bVUcvv5jQqSfzCyezPHw/RVsxhji3XwaVEka3A5wM9YFjRa6KlTOiQhj8ZmdF5Uu +yOM45KiPMSdupSiP2B5FATM0W8B0+Av6cgpTnIguZXTubx5hxi4zmgic3O/fvaEO +wxT0nYj3Z7AXK9ZBIOdoBG8vW9kd8DmvehWOcseLa41BGtW3ZacjQdDfh08H7bo1 +RELNIEnRLQj//+g1Qbw2wrU0Uymb/LqMDQ5YIQ35WJ0RB5UylBTDZBAHI/9A6yfa +Ospz5sNPkACd9ucEDgLHmj80iMAeou8W5RWsXbyU4exnXudTvjrFhntOSnF4P7yf ++sM1CFD65B6lEdpPtY4f4rrjQQYy2Wwv6HvyTTujI7zgPJ+JO59g/wPD9BdLBAa8 +81uujtoDQsZ0QEHLru+TINTxEk3tLbA0cnJEazG/V3Hlyrv4fxapzkcpct+2z40c +SITi8SESkF6aL2k+jhgAML9VsBuuzJmU/1psVTEtjGo/+vE1n7Cu2JWn1+yfqs2q +BNzt78qCYOivRmALzYIMQfv4vVMPnHiJqN/9+vdrqe+G1B7rrXOR75bB/4MnfXUX +t0ukYZ7nc/2HtX8LNrQWCfDbKJVkuPhGt4ivqY3WPUS9Qxh/rH2m2DKH33Y+bAtc +x+bjs9GSMJppY8o3NUlW4fROhCYpdvm0nmSILg+o68o1RLqu223Suk3mEDFIby+x +wHvlM910X2vXrMfLJ5C1Z5n6lTtuqwDHtKzTwarD5sQNckSPENZLlULKyU8IIncP +ENel06odAkhwE36tn7Vox2+AGpTCcG8N1kOaVbpiLC9WcvdWlQRGsycz57AQAHI+ +8DjkqkbkS+I7IODBv4CTjrwSdbBB+CICzpHFU8jiRRT8JqlwMKnNfSKS1GRcw32A +UI41YouOndS1WTY7bfnYorMW1Qdjb5SadV6PQh/5W7yyeMdGkUVIQ5/1cEfm98F0 +xajsjEdZhbN8DvgJX2fBJrfLzVwNuthwd5cMGYmUSDBhrGZT+hKfmzuMJe3HT7K1 +He169YVmA6yq877fuEQKpKtfVXIkekIJKtRL4l9Ne/4pCnbdB+YYARRJIiea9ofz +u/ubQSGGRgBCW4BhlWMaAJcoQoQR0EzYgzpqBqN9ErwB +-----END ENCRYPTED PRIVATE KEY----- +)PEM" +} +};