diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index 6bb1008b2..66ca4c06d 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -1,31 +1,39 @@ # SPDX-FileCopyrightText: none # SPDX-License-Identifier: BSD-3-Clause include(ECMAddTests) find_package(Qt${QT_MAJOR_VERSION}Test ${REQUIRED_QT_VERSION} CONFIG QUIET) if(NOT TARGET Qt${QT_MAJOR_VERSION}::Test) message(STATUS "Qt${QT_MAJOR_VERSION}Test not found, autotests will not be built.") return() endif() include_directories(${CMAKE_SOURCE_DIR}/src) ecm_qt_declare_logging_category(logging_category_srcs HEADER kleopatra_debug.h IDENTIFIER KLEOPATRA_LOG CATEGORY_NAME org.kde.pim.kleopatra) ecm_add_test( kuniqueservicetest.cpp ${CMAKE_SOURCE_DIR}/src/utils/kuniqueservice.cpp ${logging_category_srcs} TEST_NAME kuniqueservicetest LINK_LIBRARIES ${_kleopatra_dbusaddons_libs} Qt${QT_MAJOR_VERSION}::Test ) ecm_add_test( stripsuffixtest.cpp ${CMAKE_SOURCE_DIR}/src/utils/path-helper.cpp ${logging_category_srcs} TEST_NAME stripsuffixtest LINK_LIBRARIES KF5::I18n KF5::Libkleo Qt${QT_MAJOR_VERSION}::Test ) + +ecm_add_test( + keyparameterstest.cpp + ${CMAKE_SOURCE_DIR}/src/utils/keyparameters.cpp + ${logging_category_srcs} + TEST_NAME keyparameterstest + LINK_LIBRARIES Gpgmepp Qt${QT_MAJOR_VERSION}::Test +) diff --git a/autotests/keyparameterstest.cpp b/autotests/keyparameterstest.cpp new file mode 100644 index 000000000..0931e1924 --- /dev/null +++ b/autotests/keyparameterstest.cpp @@ -0,0 +1,100 @@ +/* -*- mode: c++; c-basic-offset:4 -*- + autotests/keyparameterstest.cpp + + This file is part of Kleopatra's test suite. + SPDX-FileCopyrightText: 2022 g10 Code GmbH + SPDX-FileContributor: Ingo Klöcker + + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +#include "utils/keyparameters.h" +#include "utils/keyusage.h" + +#include +#include + +#include + +using namespace Kleo; + +class KeyParametersTest : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void test_OpenPGP_key() + { + KeyParameters params{KeyParameters::OpenPGP}; + params.setName(QStringLiteral("Ada Lovelace")); + params.setEmail(QStringLiteral("ada.lovelace@example.net")); + params.setKeyType(GpgME::Subkey::AlgoEDDSA); + params.setKeyCurve(QStringLiteral("ed25519")); + params.setKeyUsage(KeyUsage{KeyUsage::Sign | KeyUsage::Authenticate}); + params.setSubkeyType(GpgME::Subkey::AlgoECDH); + params.setSubkeyCurve(QStringLiteral("cv25519")); + params.setSubkeyUsage(KeyUsage{KeyUsage::Encrypt}); + params.setExpirationDate(QDate{2024, 12, 10}); + + QCOMPARE(params.toString(), + QStringLiteral("\n" + "%ask-passphrase\n" + "Key-Type:EdDSA\n" + "Key-Curve:ed25519\n" + "Key-Usage:sign auth\n" + "Subkey-Type:ECDH\n" + "Subkey-Usage:encrypt\n" + "Subkey-Curve:cv25519\n" + "Expire-Date:2024-12-10\n" + "Name-Real:Ada Lovelace\n" + "Name-Email:ada.lovelace@example.net\n" + "")); + } + + void test_SMIME_CSR() + { + KeyParameters params{KeyParameters::CMS}; + params.setDN(QStringLiteral("CN=Ada Lovelace,L=London,C=UK")); + params.setEmail(QStringLiteral("ada.lovelace@example.net")); + params.addEmail(QStringLiteral(u"ada@t\u00E4st.example.org")); + params.setKeyType(GpgME::Subkey::AlgoRSA); + params.setKeyLength(3072); + params.setKeyUsage(KeyUsage{KeyUsage::Sign | KeyUsage::Encrypt}); + params.addDomainName(QStringLiteral("ada.example.net")); + params.addDomainName(QStringLiteral(u"t\u00E4st.example.org")); + params.addURI(QStringLiteral("https://ada.example.net")); + params.addURI(QStringLiteral("https://lovelace.example.org")); + QCOMPARE(params.toString(), + QStringLiteral("\n" + "Key-Type:RSA\n" + "Key-Length:3072\n" + "Key-Usage:sign encrypt\n" + "Name-DN:CN=Ada Lovelace,L=London,C=UK\n" + "Name-Email:ada.lovelace@example.net\n" + "Name-Email:ada@xn--tst-qla.example.org\n" + "Name-DNS:ada.example.net\n" + "Name-DNS:xn--tst-qla.example.org\n" + "Name-URI:https://ada.example.net\n" + "Name-URI:https://lovelace.example.org\n" + "")); + } + + void test_SMIME_CSR_for_card_key() + { + KeyParameters params{KeyParameters::CMS}; + params.setDN(QStringLiteral("CN=Ada Lovelace,L=London,C=UK")); + params.setEmail(QStringLiteral("ada@example.net")); + params.setCardKeyRef(QStringLiteral("OPENPGP.1")); + params.setKeyUsage(KeyUsage{KeyUsage::Sign}); + QCOMPARE(params.toString(), + QStringLiteral("\n" + "Key-Type:card:OPENPGP.1\n" + "Key-Usage:sign\n" + "Name-DN:CN=Ada Lovelace,L=London,C=UK\n" + "Name-Email:ada@example.net\n" + "")); + } +}; + +QTEST_MAIN(KeyParametersTest) +#include "keyparameterstest.moc"