aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt53
-rw-r--r--test/GpgCoreTest.cpp32
-rw-r--r--test/GpgCoreTestBasicOpera.cpp230
-rw-r--r--test/GpgCoreTestImportExport.cpp38
-rw-r--r--test/GpgCoreTestKeyModel.cpp171
-rw-r--r--test/GpgCoreTestKeyModelAlone.cpp162
-rw-r--r--test/GpgCoreTestKeygen.cpp132
-rw-r--r--test/GpgCoreTestKeygenAlone.cpp160
-rw-r--r--test/GpgFrontendTest.h206
-rw-r--r--test/conf/core.cfg27
-rw-r--r--test/data/pv1.key82
-rw-r--r--test/data/pv2.key41
-rw-r--r--test/data/pv3.key106
-rw-r--r--test/data/pv4.key82
14 files changed, 0 insertions, 1522 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
deleted file mode 100644
index 84fc9f9a..00000000
--- a/test/CMakeLists.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# Copyright (C) 2021 Saturneric
-#
-# This file is part of GpgFrontend.
-#
-# GpgFrontend is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# GpgFrontend is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
-#
-# The initial version of the source code is inherited from
-# the gpg4usb project, which is under GPL-3.0-or-later.
-#
-# All the source code of GpgFrontend was modified and released by
-# Saturneric<[email protected]> starting on May 12, 2021.
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-find_package(GTest REQUIRED)
-
-# Set configure for test
-file(COPY ${CMAKE_SOURCE_DIR}/test/conf DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ FOLLOW_SYMLINK_CHAIN)
-file(COPY ${CMAKE_SOURCE_DIR}/test/data DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ FOLLOW_SYMLINK_CHAIN)
-
-aux_source_directory(. TEST_SOURCE)
-
-add_executable(
- ${AppName}
- ${TEST_SOURCE}
-)
-
-if (GPG_CORE)
- target_link_libraries(${AppName} gpg_core)
-endif ()
-
-if (GPG_STANDALONE_MODE)
- file(COPY ${CMAKE_SOURCE_DIR}/test/gpg DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/ FOLLOW_SYMLINK_CHAIN)
-endif ()
-
-target_link_libraries(${AppName} ${Boost_LIBRARIES} gtest gtest_main)
-if (APPLE)
- target_link_libraries(${AppName} intl)
-endif ()
-
-add_test(AllTestsInGpgFrontend ${AppName})
diff --git a/test/GpgCoreTest.cpp b/test/GpgCoreTest.cpp
deleted file mode 100644
index 224fad18..00000000
--- a/test/GpgCoreTest.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "GpgFrontendTest.h"
-
-// Should be used once and once-only
-INITIALIZE_EASYLOGGINGPP
diff --git a/test/GpgCoreTestBasicOpera.cpp b/test/GpgCoreTestBasicOpera.cpp
deleted file mode 100644
index 57339453..00000000
--- a/test/GpgCoreTestBasicOpera.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include <gtest/gtest.h>
-
-#include <string>
-#include <vector>
-
-#include "GpgFrontendTest.h"
-#include "gpg/GpgConstants.h"
-#include "gpg/function/GpgBasicOperator.h"
-#include "gpg/function/GpgKeyGetter.h"
-#include "gpg/result_analyse/GpgDecryptResultAnalyse.h"
-
-using namespace GpgFrontend;
-
-TEST_F(GpgCoreTest, CoreEncryptDecrTest) {
- auto encrypt_key = GpgKeyGetter::GetInstance(default_channel)
- .GetPubkey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1");
- ByteArray encrypt_text = "Hello GpgFrontend!";
- ByteArrayPtr encr_out_data;
- GpgEncrResult e_result;
- KeyListPtr keys = std::make_unique<KeyArgsList>();
- keys->push_back(std::move(encrypt_key));
- auto err =
- BasicOperator::GetInstance(default_channel)
- .Encrypt(std::move(keys), encrypt_text, encr_out_data, e_result);
- ASSERT_EQ(e_result->invalid_recipients, nullptr);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
-
- GpgDecrResult d_result;
- ByteArrayPtr decr_out_data;
- err = BasicOperator::GetInstance(default_channel)
- .Decrypt(*encr_out_data, decr_out_data, d_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_NE(d_result->recipients, nullptr);
- ASSERT_EQ(std::string(d_result->recipients->keyid), "F89C95A05088CC93");
- ASSERT_EQ(*decr_out_data, encrypt_text);
-}
-
-TEST_F(GpgCoreTest, CoreEncryptDecrTest_KeyNotFound_1) {
- ByteArrayPtr encr_out_data = std::make_unique<ByteArray>(
- "-----BEGIN PGP MESSAGE-----\n"
- "\n"
- "hQEMA6UM/S9sZ32MAQf9Fb6gp6nvgKTQBv2mmjXia6ODXYq6kNeLsPVzLCbHyWOs\n"
- "0GDED11R1NksA3EQxFf4fzLkDpbo68r5bWy7c28c99Fr68IRET19Tw6Gu65MQezD\n"
- "Rdzo1oVqmK9sfKqOT3+0S2H+suFYw5kfBztMZLVGGl9R9fOXdKcj0fqGs2br3e9D\n"
- "ArBFqq07Bae2DD1J8mckWB2x9Uem4vjRiY+vEJcEdAS1N5xu1n7qzzyDgcRcS34X\n"
- "PNBQeTrFMc2RS7mnip2DbyZVEjORobhguK6xZyqXXbvFacStGWDLptV3dcCn4JRO\n"
- "dIORyt5wugqAtgE4qEGTvr/pJ/oXPw4Wve/trece/9I/AR38vW8ntVmDa/hV75iZ\n"
- "4QGAhQ8grD4kq31GHXHUOmBX51XXW9SINmplC8elEx3R460EUZJjjb0OvTih+eZH\n"
- "=8n2H\n"
- "-----END PGP MESSAGE-----");
-
- GpgDecrResult d_result;
- ByteArrayPtr decr_out_data;
- auto err = BasicOperator::GetInstance(default_channel)
- .Decrypt(*encr_out_data, decr_out_data, d_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_SECKEY);
- ASSERT_NE(d_result->recipients, nullptr);
- ASSERT_EQ(std::string(d_result->recipients->keyid), "A50CFD2F6C677D8C");
-}
-
-TEST_F(GpgCoreTest, CoreEncryptDecrTest_KeyNotFound_ResultAnalyse) {
- ByteArrayPtr encr_out_data = std::make_unique<ByteArray>(
- "-----BEGIN PGP MESSAGE-----\n"
- "\n"
- "hQEMA6UM/S9sZ32MAQf9Fb6gp6nvgKTQBv2mmjXia6ODXYq6kNeLsPVzLCbHyWOs\n"
- "0GDED11R1NksA3EQxFf4fzLkDpbo68r5bWy7c28c99Fr68IRET19Tw6Gu65MQezD\n"
- "Rdzo1oVqmK9sfKqOT3+0S2H+suFYw5kfBztMZLVGGl9R9fOXdKcj0fqGs2br3e9D\n"
- "ArBFqq07Bae2DD1J8mckWB2x9Uem4vjRiY+vEJcEdAS1N5xu1n7qzzyDgcRcS34X\n"
- "PNBQeTrFMc2RS7mnip2DbyZVEjORobhguK6xZyqXXbvFacStGWDLptV3dcCn4JRO\n"
- "dIORyt5wugqAtgE4qEGTvr/pJ/oXPw4Wve/trece/9I/AR38vW8ntVmDa/hV75iZ\n"
- "4QGAhQ8grD4kq31GHXHUOmBX51XXW9SINmplC8elEx3R460EUZJjjb0OvTih+eZH\n"
- "=8n2H\n"
- "-----END PGP MESSAGE-----");
-
- GpgDecrResult d_result;
- ByteArrayPtr decr_out_data;
- auto err = BasicOperator::GetInstance(default_channel)
- .Decrypt(*encr_out_data, decr_out_data, d_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_SECKEY);
- ASSERT_NE(d_result->recipients, nullptr);
- ASSERT_EQ(std::string(d_result->recipients->keyid), "A50CFD2F6C677D8C");
-
- DecryptResultAnalyse analyse{err, d_result};
- analyse.analyse();
- ASSERT_EQ(analyse.getStatus(), -1);
- ASSERT_FALSE(analyse.getResultReport().empty());
-}
-
-TEST_F(GpgCoreTest, CoreSignVerifyNormalTest) {
- auto encrypt_key = GpgKeyGetter::GetInstance(default_channel)
- .GetPubkey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1");
- ByteArray sign_text = "Hello GpgFrontend!";
- ByteArrayPtr sign_out_data;
- GpgSignResult s_result;
- KeyListPtr keys = std::make_unique<KeyArgsList>();
- keys->push_back(std::move(encrypt_key));
- auto err = BasicOperator::GetInstance(default_channel)
- .Sign(std::move(keys), sign_text, sign_out_data,
- GPGME_SIG_MODE_NORMAL, s_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_EQ(s_result->invalid_signers, nullptr);
-
- GpgVerifyResult v_result;
- ByteArrayPtr sign_buff = nullptr;
- err = BasicOperator::GetInstance(default_channel)
- .Verify(*sign_out_data, sign_buff, v_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_NE(v_result->signatures, nullptr);
- ASSERT_EQ(std::string(v_result->signatures->fpr),
- "467F14220CE8DCF780CF4BAD8465C55B25C9B7D1");
- ASSERT_EQ(v_result->signatures->next, nullptr);
-}
-
-TEST_F(GpgCoreTest, CoreSignVerifyDetachTest) {
- auto encrypt_key = GpgKeyGetter::GetInstance(default_channel)
- .GetPubkey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1");
- ByteArray sign_text = "Hello GpgFrontend!";
- ByteArrayPtr sign_out_data;
- GpgSignResult s_result;
- KeyListPtr keys = std::make_unique<KeyArgsList>();
- keys->push_back(std::move(encrypt_key));
- auto err = BasicOperator::GetInstance(default_channel)
- .Sign(std::move(keys), sign_text, sign_out_data,
- GPGME_SIG_MODE_DETACH, s_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_EQ(s_result->invalid_signers, nullptr);
-
- GpgVerifyResult v_result;
- err = BasicOperator::GetInstance(default_channel)
- .Verify(sign_text, sign_out_data, v_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_NE(v_result->signatures, nullptr);
- ASSERT_EQ(std::string(v_result->signatures->fpr),
- "467F14220CE8DCF780CF4BAD8465C55B25C9B7D1");
- ASSERT_EQ(v_result->signatures->next, nullptr);
-}
-
-TEST_F(GpgCoreTest, CoreSignVerifyClearTest) {
- auto sign_key = GpgKeyGetter::GetInstance(default_channel)
- .GetKey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1");
- ByteArray sign_text = "Hello GpgFrontend!";
- ByteArrayPtr sign_out_data;
- GpgSignResult s_result;
- KeyListPtr keys = std::make_unique<KeyArgsList>();
- keys->push_back(std::move(sign_key));
- auto err = BasicOperator::GetInstance(default_channel)
- .Sign(std::move(keys), sign_text, sign_out_data,
- GPGME_SIG_MODE_CLEAR, s_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_EQ(s_result->invalid_signers, nullptr);
-
- GpgVerifyResult v_result;
- ByteArrayPtr sign_buff = nullptr;
- err = BasicOperator::GetInstance(default_channel)
- .Verify(*sign_out_data, sign_buff, v_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_NE(v_result->signatures, nullptr);
- ASSERT_EQ(std::string(v_result->signatures->fpr),
- "467F14220CE8DCF780CF4BAD8465C55B25C9B7D1");
- ASSERT_EQ(v_result->signatures->next, nullptr);
-}
-
-TEST_F(GpgCoreTest, CoreEncryptSignDecrVerifyTest) {
- auto encrypt_key = GpgKeyGetter::GetInstance(default_channel)
- .GetPubkey("467F14220CE8DCF780CF4BAD8465C55B25C9B7D1");
- auto sign_key = GpgKeyGetter::GetInstance(default_channel)
- .GetKey("8933EB283A18995F45D61DAC021D89771B680FFB");
- // Question?
- // ASSERT_FALSE(encrypt_key.is_private_key());
- ASSERT_TRUE(sign_key.is_private_key());
- ASSERT_TRUE(sign_key.CanSignActual());
- ByteArray encrypt_text = "Hello GpgFrontend!";
- ByteArrayPtr encr_out_data;
- GpgEncrResult e_result;
- GpgSignResult s_result;
-
- KeyListPtr keys = std::make_unique<KeyArgsList>(),
- sign_keys = std::make_unique<KeyArgsList>();
- keys->push_back(std::move(encrypt_key));
- sign_keys->push_back(std::move(sign_key));
-
- auto err = BasicOperator::GetInstance(default_channel)
- .EncryptSign(std::move(keys), std::move(sign_keys),
- encrypt_text, encr_out_data, e_result, s_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_EQ(e_result->invalid_recipients, nullptr);
- ASSERT_EQ(s_result->invalid_signers, nullptr);
-
- GpgDecrResult d_result;
- GpgVerifyResult v_result;
- ByteArrayPtr decr_out_data = nullptr;
- err = BasicOperator::GetInstance(default_channel)
- .DecryptVerify(*encr_out_data, decr_out_data, d_result, v_result);
- ASSERT_EQ(check_gpg_error_2_err_code(err), GPG_ERR_NO_ERROR);
- ASSERT_NE(d_result->recipients, nullptr);
- ASSERT_EQ(std::string(d_result->recipients->keyid), "F89C95A05088CC93");
- ASSERT_EQ(*decr_out_data, encrypt_text);
- ASSERT_NE(v_result->signatures, nullptr);
- ASSERT_EQ(std::string(v_result->signatures->fpr),
- "8933EB283A18995F45D61DAC021D89771B680FFB");
- ASSERT_EQ(v_result->signatures->next, nullptr);
-}
diff --git a/test/GpgCoreTestImportExport.cpp b/test/GpgCoreTestImportExport.cpp
deleted file mode 100644
index bef5660a..00000000
--- a/test/GpgCoreTestImportExport.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include <string>
-#include <vector>
-
-#include "GpgFrontendTest.h"
-#include "gpg/GpgConstants.h"
-#include "gpg/function/GpgKeyGetter.h"
-#include "gpg/function/GpgKeyImportExporter.h"
-#include "gpg/model/GpgKey.h"
-
-TEST_F(GpgCoreTest, CoreExportSecretTest) {} \ No newline at end of file
diff --git a/test/GpgCoreTestKeyModel.cpp b/test/GpgCoreTestKeyModel.cpp
deleted file mode 100644
index 9ab670f1..00000000
--- a/test/GpgCoreTestKeyModel.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "GpgFrontendTest.h"
-#include "gpg/function/GpgKeyGetter.h"
-
-TEST_F(GpgCoreTest, CoreInitTest) {
- auto& ctx = GpgFrontend::GpgContext::GetInstance(default_channel);
- auto& ctx_default = GpgFrontend::GpgContext::GetInstance();
- ASSERT_TRUE(ctx.good());
- ASSERT_TRUE(ctx_default.good());
-}
-
-TEST_F(GpgCoreTest, GpgDataTest) {
- auto data_buff = std::string(
- "cqEh8fyKWtmiXrW2zzlszJVGJrpXDDpzgP7ZELGxhfZYFi8rMrSVKDwrpFZBSWMG");
-
- GpgFrontend::GpgData data(data_buff.data(), data_buff.size());
-
- auto out_buffer = data.Read2Buffer();
- ASSERT_EQ(out_buffer->size(), 64);
-}
-
-TEST_F(GpgCoreTest, GpgKeyTest) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- ASSERT_TRUE(key.good());
- ASSERT_TRUE(key.is_private_key());
- ASSERT_TRUE(key.has_master_key());
-
- ASSERT_FALSE(key.disabled());
- ASSERT_FALSE(key.revoked());
-
- ASSERT_EQ(key.protocol(), "OpenPGP");
-
- ASSERT_EQ(key.subKeys()->size(), 2);
- ASSERT_EQ(key.uids()->size(), 1);
-
- ASSERT_TRUE(key.can_certify());
- ASSERT_TRUE(key.can_encrypt());
- ASSERT_TRUE(key.can_sign());
- ASSERT_FALSE(key.can_authenticate());
- ASSERT_TRUE(key.CanEncrActual());
- ASSERT_TRUE(key.CanEncrActual());
- ASSERT_TRUE(key.CanSignActual());
- ASSERT_FALSE(key.CanAuthActual());
-
- ASSERT_EQ(key.name(), "GpgFrontendTest");
- ASSERT_TRUE(key.comment().empty());
- ASSERT_EQ(key.email(), "[email protected]");
- ASSERT_EQ(key.id(), "81704859182661FB");
- ASSERT_EQ(key.fpr(), "9490795B78F8AFE9F93BD09281704859182661FB");
- ASSERT_EQ(key.expires(),
- boost::posix_time::from_iso_string("20230905T040000"));
- ASSERT_EQ(key.pubkey_algo(), "RSA");
- ASSERT_EQ(key.length(), 3072);
- ASSERT_EQ(key.last_update(),
- boost::posix_time::from_iso_string("19700101T000000"));
- ASSERT_EQ(key.create_time(),
- boost::posix_time::from_iso_string("20210905T060153"));
-
- ASSERT_EQ(key.owner_trust(), "Unknown");
-
- using namespace boost::posix_time;
- ASSERT_EQ(key.expired(), key.expires() < second_clock::local_time());
-}
-
-TEST_F(GpgCoreTest, GpgSubKeyTest) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- auto sub_keys = key.subKeys();
- ASSERT_EQ(sub_keys->size(), 2);
-
- auto& sub_key = sub_keys->back();
-
- ASSERT_FALSE(sub_key.revoked());
- ASSERT_FALSE(sub_key.disabled());
- ASSERT_EQ(sub_key.timestamp(),
- boost::posix_time::from_iso_string("20210905T060153"));
-
- ASSERT_FALSE(sub_key.is_cardkey());
- ASSERT_TRUE(sub_key.is_private_key());
- ASSERT_EQ(sub_key.id(), "2B36803235B5E25B");
- ASSERT_EQ(sub_key.fpr(), "50D37E8F8EE7340A6794E0592B36803235B5E25B");
- ASSERT_EQ(sub_key.length(), 3072);
- ASSERT_EQ(sub_key.pubkey_algo(), "RSA");
- ASSERT_FALSE(sub_key.can_certify());
- ASSERT_FALSE(sub_key.can_authenticate());
- ASSERT_FALSE(sub_key.can_sign());
- ASSERT_TRUE(sub_key.can_encrypt());
- ASSERT_EQ(key.expires(),
- boost::posix_time::from_iso_string("20230905T040000"));
-
- using namespace boost::posix_time;
- ASSERT_EQ(sub_key.expired(), sub_key.expires() < second_clock::local_time());
-}
-
-TEST_F(GpgCoreTest, GpgUIDTest) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- auto uids = key.uids();
- ASSERT_EQ(uids->size(), 1);
- auto& uid = uids->front();
-
- ASSERT_EQ(uid.name(), "GpgFrontendTest");
- ASSERT_TRUE(uid.comment().empty());
- ASSERT_EQ(uid.email(), "[email protected]");
- ASSERT_EQ(uid.uid(), "GpgFrontendTest <[email protected]>");
- ASSERT_FALSE(uid.invalid());
- ASSERT_FALSE(uid.revoked());
-}
-
-TEST_F(GpgCoreTest, GpgKeySignatureTest) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- auto uids = key.uids();
- ASSERT_EQ(uids->size(), 1);
- auto& uid = uids->front();
-
- auto signatures = uid.signatures();
- ASSERT_EQ(signatures->size(), 1);
- auto& signature = signatures->front();
-
- ASSERT_EQ(signature.name(), "GpgFrontendTest");
- ASSERT_TRUE(signature.comment().empty());
- ASSERT_EQ(signature.email(), "[email protected]");
- ASSERT_EQ(signature.keyid(), "81704859182661FB");
- ASSERT_EQ(signature.pubkey_algo(), "RSA");
-
- ASSERT_FALSE(signature.revoked());
- ASSERT_FALSE(signature.invalid());
- ASSERT_EQ(GpgFrontend::check_gpg_error_2_err_code(signature.status()),
- GPG_ERR_NO_ERROR);
- ASSERT_EQ(signature.uid(),
- "GpgFrontendTest <[email protected]>");
-}
-
-TEST_F(GpgCoreTest, GpgKeyGetterTest) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(default_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- ASSERT_TRUE(key.good());
- auto keys =
- GpgFrontend::GpgKeyGetter::GetInstance(default_channel).FetchKey();
- ASSERT_GE(keys->size(), secret_keys_.size());
- ASSERT_TRUE(find(keys->begin(), keys->end(), key) != keys->end());
-}
diff --git a/test/GpgCoreTestKeyModelAlone.cpp b/test/GpgCoreTestKeyModelAlone.cpp
deleted file mode 100644
index 88611eeb..00000000
--- a/test/GpgCoreTestKeyModelAlone.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "GpgFrontendTest.h"
-#include "gpg/function/GpgKeyGetter.h"
-
-TEST_F(GpgCoreTest, CoreInitTestAlone) {
- auto& ctx = GpgFrontend::GpgContext::GetInstance(gpg_alone_channel);
- ASSERT_TRUE(ctx.good());
-}
-
-TEST_F(GpgCoreTest, GpgDataTestAlone) {
- auto data_buff = std::string(
- "cqEh8fyKWtmiXrW2zzlszJVGJrpXDDpzgP7ZELGxhfZYFi8rMrSVKDwrpFZBSWMG");
-
- GpgFrontend::GpgData data(data_buff.data(), data_buff.size());
-
- auto out_buffer = data.Read2Buffer();
- ASSERT_EQ(out_buffer->size(), 64);
-}
-
-TEST_F(GpgCoreTest, GpgKeyFetchTestAlone) {
- auto keys =
- GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel).FetchKey();
- ASSERT_EQ(keys->size(), 4);
-}
-
-TEST_F(GpgCoreTest, GpgKeyTestAlone) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- ASSERT_TRUE(key.good());
- ASSERT_TRUE(key.is_private_key());
- ASSERT_TRUE(key.has_master_key());
-
- ASSERT_FALSE(key.disabled());
- ASSERT_FALSE(key.revoked());
-
- ASSERT_EQ(key.protocol(), "OpenPGP");
-
- ASSERT_EQ(key.subKeys()->size(), 2);
- ASSERT_EQ(key.uids()->size(), 1);
-
- ASSERT_TRUE(key.can_certify());
- ASSERT_TRUE(key.can_encrypt());
- ASSERT_TRUE(key.can_sign());
- ASSERT_FALSE(key.can_authenticate());
- ASSERT_TRUE(key.CanEncrActual());
- ASSERT_TRUE(key.CanEncrActual());
- ASSERT_TRUE(key.CanSignActual());
- ASSERT_FALSE(key.CanAuthActual());
-
- ASSERT_EQ(key.name(), "GpgFrontendTest");
- ASSERT_TRUE(key.comment().empty());
- ASSERT_EQ(key.email(), "[email protected]");
- ASSERT_EQ(key.id(), "81704859182661FB");
- ASSERT_EQ(key.fpr(), "9490795B78F8AFE9F93BD09281704859182661FB");
- ASSERT_EQ(key.expires(),
- boost::posix_time::from_iso_string("20230905T040000"));
- ASSERT_EQ(key.pubkey_algo(), "RSA");
- ASSERT_EQ(key.length(), 3072);
- ASSERT_EQ(key.last_update(),
- boost::posix_time::from_iso_string("19700101T000000"));
- ASSERT_EQ(key.create_time(),
- boost::posix_time::from_iso_string("20210905T060153"));
-
- ASSERT_EQ(key.owner_trust(), "Unknown");
-
- using namespace boost::posix_time;
- ASSERT_EQ(key.expired(), key.expires() < second_clock::local_time());
-}
-
-TEST_F(GpgCoreTest, GpgSubKeyTestAlone) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- auto sub_keys = key.subKeys();
- ASSERT_EQ(sub_keys->size(), 2);
-
- auto& sub_key = sub_keys->back();
-
- ASSERT_FALSE(sub_key.revoked());
- ASSERT_FALSE(sub_key.disabled());
- ASSERT_EQ(sub_key.timestamp(),
- boost::posix_time::from_iso_string("20210905T060153"));
-
- ASSERT_FALSE(sub_key.is_cardkey());
- ASSERT_TRUE(sub_key.is_private_key());
- ASSERT_EQ(sub_key.id(), "2B36803235B5E25B");
- ASSERT_EQ(sub_key.fpr(), "50D37E8F8EE7340A6794E0592B36803235B5E25B");
- ASSERT_EQ(sub_key.length(), 3072);
- ASSERT_EQ(sub_key.pubkey_algo(), "RSA");
- ASSERT_FALSE(sub_key.can_certify());
- ASSERT_FALSE(sub_key.can_authenticate());
- ASSERT_FALSE(sub_key.can_sign());
- ASSERT_TRUE(sub_key.can_encrypt());
- ASSERT_EQ(key.expires(),
- boost::posix_time::from_iso_string("20230905T040000"));
-
- using namespace boost::posix_time;
- ASSERT_EQ(sub_key.expired(), sub_key.expires() < second_clock::local_time());
-}
-
-TEST_F(GpgCoreTest, GpgUIDTestAlone) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- auto uids = key.uids();
- ASSERT_EQ(uids->size(), 1);
- auto& uid = uids->front();
-
- ASSERT_EQ(uid.name(), "GpgFrontendTest");
- ASSERT_TRUE(uid.comment().empty());
- ASSERT_EQ(uid.email(), "[email protected]");
- ASSERT_EQ(uid.uid(), "GpgFrontendTest <[email protected]>");
- ASSERT_FALSE(uid.invalid());
- ASSERT_FALSE(uid.revoked());
-}
-
-TEST_F(GpgCoreTest, GpgKeySignatureTestAlone) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- auto uids = key.uids();
- ASSERT_EQ(uids->size(), 1);
- auto& uid = uids->front();
-
- // No key signature support
- auto signatures = uid.signatures();
- ASSERT_EQ(signatures->size(), 0);
-}
-
-TEST_F(GpgCoreTest, GpgKeyGetterTestAlone) {
- auto key = GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel)
- .GetKey("9490795B78F8AFE9F93BD09281704859182661FB");
- ASSERT_TRUE(key.good());
- auto keys =
- GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel).FetchKey();
- ASSERT_GE(keys->size(), secret_keys_.size());
- ASSERT_TRUE(find(keys->begin(), keys->end(), key) != keys->end());
-}
diff --git a/test/GpgCoreTestKeygen.cpp b/test/GpgCoreTestKeygen.cpp
deleted file mode 100644
index 61e03e38..00000000
--- a/test/GpgCoreTestKeygen.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "GpgFrontendTest.h"
-#include "gpg/GpgGenKeyInfo.h"
-#include "gpg/function/GpgKeyGetter.h"
-#include "gpg/function/GpgKeyOpera.h"
-
-TEST_F(GpgCoreTest, GenerateKeyTest) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(default_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>();
- keygen_info->setName("foo");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("");
- keygen_info->setKeySize(1024);
- keygen_info->setAlgo("rsa");
- keygen_info->setNonExpired(true);
- keygen_info->setNonPassPhrase(true);
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(default_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-}
-
-TEST_F(GpgCoreTest, GenerateKeyTest_1) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(default_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>();
- keygen_info->setName("foo");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("hello gpgfrontend");
- keygen_info->setAlgo("rsa");
- keygen_info->setKeySize(4096);
- keygen_info->setNonExpired(false);
- keygen_info->setExpired(boost::posix_time::second_clock::local_time() +
- boost::posix_time::hours(24));
- keygen_info->setNonPassPhrase(false);
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(default_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-}
-
-TEST_F(GpgCoreTest, GenerateKeyTest_4) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(default_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>();
- keygen_info->setName("foo");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("");
- keygen_info->setAlgo("dsa");
- keygen_info->setNonExpired(true);
- keygen_info->setNonPassPhrase(false);
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(default_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-}
-
-TEST_F(GpgCoreTest, GenerateKeyTest_5) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(default_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>();
- keygen_info->setName("foo");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("");
- keygen_info->setAlgo("ed25519");
- keygen_info->setNonExpired(true);
- keygen_info->setNonPassPhrase(false);
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(default_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-}
diff --git a/test/GpgCoreTestKeygenAlone.cpp b/test/GpgCoreTestKeygenAlone.cpp
deleted file mode 100644
index 09a29f94..00000000
--- a/test/GpgCoreTestKeygenAlone.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#include "GpgFrontendTest.h"
-#include "gpg/GpgGenKeyInfo.h"
-#include "gpg/function/GpgKeyGetter.h"
-#include "gpg/function/GpgKeyOpera.h"
-
-TEST_F(GpgCoreTest, GenerateKeyTestAlone) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(gpg_alone_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>(false, true);
- keygen_info->setName("foobar");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("hello");
- keygen_info->setAlgo("rsa");
- keygen_info->setNonExpired(true);
- keygen_info->setNonPassPhrase(true);
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-}
-
-TEST_F(GpgCoreTest, GenerateKeyTestAlone_1) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(gpg_alone_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>(false, true);
- keygen_info->setName("foobar");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("hello gpgfrontend");
- keygen_info->setAlgo("rsa");
- keygen_info->setNonExpired(false);
- keygen_info->setPassPhrase("abcdefg");
- keygen_info->setExpired(boost::posix_time::second_clock::local_time() +
- boost::posix_time::hours(24));
- keygen_info->setNonPassPhrase(false);
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-}
-
-TEST_F(GpgCoreTest, GenerateKeyTestAlone_2) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(gpg_alone_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>(false, true);
- keygen_info->setName("foobar");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("hi");
- keygen_info->setAlgo("rsa");
- keygen_info->setKeySize(3072);
- keygen_info->setNonExpired(true);
- keygen_info->setNonPassPhrase(false);
- keygen_info->setPassPhrase("abcdefg");
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-}
-
-TEST_F(GpgCoreTest, GenerateKeyTestAlone_3) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(gpg_alone_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>(false, true);
- keygen_info->setName("foo");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("hello");
- keygen_info->setAlgo("rsa");
- keygen_info->setKeySize(4096);
- keygen_info->setNonExpired(true);
- keygen_info->setNonPassPhrase(false);
- keygen_info->setPassPhrase("abcdefg");
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-}
-
-TEST_F(GpgCoreTest, GenerateKeyTestAlone_4) {
- auto& key_opera = GpgFrontend::GpgKeyOpera::GetInstance(gpg_alone_channel);
- auto keygen_info = std::make_unique<GpgFrontend::GenKeyInfo>(false, true);
- keygen_info->setName("foobar");
- keygen_info->setEmail("[email protected]");
- keygen_info->setComment("hello");
- keygen_info->setAlgo("dsa");
- keygen_info->setNonExpired(true);
- keygen_info->setNonPassPhrase(false);
- keygen_info->setPassPhrase("abcdefg");
-
- GpgFrontend::GpgGenKeyResult result = nullptr;
- auto err = GpgFrontend::check_gpg_error_2_err_code(
- key_opera.GenerateKey(keygen_info, result));
- ASSERT_EQ(err, GPG_ERR_NO_ERROR);
-
- auto fpr = result->fpr;
- ASSERT_FALSE(fpr == nullptr);
-
- auto key =
- GpgFrontend::GpgKeyGetter::GetInstance(gpg_alone_channel).GetKey(fpr);
- ASSERT_TRUE(key.good());
- key_opera.DeleteKey(fpr);
-} \ No newline at end of file
diff --git a/test/GpgFrontendTest.h b/test/GpgFrontendTest.h
deleted file mode 100644
index ebd5e33a..00000000
--- a/test/GpgFrontendTest.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * Copyright (C) 2021 Saturneric
- *
- * This file is part of GpgFrontend.
- *
- * GpgFrontend is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GpgFrontend is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
- *
- * The initial version of the source code is inherited from
- * the gpg4usb project, which is under GPL-3.0-or-later.
- *
- * All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
- *
- * SPDX-License-Identifier: GPL-3.0-or-later
- *
- */
-
-#ifndef _GPGFRONTENDTEST_H
-#define _GPGFRONTENDTEST_H
-
-#include <easyloggingpp/easylogging++.h>
-#include <gpg-error.h>
-#include <gtest/gtest.h>
-
-#include <boost/date_time.hpp>
-#include <boost/dll.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-#include <libconfig.h++>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "gpg/GpgConstants.h"
-#include "gpg/function/GpgKeyImportExporter.h"
-#include "gpg/function/GpgKeyOpera.h"
-
-class GpgCoreTest : public ::testing::Test {
- protected:
- // Secret Keys Imported
- std::vector<GpgFrontend::StdBypeArrayPtr> secret_keys_;
-
- // Program Location
- boost::filesystem::path parent_path =
- boost::dll::program_location().parent_path();
-
- // Configure File Location
- boost::filesystem::path config_path = parent_path / "conf" / "core.cfg";
-
- // Data File Directory Location
- boost::filesystem::path data_path;
-
- const int default_channel = 0;
-
- const int gpg_alone_channel = 512;
-
- GpgCoreTest() = default;
-
- ~GpgCoreTest() override = default;
-
- void SetUp() override {
- el::Loggers::addFlag(el::LoggingFlag::AutoSpacing);
- el::Configurations defaultConf;
- defaultConf.setToDefault();
- el::Loggers::reconfigureLogger("default", defaultConf);
-
- defaultConf.setGlobally(el::ConfigurationType::Format,
- "%datetime %level %func %msg");
- el::Loggers::reconfigureLogger("default", defaultConf);
-
- using namespace libconfig;
- Config cfg;
- ASSERT_NO_THROW(cfg.readFile(config_path.c_str()));
- Setting& root = cfg.getRoot();
-
- if (root.exists("data_path")) {
- std::string relative_data_path;
- root.lookupValue("data_path", relative_data_path);
- data_path = parent_path / relative_data_path;
- };
-
- configure_independent_database(root);
-
- configure_alone_gpg(root);
-
- dealing_private_keys(root);
- import_data();
- import_data_alone();
- }
-
- void TearDown() override {
- auto key_ids = std::make_unique<GpgFrontend::KeyIdArgsList>();
- key_ids->push_back("81704859182661FB");
- key_ids->push_back("06F1C7E7240C94E8");
- key_ids->push_back("8465C55B25C9B7D1");
- key_ids->push_back("021D89771B680FFB");
- GpgFrontend::GpgKeyOpera::GetInstance(default_channel)
- .DeleteKeys(std::move(key_ids));
- }
-
- private:
- void import_data() {
- for (const auto& secret_key : secret_keys_) {
- auto secret_key_copy =
- std::make_unique<GpgFrontend::ByteArray>(*secret_key);
- GpgFrontend::GpgKeyImportExporter::GetInstance(default_channel)
- .ImportKey(std::move(secret_key_copy));
- }
- }
-
- void import_data_alone() {
- for (auto& secret_key : secret_keys_) {
- auto secret_key_copy =
- std::make_unique<GpgFrontend::ByteArray>(*secret_key);
- GpgFrontend::GpgKeyImportExporter::GetInstance(gpg_alone_channel)
- .ImportKey(std::move(secret_key_copy));
- }
- }
-
- void dealing_private_keys(const libconfig::Setting& root) {
- if (root.exists("load_keys.private_keys")) {
- auto& private_keys = root.lookup("load_keys.private_keys");
- for (auto it = private_keys.begin(); it != private_keys.end(); it++) {
- if (it->exists("filename")) {
- std::string filename;
- it->lookupValue("filename", filename);
- auto data_file_path = data_path / filename;
- std::string data =
- GpgFrontend::read_all_data_in_file(data_file_path.string());
- secret_keys_.push_back(std::make_unique<std::string>(data));
- }
- }
- }
- }
-
- void configure_alone_gpg(const libconfig::Setting& root) {
- bool alone_gpg = false;
- if (root.exists("alone_gpg")) {
- root.lookupValue("alone_gpg", alone_gpg);
- if (alone_gpg && root.exists("alone_gpg")) {
- std::string alone_gpg_path;
- root.lookupValue("alone_gpg_path", alone_gpg_path);
- auto gpg_path = parent_path / alone_gpg_path;
-
- std::string relative_db_path;
- root.lookupValue("alone_gpg_db_path", relative_db_path);
- auto db_path = parent_path / relative_db_path;
- if (!boost::filesystem::exists(db_path)) {
- boost::filesystem::create_directory(db_path);
- } else {
- boost::filesystem::remove_all(db_path);
- boost::filesystem::create_directory(db_path);
- }
- GpgFrontend::GpgContext::CreateInstance(
- gpg_alone_channel,
- [&]() -> std::unique_ptr<GpgFrontend::GpgContext> {
- GpgFrontend::GpgContextInitArgs args;
- args.gpg_alone = true;
- args.independent_database = true;
- args.db_path = db_path.u8string();
- args.gpg_path = gpg_path.u8string();
- args.test_mode = true;
- return std::make_unique<GpgFrontend::GpgContext>(args);
- });
- }
- }
- }
-
- void configure_independent_database(const libconfig::Setting& root) {
- bool independent_database = false;
- if (root.exists("independent_database")) {
- root.lookupValue("independent_database", independent_database);
- if (independent_database && root.exists("independent_db_path")) {
- std::string relative_db_path;
- root.lookupValue("independent_db_path", relative_db_path);
- auto db_path = parent_path / relative_db_path;
- if (!boost::filesystem::exists(db_path)) {
- boost::filesystem::create_directory(db_path);
- } else {
- boost::filesystem::remove_all(db_path);
- boost::filesystem::create_directory(db_path);
- }
-
- GpgFrontend::GpgContext::CreateInstance(
- default_channel, [&]() -> std::unique_ptr<GpgFrontend::GpgContext> {
- GpgFrontend::GpgContextInitArgs args;
- args.test_mode = true;
- return std::make_unique<GpgFrontend::GpgContext>(args);
- });
- }
- }
- }
-};
-
-#endif // _GPGFRONTENDTEST_H
diff --git a/test/conf/core.cfg b/test/conf/core.cfg
deleted file mode 100644
index 7a9b76d6..00000000
--- a/test/conf/core.cfg
+++ /dev/null
@@ -1,27 +0,0 @@
-# core test configuration file
-version = "1.0";
-independent_database = true;
-independent_db_path = "db";
-alone_gpg = true;
-alone_gpg_path = "gpg/gpg1";
-alone_gpg_db_path = "alone_db";
-data_path = "data";
-load_keys =
-{
- private_keys = (
- {
- filename = "pv1.key";
- md5 = "1d6ceb1aa836b582fa3750cb162ce90c";
- },{
- filename = "pv2.key";
- md5 = "ce52f1557a1d7e74c4f157fdf8f56d41";
- },{
- filename = "pv3.key";
- md5 = "ab7bc39ccb46ccdd71867a391f2d2306";
- },
- {
- filename = "pv4.key";
- md5 = "c88ff29f7c75fa118776a62313035442";
- }
- );
-}; \ No newline at end of file
diff --git a/test/data/pv1.key b/test/data/pv1.key
deleted file mode 100644
index 345fdf4f..00000000
--- a/test/data/pv1.key
+++ /dev/null
@@ -1,82 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-
-lQVYBGE0XVEBDADHYmnEbRB8hxqyQmaLmIRU71PTMZc162qWoWTMaPd7a8gQcQwc
-MUFYHp3mAmoHYUAKyT0lgpyj7UqGDdiAOt8z+nW6tR2Wu2xe6o0su/oK8qGtX37e
-bexiWcsMftrk/uR+l2G7JcCKMTAszLbyDgg1IaJ/SaVicKaO1CRjD5ZlNa2IQVOG
-bw0va1CevF6yw5rvc5r300p/kwcKX4taUyPaCT10ZxZnpZUhdsAIX5DfvWURoZ0q
-jy4JdQFlufhPzSJZ2VoCXn37FeXwEz1Vm8VzyVV70pPWN5osMcNBsRO4nr8cYIxo
-1PiErm3VdDUHPZ8dKKMlrLaGh3De3ohK47GSLDqBGg/FNnekRwNqBT+HLvfk5Kko
-lNsC7eyRSagI7IRY+KgjKNpT/9QUGYP9llTonQ2V58XarDFDy8SU/3yOqWaeu0Op
-A/fpqkp7JF3mGLXzKOZ4ueEOMkh+DsAOPTOQTcbYvnCz8jvHUPlSUqU1Y/7xU6BW
-rzgqajU563xoxCMAEQEAAQAL/2IGy5NsP8fJsOFlbf9B/AW6KM9TuVEkLiJitSke
-jlZa1mDnA5o0yTimzODR3QlF0fO7ntl7TsH1n0crNX9N8oEeqZUjCKob+Zrs3H3a
-6YNKaRzRL5HyH173YLIDCGG/w91NVhpp5DDNIC9WcretGHHu2HKWZb5xPiJIwJ8H
-gdy+uFOeMo+Mt8HRlDCG0lQ3gUwq3Uzsz9rLEZITCXNeHulK07EQId7RdPGf7afw
-PE0UU8WIXLoY7PxvT0GRXjj11AheEGNHcebirHbgbLWoevY/+h+r/yAdRns+S2l+
-PsShh6ki8bH7InI7L79v+021l89FfTZYixwscvwLBN4QWp6FLwqwDJjEHnZRxjCX
-Y5v7j9gHhhyK2vNbwU1vx/drx/cllIHfYOVRoZtxaAnfW0u51x/uKTknHBoL1GvW
-zrJHLMC4cHuPYAR6vS5sy7QcqVeB709mrTNVGHa0w6u4U8mlxpIQ/izdxy9k2sgV
-OAfZMxojIehGymu7LP0DP+ElUQYA2Rr5l81OIO9JCA+pg6B4ZigGYMvGDnBv9kuy
-lJWWV1O7jPMAfdK0lkehTpw/E4TkRk1t7PiQhXtGprYUAihdR2rx8DyDc438mhvw
-aN95MURkZ0v9U+04tPzHg/OTfkhNs/C6KfCxYpZD6I8lMZyIXX0BcjBPgl62EQCX
-QhU6zfF/1muGGQJ6tYvZ7Z/iMqwpqBzi0h5gCQcxSIhP4z8hdfT920LezUhibuqr
-HrTisZ1rQPPOJ1TxZYwaqKDOUy/rBgDrGrV7Z3k7EaKPEbL/C38FtZT+ZDFGvvPs
-4HVn/tRhVJPYsW5a0m6qSnd+NZqmKX2twv7IZK+DP3MQeNoJZj1MwDTW0lHDzNPp
-Ey3fO6+R4oFY4QbBFAqXLLAviAtAigwNJ87lgieeW5SQKluHdC82nqVzVyh89XaM
-nSe3niVtgIoimTELg5P5uWFcRA4dTENrSTuhKD09fzceSKlqrDVAmygwoQNuGr2t
-00mT+5Mzctf1cogNvTxE9EfmpPQT5qkGAOoSeWmg5MTAOJsc+A7kzu47COqGsldZ
-xejz9je45+XFRyE2ywH6EaJ8Fy8yzuLQVw8sRtCB/tC5nE5aKSlgwoJ0A1B8nLl9
-ANCC3gszj3uGKkf3ITqggtojkrJSFv4kndOqWtBe7GlM1FDyaTS3Va72NqUVLGOo
-tSVziTGqyXH90p52EKEffnl40/1AZjkRs6cQvvd0cGXoXodubRKm48CXOMJ+cXL5
-a205komAn1las2wOheK2HNsUQpV87Atk1t1ctC1HcGdGcm9udGVuZFRlc3QgPGdw
-Z2Zyb250ZW5kQGdwZ2Zyb250ZW5kLnB1Yj6JAdgEEwEIAEIWIQSUkHlbePiv6fk7
-0JKBcEhZGCZh+wUCYTRdUQIbAwUJA8JKbwULCQgHAgMiAgEGFQoJCAsCBBYCAwEC
-HgcCF4AACgkQgXBIWRgmYfsYpQwAow3gK+CGoyc/mQ60UbtCUlxJX6xN4palxY24
-cc7rbBhBJgp4oomPSCjiZjs6Wdiwmm5tC8M4chvfJ2Aw2xHL7W4DrPykKkvrhbRw
-S82eQyI3VMN6ED9EAGAmhaNME21gRvaUgI+qV7k753nqHTasXI2lB6UZryFbiPRH
-3BIjPx7msSvNaukVoTvBpHJ/Z9/u4M6TQCCLpQOgHN+0JHW/87O9YTycdqePBVj+
-pKEHJimebg2w8BWTYFpvusczlGcJdc97lXEV5gQTP/zq4SGNnvghlnjEFD7hRS/G
-NwQCd7IL56koCxPgvdLLQPTlsLYYo0myJr0ePjdOQWg7heOfdywqBn1pbH9MqpiP
-d5iNp9kDEAxnJ2H4ToeDF05hGdrfWr7G5yuGDTBiP4Rgr6DwE2gHN6ELzGMqH2Fg
-9x2sWgf25Z3bocXIzhZLVqA/YWbGtJLDlHiWVhrG20edgpb/KsvJUVcpy6mIM57l
-2Pk5LCmIZLdlsLY1Mx5IT5UDzUULnQVYBGE0XVEBDADS0miBA8Alwk2WCrF6vm1t
-5H9nXguOBrTIGntxoLQoUVwB5Ei+7Nrb+c7Y6aMNyEW/Xno28jdsSSwtqbEt2VLb
-rrshggqi4oPHDHu5qZUf/b3HNyNwJ6w1vdGryHVg/Vg5pKvyYveH/MVHunrCKUQ6
-imP4lTg8qL6Igq/qD5bOg8582LAxHwsIznpLVEqgN2eO6EGirlvhw0Qyw+CHFJbf
-bvyGyDcTRZPjOZRufDezsLvC30soL7ZQI6acX8Q18Hi6aXf4iAE2ZpPChzCBnFKw
-VHfB/MB4zOpphDvxZF53j0p7bZuIoG/aItUHZogrtap0YR45AjMQkHLwIiihL4cd
-CBxffooai10mW0gos/gutZfIxrrtGpURlSE18lICcFIYctSAt4gxIPpAVcN6bY/k
-aIaKpvaMtoLuCeBXN6y0sV8vBiVxpvSUZTfzfeOki7CQctdhJPWAELNzzFXvFjyx
-QHAkZgjNlft1zrOy7ODlXhNPRsFK3VwaZ6iE2f9Lr68AEQEAAQAL/1xpz1V+h2QF
-4Gy9Ez9y6hUZ7J8rInWHiweMVEBi6ZYi0+ogX6MRwH5c6sc64zbPa4OPrpMXaiQV
-j0AU+o3WjfOujGkL0A3GrW07k6C3LZ9wYxhIm0g2m86S/q4GmS2C4IGkJZuCtm7t
-5qyimd0yqa3frCLzhktQzPSaFPLNEpZEQOeJNPLTYMrjd8g9ktjYcJS8Ssk9FRnJ
-tsNqCaos5FXdGOUcLshL35/jRaWI3gHunt+1cgSTpZ9LgWVatW/PkNAmug3q94+M
-67A4vsjdqWfezXaJcSfgdPc5b5cznJoqbXX9N+Q/SYMBgCOFfYbFQpWB6/wbJww/
-Ibit5e2lD97Y4g2lO1QAJaDfvA/LCf49+SLmVN+rkYC+6Le7ygYFNRpvYik2NLY8
-EnnvEacjPfkCz5BJtP8JTceba/KdCLZQ4FN/vwGl7ykH0oN5TYcVE4CnURzK6Y/2
-jQ9tT+mKdDIpaNr7QCnCJcL2HFTOQ7IIHmhN6UJu3G9Uf5TfsdagwQYA14HVwvC2
-K4xmW8I9pqKrru+K2+CjNX5KqOgYM9h3Lfg/1Kr+OSIVrPm7zoEHeGXxH4C5Z5EF
-6eIB0QRgLbL0roS3dvxVF5cBdUbH5Ec/iOIlRD9RTO7QMW5dvHgr9/PWYs3znM+C
-h8wMGJ5Y/xbtwPu3++hmwFd79ghl2K+Mdopq8hAHvPCJ5USPfTjBhRU9ntv4C75U
-jBnzMGqN0Sbn9BLwmBx12jy8EMgcQovtUK9jeEjV/5WMeLgfBnjO1m31BgD6bzTP
-Y3z+aHEm2sWkwXTEuaQQm6dWrvbMrAw1kbcdnPZCSieHCQesmVnogNU2LH61AXVy
-NQ0lxVgHheC6rZHl2Eqv1whfmYVjCrC/jKSaokNjPdgSFl8tteZGm5FQto5j+lA9
-KEW2A6d0MjcrYSN9mVuKUCii0x1YcxT+6kMAi0UvDzADzLkckNX8i47oMLR6lRMN
-k6B/52EJ5tBBDzeu3rJWkeeZASNnWAKh1JQM6dplUXTO4SodJodXv0183JMF/A76
-mVjZOT79SBImVTdQyp0WRhYxJJKVQ3q6fHC47igQypZtPy0Itn8Ll0fu6FTPbWJ7
-Su/UuJKq/FDQ+jM/fhdZ7bfLsXssSl4opyBc1xtbDN0wdab1vy2OOgq1stdE2sr4
-BX65rUbdflsBNf/YxX+NfAmP1h8YCvPxoIVZOVDCCvbf8K/jKvautLt2op/8wwUj
-eHmkZSmBBWTKUdFlYD+T0IWe55lgvLWjrLGXnS41v0/a7WgYlOcgrZPI22qcQ+rT
-iQG8BBgBCAAmFiEElJB5W3j4r+n5O9CSgXBIWRgmYfsFAmE0XVECGwwFCQPCSm8A
-CgkQgXBIWRgmYftO8QwAxE+6jsIAlNzNKn9ScSuCBOPumtPzlAjADEymR3qxJ3N0
-7qnzOD3dwwSsX8S5P/aMfUm9KPleYebTwZ/iMM7MBZcxrSPwOhO9i8tnRRCqppC0
-EcSGSxDe5iP5xFiQkVvr524eVz04orW1ZgAwWh7L5m3GSjq5V77zUetOBHv9WAGL
-sPOMQAMZUQavL370gxnttR7cn0Of9TM3Ia5L6p0Yi7PD0QztnkkczjaDySSFpxzS
-XSTo+en5Nul0pY0kt/TBY7+il8lWxCUChEch/SAdnSocoYN+Bd1KQ/J+KUukl71m
-ZHz67G9t1qso7IH0SksB0dSpxwhs645rG605DlJKnUHgtwE46nnwR22YolcTbTCh
-tKmdMppPdabbL1gI/I+Jmh6Z+UDDKbl7uUKrz5vua/gxfySFqmNvcKO1ocjbKDcf
-cqEh8fyKWtmiXrW2zzlszJVGJrpXDDpzgP7ZELGxhfZYFi8rMrSVKDwrpFZBSWMG
-T2R+xoMRGcJJphKWpVjZ
-=u+uG
------END PGP PRIVATE KEY BLOCK----- \ No newline at end of file
diff --git a/test/data/pv2.key b/test/data/pv2.key
deleted file mode 100644
index 54bea6f5..00000000
--- a/test/data/pv2.key
+++ /dev/null
@@ -1,41 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-
-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
-VFT4TeJBu/bR1d3DxY8XrO5J8zc=
-=7sPJ
------END PGP PRIVATE KEY BLOCK----- \ No newline at end of file
diff --git a/test/data/pv3.key b/test/data/pv3.key
deleted file mode 100644
index 616bc4d8..00000000
--- a/test/data/pv3.key
+++ /dev/null
@@ -1,106 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-
-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
-s68=
-=u5ok
------END PGP PRIVATE KEY BLOCK-----
diff --git a/test/data/pv4.key b/test/data/pv4.key
deleted file mode 100644
index 8b79e893..00000000
--- a/test/data/pv4.key
+++ /dev/null
@@ -1,82 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-
-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
-T15m3mvre/E=
-=h5NI
------END PGP PRIVATE KEY BLOCK-----