mirror of
https://github.com/chris2511/xca.git
synced 2026-09-12 19:51:05 +05:00
Move GUI tests to test/ subdir
This commit is contained in:
parent
1891828d26
commit
0775dbf113
@ -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</Fragment>\n</Wix>")
|
||||
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
|
||||
|
||||
@ -1,286 +0,0 @@
|
||||
/* vi: set sw=4 ts=4:
|
||||
*
|
||||
* Copyright (C) 2023 Christian Hohnstaedt.
|
||||
*
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
#include <QDir>
|
||||
#include <QDebug>
|
||||
#include <QTest>
|
||||
#include <QString>
|
||||
#include <QThread>
|
||||
#include <QApplication>
|
||||
|
||||
#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_expect*> pw_expectations{};
|
||||
void setExpectations(const QList<pw_expect*> 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<pw_expect*>{
|
||||
new pw_expect("Title", pw_ok),
|
||||
});
|
||||
QVERIFY_EXCEPTION_THROWN(pem->fromPEMbyteArray(pempk8.toUtf8(), QString()), errorEx);
|
||||
|
||||
pwdialog->setExpectations(QList<pw_expect*>{
|
||||
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"
|
||||
19
test/CMakeLists.txt
Normal file
19
test/CMakeLists.txt
Normal file
@ -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()
|
||||
58
test/PwDialogMock.h
Normal file
58
test/PwDialogMock.h
Normal file
@ -0,0 +1,58 @@
|
||||
/* vi: set sw=4 ts=4:
|
||||
*
|
||||
* Copyright (C) 2023 Christian Hohnstaedt.
|
||||
*
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
#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_expect*> pw_expectations{};
|
||||
void setExpectations(const QList<pw_expect*> pwe)
|
||||
{
|
||||
qDeleteAll(pw_expectations);
|
||||
pw_expectations = pwe;
|
||||
expect_idx = 0;
|
||||
}
|
||||
};
|
||||
52
test/importPEM.cpp
Normal file
52
test/importPEM.cpp
Normal file
@ -0,0 +1,52 @@
|
||||
/* vi: set sw=4 ts=4:
|
||||
*
|
||||
* Copyright (C) 2023 Christian Hohnstaedt.
|
||||
*
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
#include <QTest>
|
||||
|
||||
#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<pw_expect*>{
|
||||
new pw_expect("Title", pw_ok),
|
||||
});
|
||||
QVERIFY_EXCEPTION_THROWN(pem->fromPEMbyteArray(
|
||||
pemdata["interpk8"].toUtf8(), QString()), errorEx);
|
||||
|
||||
pwdialog->setExpectations(QList<pw_expect*>{
|
||||
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");
|
||||
}
|
||||
}
|
||||
51
test/main.cpp
Normal file
51
test/main.cpp
Normal file
@ -0,0 +1,51 @@
|
||||
/* vi: set sw=4 ts=4:
|
||||
*
|
||||
* Copyright (C) 2023 Christian Hohnstaedt.
|
||||
*
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
#include <QTest>
|
||||
|
||||
#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)
|
||||
29
test/main.h
Normal file
29
test/main.h
Normal file
@ -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<QString, QString> pemdata;
|
||||
|
||||
private slots:
|
||||
void initTestCase();
|
||||
void cleanupTestCase();
|
||||
void newKey();
|
||||
void importPEM();
|
||||
};
|
||||
|
||||
#endif
|
||||
92
test/newKey.cpp
Normal file
92
test/newKey.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
/* vi: set sw=4 ts=4:
|
||||
*
|
||||
* Copyright (C) 2023 Christian Hohnstaedt.
|
||||
*
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
#include <QTest>
|
||||
|
||||
#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;
|
||||
}
|
||||
88
test/pem.cpp
Normal file
88
test/pem.cpp
Normal file
@ -0,0 +1,88 @@
|
||||
/* vi: set sw=4 ts=4:
|
||||
*
|
||||
* Copyright (C) 2023 Christian Hohnstaedt.
|
||||
*
|
||||
* All rights reserved.
|
||||
*/
|
||||
|
||||
#include "main.h"
|
||||
|
||||
const QMap<QString,QString> 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"
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user