python: Port more tests.
[gpgme.git] / lang / python / tests / t-sig-notation.py
1 #!/usr/bin/env python3
2
3 # Copyright (C) 2016 g10 Code GmbH
4 #
5 # This file is part of GPGME.
6 #
7 # GPGME is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11 #
12 # GPGME is distributed in the hope that it will be useful, but WITHOUT
13 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
15 # Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this program; if not, see <http://www.gnu.org/licenses/>.
19
20 import os
21 from pyme import core, constants, errors
22 import support
23
24 expected_notations = {
25     "laughing@me": ("Just Squeeze Me", constants.SIG_NOTATION_HUMAN_READABLE),
26     "preferred-email-encoding@pgp.com": ("pgpmime",
27                                          constants.SIG_NOTATION_HUMAN_READABLE
28                                          | constants.SIG_NOTATION_CRITICAL),
29     None: ("http://www.gnu.org/policy/", 0),
30 }
31
32 def check_result(result):
33     assert len(result.signatures) == 1, "Unexpected number of signatures"
34     sig = result.signatures[0]
35     assert len(sig.notations) == len(expected_notations)
36
37     for r in sig.notations:
38         assert not 'name_len' in dir(r)
39         assert not 'value_len' in dir(r)
40         assert r.name in expected_notations
41         value, flags = expected_notations.pop(r.name)
42
43         assert r.value == value, \
44             "Expected {!r}, got {!r}".format(value, r.value)
45         assert r.human_readable \
46             == bool(flags&constants.SIG_NOTATION_HUMAN_READABLE)
47         # xxx notyet
48         #assert r.human_readable \
49         #    == bool(flags&constants.SIG_NOTATION_CRITICAL)
50
51     assert len(expected_notations) == 0
52
53 support.init_gpgme(constants.PROTOCOL_OpenPGP)
54
55 source = core.Data("Hallo Leute\n")
56 signed = core.Data()
57
58 c = core.Context()
59 for name, (value, flags) in expected_notations.items():
60     c.sig_notation_add(name, value, flags)
61
62 c.op_sign(source, signed, constants.SIG_MODE_NORMAL)
63
64 signed.seek(0, os.SEEK_SET)
65 sink = core.Data()
66 c.op_verify(signed, None, sink)
67 result = c.op_verify_result()
68 check_result(result)