diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index edff91a9..e9c4aa2b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,52 +1,53 @@ find_package(Qt5Test REQUIRED) set(test_LIBS kgpg_lib Qt5::Test) set(COMMON common.h common.cpp) function(create_test name) add_executable(${name} ${ARGN} ${COMMON}) target_link_libraries(${name} ${test_LIBS}) add_test(NAME ${name} COMMAND ${name}) set_property(TEST ${name} PROPERTY ENVIRONMENT "XDG_CONFIG_HOME=${CMAKE_BINARY_DIR}/tests") set_property(TEST ${name} PROPERTY RUN_SERIAL TRUE) #since gpg config home is shared between each test add_dependencies(${name} test-data) endfunction() create_test(kgpg-import kgpgimport.h kgpgimport.cpp) create_test(kgpg-verify kgpgverify.h kgpgverify.cpp) create_test(kgpg-change-trust kgpgchangetrust.h kgpgchangetrust.cpp) create_test(kgpg-disable kgpgchangedisable.h kgpgchangedisable.cpp) create_test(kgpg-interface kgpginterface.h kgpginterface.cpp) create_test(kgpg-encrypt kgpgencrypt.h kgpgencrypt.cpp) create_test(kgpg-decrypt kgpgdecrypt.h kgpgdecrypt.cpp) create_test(kgpg-del-key kgpgdelkey.h kgpgdelkey.cpp) create_test(kgpg-add-photo kgpgaddphoto.h kgpgaddphoto.cpp) create_test(kgpg-add-uid kgpgadduid.h kgpgadduid.cpp) +create_test(kgpg-export kgpgexport.h kgpgexport.cpp) set(GpgConf .gnupg/gpg.conf) set(KgpgConf kgpgrc) set(Keys keys/kgpgtest_BA7695F3C550DF14.asc keys/kgpgtest_BA7695F3C550DF14.pass keys/kgpgtest_BA7695F3C550DF14_pub.asc keys/signed_bad_sig keys/signed_text keys/encrypted_text.txt keys/encrypted_text_hide_key_id.txt keys/image.jpg ) add_custom_target(test-data) add_custom_command(TARGET test-data PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tests/.gnupg ${CMAKE_BINARY_DIR}/tests/gnupg) add_custom_command(TARGET test-data PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/tests/keys ${CMAKE_BINARY_DIR}/tests/keys) add_custom_command(TARGET test-data PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tests/kgpgrc ${CMAKE_BINARY_DIR}/tests/kgpgrc) diff --git a/tests/kgpgexport.cpp b/tests/kgpgexport.cpp new file mode 100644 index 00000000..e7d199a0 --- /dev/null +++ b/tests/kgpgexport.cpp @@ -0,0 +1,82 @@ +#include "kgpgexport.h" +#include "../transactions/kgpgexport.h" +#include "../kgpginterface.h" +#include "common.h" + +#include +#include +#include + +void KGpgExportTest::init() +{ + QVERIFY(resetGpgConf()); +} + +void KGpgExportTest::testExportPublicKeyToFile() +{ + addGpgKey(QLatin1String("keys/kgpgtest_BA7695F3C550DF14_pub.asc")); + QTemporaryFile file("key_pub.asc"); + QVERIFY(file.open()); + QString filename = file.fileName(); + + QStringList ids(QLatin1String("BA7695F3C550DF14")); + // Output in Ascii mode + QStringList options(QLatin1String("--armor")); + KGpgExport *transaction = new KGpgExport(this, ids, filename, options, false); + QSignalSpy spy(transaction, &KGpgExport::done); + QObject::connect(transaction, &KGpgExport::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + transaction->start(); + QVERIFY(spy.wait()); + QString exportedKey = readFile(filename); + QString key = readFile(QLatin1String("keys/kgpgtest_BA7695F3C550DF14_pub.asc")); + QVERIFY(key.compare(exportedKey) == 0); +} + +void KGpgExportTest::testExportSecretKeyToFile() +{ + QString passphrase = readFile(QLatin1String("keys/kgpgtest_BA7695F3C550DF14.pass")); + addGpgKey(QLatin1String("keys/kgpgtest_BA7695F3C550DF14.asc"), passphrase); + QTemporaryFile file("key.asc"); + QVERIFY(file.open()); + QString filename = file.fileName(); + QStringList ids(QLatin1String("BA7695F3C550DF14")); + // Output in Ascii mode + QStringList options(QLatin1String("--armor")); + KGpgExport *transaction = new KGpgExport(this, ids, filename, options, true); + addPasswordArguments(transaction, passphrase); + QSignalSpy spy(transaction, &KGpgExport::done); + QObject::connect(transaction, &KGpgExport::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + transaction->start(); + QVERIFY(spy.wait()); + + //reset gpg home dir + QVERIFY(resetGpgConf()); + //Import exported key + addGpgKey(filename, passphrase); + KgpgCore::KgpgKeyList keys = KgpgInterface::readSecretKeys(); + QString keyID = QLatin1String("BA7695F3C550DF14"); + QCOMPARE(keys.size(), 1); + QVERIFY(keys.first().fullId().compare(keyID) == 0); +} + +void KGpgExportTest::testExportPublicKeyToStdOutput() +{ + addGpgKey(QLatin1String("keys/kgpgtest_BA7695F3C550DF14_pub.asc")); + + QStringList ids(QLatin1String("BA7695F3C550DF14")); + // Output in Ascii mode + QStringList options(QLatin1String("--armor")); + KGpgExport *transaction = new KGpgExport(this, ids, options, false); + QSignalSpy spy(transaction, &KGpgExport::done); + QObject::connect(transaction, &KGpgExport::done, + [](int result) { QCOMPARE(result, KGpgTransaction::TS_OK); }); + transaction->start(); + QVERIFY(spy.wait()); + QString exportedKey = QLatin1String(transaction->getOutputData()); + QString key = readFile(QLatin1String("keys/kgpgtest_BA7695F3C550DF14_pub.asc")); + QVERIFY(key.compare(exportedKey) == 0); +} + +QTEST_MAIN(KGpgExportTest) diff --git a/tests/kgpgexport.h b/tests/kgpgexport.h new file mode 100644 index 00000000..1fd6e7d5 --- /dev/null +++ b/tests/kgpgexport.h @@ -0,0 +1,15 @@ +#ifndef KGPGEXPORT_TEST_H +#define KGPGEXPORT_TEST_H + +#include + +class KGpgExportTest : public QObject { + Q_OBJECT +private slots: + void init(); + void testExportPublicKeyToFile(); + void testExportSecretKeyToFile(); + void testExportPublicKeyToStdOutput(); +}; + +#endif