python: Port more tests.
authorJustus Winter <justus@gnupg.org>
Fri, 27 May 2016 13:58:23 +0000 (15:58 +0200)
committerJustus Winter <justus@gnupg.org>
Fri, 27 May 2016 15:24:12 +0000 (17:24 +0200)
* 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 <justus@gnupg.org>
lang/python/pyme/core.py
lang/python/tests/Makefile.am
lang/python/tests/support.py
lang/python/tests/t-data.py
lang/python/tests/t-encrypt-large.py [new file with mode: 0755]
lang/python/tests/t-file-name.py [new file with mode: 0755]
lang/python/tests/t-trustlist.py [new file with mode: 0755]

index e89c181..cc262c9 100644 (file)
@@ -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):
index 7df40a2..0bc8c7f 100644 (file)
@@ -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) \
index a57d581..99d96cf 100644 (file)
@@ -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())
index de60c47..3774f09 100755 (executable)
@@ -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 (executable)
index 0000000..69aed48
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+
+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 (executable)
index 0000000..6f9294e
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+
+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 (executable)
index 0000000..61f8fa5
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+
+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))