From 3915842657f0849a038752fd7445f96081a89dd9 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Fri, 27 May 2016 15:58:23 +0200 Subject: [PATCH] python: Port more tests. * lang/python/pyme/core.py (Data._error_check): Add 'gpgme_data_get_file_name' to the list of functions not returning an error code. * lang/python/tests/Makefile.am (pytests): Add new tests. * lang/python/tests/support.py (verbose): New variable. * lang/python/tests/t-data.py: Test setting and getting the filename. * lang/python/tests/t-encrypt-large.py: New file. * lang/python/tests/t-file-name.py: Likewise. * lang/python/tests/t-trustlist.py: Likewise. Signed-off-by: Justus Winter --- lang/python/pyme/core.py | 11 ++--- lang/python/tests/Makefile.am | 5 ++- lang/python/tests/support.py | 3 +- lang/python/tests/t-data.py | 4 ++ lang/python/tests/t-encrypt-large.py | 63 ++++++++++++++++++++++++++++ lang/python/tests/t-file-name.py | 42 +++++++++++++++++++ lang/python/tests/t-trustlist.py | 34 +++++++++++++++ 7 files changed, 155 insertions(+), 7 deletions(-) create mode 100755 lang/python/tests/t-encrypt-large.py create mode 100755 lang/python/tests/t-file-name.py create mode 100755 lang/python/tests/t-trustlist.py diff --git a/lang/python/pyme/core.py b/lang/python/pyme/core.py index e89c1812..cc262c95 100644 --- a/lang/python/pyme/core.py +++ b/lang/python/pyme/core.py @@ -363,11 +363,12 @@ class Data(GpgmeWrapper): def _errorcheck(self, name): """This function should list all functions returning gpgme_error_t""" - if name == 'gpgme_data_release_and_get_mem' or \ - name == 'gpgme_data_get_encoding' or \ - name == 'gpgme_data_seek': - return 0 - return 1 + return name not in { + 'gpgme_data_release_and_get_mem', + 'gpgme_data_get_encoding', + 'gpgme_data_seek', + 'gpgme_data_get_file_name', + } def __init__(self, string=None, file=None, offset=None, length=None, cbs=None, copy=True): diff --git a/lang/python/tests/Makefile.am b/lang/python/tests/Makefile.am index 7df40a2d..0bc8c7f8 100644 --- a/lang/python/tests/Makefile.am +++ b/lang/python/tests/Makefile.am @@ -39,8 +39,11 @@ py_tests = t-wrapper.py \ t-signers.py \ t-decrypt.py \ t-export.py \ + t-trustlist.py \ t-edit.py \ - t-wait.py + t-wait.py \ + t-encrypt-large.py \ + t-file-name.py TESTS = $(top_srcdir)/tests/gpg/initial.test \ $(py_tests) \ diff --git a/lang/python/tests/support.py b/lang/python/tests/support.py index a57d5816..99d96cf6 100644 --- a/lang/python/tests/support.py +++ b/lang/python/tests/support.py @@ -26,7 +26,8 @@ def init_gpgme(proto): core.check_version() core.engine_check_version(proto) +verbose = int(os.environ.get('verbose', 0)) > 1 def print_data(data): - if int(os.environ.get('verbose', 0)) > 1: + if verbose: data.seek(0, os.SEEK_SET) sys.stdout.buffer.write(data.read()) diff --git a/lang/python/tests/t-data.py b/lang/python/tests/t-data.py index de60c473..3774f09d 100755 --- a/lang/python/tests/t-data.py +++ b/lang/python/tests/t-data.py @@ -52,6 +52,10 @@ data.write(binjunk) data.seek(0, os.SEEK_SET) assert data.read() == binjunk +data = core.Data() +data.set_file_name("foobar") +assert data.get_file_name() == "foobar" + # Test reading from an existing file. with tempfile.NamedTemporaryFile() as tmp: tmp.write(binjunk) diff --git a/lang/python/tests/t-encrypt-large.py b/lang/python/tests/t-encrypt-large.py new file mode 100755 index 00000000..69aed483 --- /dev/null +++ b/lang/python/tests/t-encrypt-large.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2016 g10 Code 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 General Public License as published by +# the Free Software Foundation; either version 2 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 . + +import sys +import random +from pyme import core, constants +import support + +if len(sys.argv) == 2: + nbytes = int(sys.argv[1]) +else: + nbytes = 100000 + +support.init_gpgme(constants.PROTOCOL_OpenPGP) +c = core.Context() + +ntoread = nbytes +def read_cb(amount): + global ntoread + chunk = ntoread if ntoread < amount else amount + ntoread -= chunk + assert ntoread >= 0 + assert chunk >= 0 + return bytes(random.randrange(256) for i in range(chunk)) + +nwritten = 0 +def write_cb(data): + global nwritten + nwritten += len(data) + return len(data) + +source = core.Data(cbs=(read_cb, None, None, lambda: None)) +sink = core.Data(cbs=(None, write_cb, None, lambda: None)) + +keys = [] +keys.append(c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False)) +keys.append(c.get_key("D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", False)) + +c.op_encrypt(keys, constants.ENCRYPT_ALWAYS_TRUST, source, sink) +result = c.op_encrypt_result() +assert not result.invalid_recipients, \ + "Invalid recipient encountered: {}".format(result.invalid_recipients.fpr) +assert ntoread == 0 + +if support.verbose: + sys.stderr.write( + "plaintext={} bytes, ciphertext={} bytes\n".format(nbytes, nwritten)) diff --git a/lang/python/tests/t-file-name.py b/lang/python/tests/t-file-name.py new file mode 100755 index 00000000..6f9294eb --- /dev/null +++ b/lang/python/tests/t-file-name.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2016 g10 Code 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 General Public License as published by +# the Free Software Foundation; either version 2 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 . + +import os +from pyme import core, constants +import support + +testname = "abcde12345" + +support.init_gpgme(constants.PROTOCOL_OpenPGP) +c = core.Context() +c.set_armor(True) + +source = core.Data("Hallo Leute\n") +source.set_file_name(testname) +cipher = core.Data() +plain = core.Data() + +keys = [] +keys.append(c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False)) + +c.op_encrypt(keys, constants.ENCRYPT_ALWAYS_TRUST, source, cipher) +cipher.seek(0, os.SEEK_SET) +c.op_decrypt(cipher, plain) +result = c.op_decrypt_result() +assert result.file_name == testname diff --git a/lang/python/tests/t-trustlist.py b/lang/python/tests/t-trustlist.py new file mode 100755 index 00000000..61f8fa52 --- /dev/null +++ b/lang/python/tests/t-trustlist.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2016 g10 Code 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 General Public License as published by +# the Free Software Foundation; either version 2 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 . + +from pyme import core, constants +import support + +support.init_gpgme(constants.PROTOCOL_OpenPGP) +c = core.Context() +c.op_trustlist_start("alice", 0) + +while True: + item = c.op_trustlist_next() + if not item: + break + + print("l={} k={} t={} o={} v={} u={}".format( + item.level, item.keyid, item.type, item.owner_trust, + item.validity, item.name))