diff options
| author | Andre Heinecke <[email protected]> | 2018-10-09 09:24:18 +0000 | 
|---|---|---|
| committer | Andre Heinecke <[email protected]> | 2018-10-09 09:24:18 +0000 | 
| commit | 9f85f4967e617e9f97529b89f530c1bc36b52a5c (patch) | |
| tree | d460d65fa9dc6159bca3c34abe4d976b894c87e7 /lang/cpp | |
| parent | core: Add trust-model flag (diff) | |
| download | gpgme-9f85f4967e617e9f97529b89f530c1bc36b52a5c.tar.gz gpgme-9f85f4967e617e9f97529b89f530c1bc36b52a5c.zip | |
cpp: Add first manual tests
* lang/cpp/Makefile.am: Add tests subdir.
* lang/cpp/tests/Makefile.am: New.
* lang/cpp/tests/README,
lang/cpp/tests/run-getkey.cpp,
lang/cpp/tests/run-keylist.cpp: New.
* configure.ac: Configure tests makefile.
--
The autotests for c++ live in lang/qt/tests these
tests are more for manual experiments to validate some
functionality.
Diffstat (limited to 'lang/cpp')
| -rw-r--r-- | lang/cpp/Makefile.am | 2 | ||||
| -rw-r--r-- | lang/cpp/tests/Makefile.am | 35 | ||||
| -rw-r--r-- | lang/cpp/tests/README | 4 | ||||
| -rw-r--r-- | lang/cpp/tests/run-getkey.cpp | 144 | ||||
| -rw-r--r-- | lang/cpp/tests/run-keylist.cpp | 151 | 
5 files changed, 335 insertions, 1 deletions
| diff --git a/lang/cpp/Makefile.am b/lang/cpp/Makefile.am index 026ca008..acfa0f9b 100644 --- a/lang/cpp/Makefile.am +++ b/lang/cpp/Makefile.am @@ -19,6 +19,6 @@  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  # 02111-1307, USA -SUBDIRS = src +SUBDIRS = src tests  EXTRA_DIST = README diff --git a/lang/cpp/tests/Makefile.am b/lang/cpp/tests/Makefile.am new file mode 100644 index 00000000..2b6e8fb6 --- /dev/null +++ b/lang/cpp/tests/Makefile.am @@ -0,0 +1,35 @@ +# Makefile.am - Makefile for GPGME Cpp tests. +# Copyright (C) 2018 Intevation GmbH +# +# This file is part of GPGME. +# +# GPGME is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# GPGME 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 Lesser General +# Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, see <http://www.gnu.org/licenses/>. + +## Process this file with automake to produce Makefile.in + +AM_LDFLAGS = -no-install + +LDADD = ../../cpp/src/libgpgmepp.la \ +        ../../../src/libgpgme.la @GPG_ERROR_LIBS@ \ +        -lstdc++ + +AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/src \ +              @GPG_ERROR_CFLAGS@ @GPG_ERROR_CFLAGS@ \ +              @LIBASSUAN_CFLAGS@ -DBUILDING_GPGMEPP \ +              -DTOP_SRCDIR="$(top_srcdir)" + +run_getkey_SOURCES = run-getkey.cpp +run_keylist_SOURCES = run-keylist.cpp + +noinst_PROGRAMS = run-getkey run-keylist diff --git a/lang/cpp/tests/README b/lang/cpp/tests/README new file mode 100644 index 00000000..ac74ab00 --- /dev/null +++ b/lang/cpp/tests/README @@ -0,0 +1,4 @@ +Tests for the C++ bindings. + +Most autotests for the C++ bindings use the QTest framework +and live in lang/qt/tests. diff --git a/lang/cpp/tests/run-getkey.cpp b/lang/cpp/tests/run-getkey.cpp new file mode 100644 index 00000000..35b15eb2 --- /dev/null +++ b/lang/cpp/tests/run-getkey.cpp @@ -0,0 +1,144 @@ +/* +    run-getkey.cpp + +    This file is part of GpgMEpp's test suite. +    Copyright (c) 2018 Intevation GmbH + +    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 "context.h" +#include "key.h" + +#include <memory> +#include <sstream> +#include <iostream> + +using namespace GpgME; + +static int +show_usage (int ex) +{ +  fputs ("usage: run-getkey [options] [keyIdOrFingerprint]\n\n" +         "Options:\n" +         "  --verbose        run in verbose mode\n" +         "  --openpgp        use the OpenPGP protocol (default)\n" +         "  --cms            use the CMS protocol\n" +         "  --secret         list only secret keys\n" +         "  --with-secret    list pubkeys with secret info filled\n" +         "  --local          use GPGME_KEYLIST_MODE_LOCAL\n" +         "  --extern         use GPGME_KEYLIST_MODE_EXTERN\n" +         "  --sigs           use GPGME_KEYLIST_MODE_SIGS\n" +         "  --tofu           use GPGME_KEYLIST_MODE_TOFU\n" +         "  --sig-notations  use GPGME_KEYLIST_MODE_SIG_NOTATIONS\n" +         "  --ephemeral      use GPGME_KEYLIST_MODE_EPHEMERAL\n" +         "  --validate       use GPGME_KEYLIST_MODE_VALIDATE\n" +         "  --locate         use GPGME_KEYLIST_MODE_LOCATE\n" +         , stderr); +  exit (ex); +} + +int +main (int argc, char **argv) +{ +    int last_argc = -1; +    Protocol protocol = OpenPGP; +    unsigned int mode = 0; +    bool only_secret = false; + +    if (argc) { +        argc--; argv++; +    } + +    while (argc && last_argc != argc ) { +        last_argc = argc; +        if (!strcmp (*argv, "--")) { +            argc--; argv++; +            break; +        } else if (!strcmp (*argv, "--help")) { +            show_usage (0); +        } else if (!strcmp (*argv, "--openpgp")) { +            protocol = OpenPGP; +            argc--; argv++; +        } else if (!strcmp (*argv, "--cms")) { +            protocol = CMS; +            argc--; argv++; +        } else if (!strcmp (*argv, "--secret")) { +            only_secret = true; +            argc--; argv++; +        } else if (!strcmp (*argv, "--local")) { +            mode |= KeyListMode::Local; +            argc--; argv++; +        } else if (!strcmp (*argv, "--extern")) { +            mode |= KeyListMode::Extern; +            argc--; argv++; +        }else if (!strcmp (*argv, "--tofu")) { +            mode |= KeyListMode::WithTofu; +            argc--; argv++; +        } else if (!strcmp (*argv, "--sigs")) { +            mode |= KeyListMode::Signatures; +            argc--; argv++; +        } else if (!strcmp (*argv, "--sig-notations")) { +            mode |= KeyListMode::SignatureNotations; +            argc--; argv++; +        } else if (!strcmp (*argv, "--ephemeral")) { +            mode |= KeyListMode::Ephemeral; +            argc--; argv++; +        } else if (!strcmp (*argv, "--validate")) { +            mode |= KeyListMode::Validate; +            argc--; argv++; +        } else if (!strcmp (*argv, "--locate")) { +            argc--; argv++; +            mode |= KeyListMode::Locate; +        } else if (!strncmp (*argv, "--", 2)) { +            show_usage (1); +        } +    } + +    if (argc != 1) { +        show_usage (1); +    } + +    GpgME::initializeLibrary(); +    auto ctx = std::unique_ptr<Context> (Context::createForProtocol(protocol)); +    if (!ctx) { +        std::cerr << "Failed to get Context"; +        return -1; +    } +    ctx->setKeyListMode (mode); +    Error err; +    const GpgME::Key key = ctx->key (*argv, err, only_secret); +    std::stringstream ss; + +    ss << "Key " << key << " Err: " << err.asString() << "\n"; + +    std::cout << ss.str(); + +    return 0; +} diff --git a/lang/cpp/tests/run-keylist.cpp b/lang/cpp/tests/run-keylist.cpp new file mode 100644 index 00000000..54577396 --- /dev/null +++ b/lang/cpp/tests/run-keylist.cpp @@ -0,0 +1,151 @@ +/* +    run-keylist.cpp + +    This file is part of GpgMEpp's test suite. +    Copyright (c) 2018 Intevation GmbH + +    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 "context.h" +#include "key.h" +#include "keylistresult.h" + +#include <memory> +#include <sstream> +#include <iostream> + +using namespace GpgME; + +static int +show_usage (int ex) +{ +  fputs ("usage: run-keylist [options] [pattern]\n\n" +         "Options:\n" +         "  --verbose        run in verbose mode\n" +         "  --openpgp        use the OpenPGP protocol (default)\n" +         "  --cms            use the CMS protocol\n" +         "  --secret         list only secret keys\n" +         "  --with-secret    list pubkeys with secret info filled\n" +         "  --local          use GPGME_KEYLIST_MODE_LOCAL\n" +         "  --extern         use GPGME_KEYLIST_MODE_EXTERN\n" +         "  --sigs           use GPGME_KEYLIST_MODE_SIGS\n" +         "  --tofu           use GPGME_KEYLIST_MODE_TOFU\n" +         "  --sig-notations  use GPGME_KEYLIST_MODE_SIG_NOTATIONS\n" +         "  --ephemeral      use GPGME_KEYLIST_MODE_EPHEMERAL\n" +         "  --validate       use GPGME_KEYLIST_MODE_VALIDATE\n" +         "  --locate         use GPGME_KEYLIST_MODE_LOCATE\n" +         , stderr); +  exit (ex); +} + +int +main (int argc, char **argv) +{ +    int last_argc = -1; +    Protocol protocol = OpenPGP; +    unsigned int mode = 0; +    bool only_secret = false; + +    if (argc) { +        argc--; argv++; +    } + +    while (argc && last_argc != argc ) { +        last_argc = argc; +        if (!strcmp (*argv, "--")) { +            argc--; argv++; +            break; +        } else if (!strcmp (*argv, "--help")) { +            show_usage (0); +        } else if (!strcmp (*argv, "--openpgp")) { +            protocol = OpenPGP; +            argc--; argv++; +        } else if (!strcmp (*argv, "--cms")) { +            protocol = CMS; +            argc--; argv++; +        } else if (!strcmp (*argv, "--secret")) { +            only_secret = true; +            argc--; argv++; +        } else if (!strcmp (*argv, "--local")) { +            mode |= KeyListMode::Local; +            argc--; argv++; +        } else if (!strcmp (*argv, "--extern")) { +            mode |= KeyListMode::Extern; +            argc--; argv++; +        }else if (!strcmp (*argv, "--tofu")) { +            mode |= KeyListMode::WithTofu; +            argc--; argv++; +        } else if (!strcmp (*argv, "--sigs")) { +            mode |= KeyListMode::Signatures; +            argc--; argv++; +        } else if (!strcmp (*argv, "--sig-notations")) { +            mode |= KeyListMode::SignatureNotations; +            argc--; argv++; +        } else if (!strcmp (*argv, "--ephemeral")) { +            mode |= KeyListMode::Ephemeral; +            argc--; argv++; +        } else if (!strcmp (*argv, "--validate")) { +            mode |= KeyListMode::Validate; +            argc--; argv++; +        } else if (!strcmp (*argv, "--locate")) { +            argc--; argv++; +            mode |= KeyListMode::Locate; +        } else if (!strncmp (*argv, "--", 2)) { +            show_usage (1); +        } +    } + +    if (argc > 1) { +        show_usage (1); +    } + +    GpgME::initializeLibrary(); +    auto ctx = std::unique_ptr<Context> (Context::createForProtocol(protocol)); +    if (!ctx) { +        std::cerr << "Failed to get Context"; +        return -1; +    } +    ctx->setKeyListMode (mode); +    Error err = ctx->startKeyListing (*argv, only_secret); +    if (err) { +        std::cout << "Error: " << err.asString() << "\n"; +        return -1; +    } +    GpgME::Key key; +    std::stringstream ss; +    do { +        key = ctx->nextKey(err); +        ss << key << "\n\n"; +    } while (!err && !key.isNull()); + +    std::cout << ss.str(); + +    return 0; +} | 
