diff options
author | Ingo Klöcker <[email protected]> | 2021-12-22 11:25:40 +0000 |
---|---|---|
committer | Ingo Klöcker <[email protected]> | 2021-12-22 14:25:42 +0000 |
commit | f99451e20fd2f84ac653aa6021a475026a9d4dc9 (patch) | |
tree | 7a3079e685b50f6f9fba82a6f8ac13fbce295c55 /lang/qt/tests/run-importjob.cpp | |
parent | cpp: Check fpr of import status for NULL (diff) | |
download | gpgme-f99451e20fd2f84ac653aa6021a475026a9d4dc9.tar.gz gpgme-f99451e20fd2f84ac653aa6021a475026a9d4dc9.zip |
qt,tests: Add test runner for testing the import job
* lang/qt/tests/Makefile.am (run_importjob_SOURCES): New.
(noinst_PROGRAMS): Add run-importjob.
* lang/qt/tests/run-importjob.cpp: New.
--
GnuPG-bug-id: 5713
Diffstat (limited to 'lang/qt/tests/run-importjob.cpp')
-rw-r--r-- | lang/qt/tests/run-importjob.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/lang/qt/tests/run-importjob.cpp b/lang/qt/tests/run-importjob.cpp new file mode 100644 index 00000000..b1814fa0 --- /dev/null +++ b/lang/qt/tests/run-importjob.cpp @@ -0,0 +1,99 @@ +/* + run-importjob.cpp + + This file is part of QGpgME's test suite. + Copyright (c) 2021 by g10 Code GmbH + Software engineering by Ingo Klöcker <[email protected]> + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + QGpgME 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 this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include <importjob.h> +#include <importresult.h> +#include <protocol.h> + +#include <QFile> +#include <QFileInfo> + +#include <QDebug> + +#include <set> +#include <sstream> + +GpgME::Protocol guessProtocol(const QString &filename) +{ + static const std::set<QString> cmsExtensions = {"cer", "crt", "der", "p12", "p7c", "pem", "pfx"}; + static const std::set<QString> pgpExtensions = {"asc", "gpg", "pgp"}; + + const auto extension = QFileInfo{filename}.suffix(); + if (cmsExtensions.find(extension) != cmsExtensions.end()) { + return GpgME::CMS; + } else if (pgpExtensions.find(extension) != pgpExtensions.end()) { + return GpgME::OpenPGP; + } + qDebug() << "Unknown file name extension" << extension; + return GpgME::UnknownProtocol; +} + +int main(int argc, char **argv) +{ + GpgME::initializeLibrary(); + + if (argc != 2) { + qInfo().noquote() << "Usage:" << argv[0] << "<certificate file>"; + return 1; + } + const auto filename = QString::fromLocal8Bit(argv[1]); + + QFile f{filename}; + if (!f.exists()) { + qWarning() << "Error: File not found" << filename; + return 1; + } + const auto protocol = guessProtocol(filename); + if (protocol == GpgME::UnknownProtocol) { + qWarning() << "Error: Unknown file type"; + return 1; + } + if (!f.open(QIODevice::ReadOnly)) { + qWarning() << "Error: Failed to open file" << filename << "for reading."; + return 1; + } + + const auto keyData = f.readAll(); + auto job = (protocol == GpgME::CMS ? QGpgME::smime() : QGpgME::openpgp())->importJob(); + const auto result = job->exec(keyData); + qDebug() << "Result error:" << result.error().asString(); + std::ostringstream ostr; + ostr << result; + for (const auto &line : QString::fromStdString(ostr.str()).split('\n')) { + qDebug().noquote() << line; + } + return 0; +} |