qt: Handle if gpg does not support tofu in test
[gpgme.git] / lang / python / tests / t-protocol-assuan.py
1 #!/usr/bin/env python
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 from __future__ import absolute_import, print_function, unicode_literals
21 del absolute_import, print_function, unicode_literals
22
23 import gpg
24
25 with gpg.Context(protocol=gpg.constants.protocol.ASSUAN) as c:
26     # Do nothing.
27     err = c.assuan_transact('nop')
28     assert err == None
29     err = c.assuan_transact(b'NOP')
30     assert err == None
31     err = c.assuan_transact(['NOP'])
32     assert err == None
33
34     err = c.assuan_transact('idontexist')
35     assert err.getsource() == gpg.errors.SOURCE_GPGAGENT
36     assert err.getcode() == gpg.errors.ASS_UNKNOWN_CMD
37
38     # Invoke the pinentry to get a confirmation.
39     c.assuan_transact(['GET_CONFIRMATION', 'Hello there'])
40
41     data = []
42     def data_cb(line):
43         data.append(line)
44
45     err = c.assuan_transact(['GETINFO', 'version'], data_cb=data_cb)
46     assert not err
47     assert len(data) == 1
48
49     data = []
50     err = c.assuan_transact(['GETINFO', 's2k_count'], data_cb=data_cb)
51     if not err:
52         assert len(data) == 1
53         assert int(data[0]) > 0
54
55     # XXX HELP sends status lines if we could use ASSUAN_CONVEY_COMMENTS.
56
57     status = []
58     def status_cb(line, args):
59         status.append((line, args))
60
61     alphas_grip = '76F7E2B35832976B50A27A282D9B87E44577EB66'
62     err = c.assuan_transact(['KEYINFO', alphas_grip], status_cb=status_cb)
63     if not err:
64         assert len(status) == 1
65         line, args = status[0]
66         assert line.startswith('KEYINFO')
67         assert args.startswith(alphas_grip)
68
69     # XXX: test these callbacks, e.g. using PRESET_PASSPHRASE
70     # XXX: once issue2428 is resolved
71     def inq_cb(name, args):
72         print("inq_cb", name, args)