format python
[oweals/gnunet.git] / src / revocation / test_local_revocation.py.in
1 #!@PYTHON@
2 #    This file is part of GNUnet.
3 #    (C) 2010, 2018 Christian Grothoff (and other contributing authors)
4 #
5 #    GNUnet is free software: you can redistribute it and/or modify it
6 #    under the terms of the GNU Affero General Public License as published
7 #    by the Free Software Foundation, either version 3 of the License,
8 #    or (at your option) any later version.
9 #
10 #    GNUnet is distributed in the hope that it will be useful, but
11 #    WITHOUT ANY WARRANTY; without even the implied warranty of
12 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 #    Affero General Public License for more details.
14 #
15 #    You should have received a copy of the GNU Affero General Public License
16 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #
18 #    SPDX-License-Identifier: AGPL3.0-or-later
19 #
20 # Testcase for ego revocation
21
22 import sys
23 import os
24 import subprocess
25 import re
26 import shutil
27
28 if os.name == 'posix':
29     config = 'gnunet-config'
30     gnunetarm = 'gnunet-arm'
31     ident = 'gnunet-identity'
32     revoc = './gnunet-revocation'
33 elif os.name == 'nt':
34     config = 'gnunet-config.exe'
35     gnunetarm = 'gnunet-arm.exe'
36     ident = 'gnunet-identity.exe'
37     revoc = './gnunet-revocation.exe'
38
39 TEST_CONFIGURATION = "test_revocation.conf"
40 TEST_REVOCATION_EGO = "revoc_test"
41
42 get_clean = subprocess.Popen([
43     config, '-c', TEST_CONFIGURATION, '-s', 'PATHS', '-o', 'GNUNET_HOME', '-f'
44 ],
45                              stdout=subprocess.PIPE)
46 cleandir, x = get_clean.communicate()
47 cleandir = cleandir.decode("utf-8")
48 cleandir = cleandir.rstrip('\n').rstrip('\r')
49
50 if os.path.isdir(cleandir):
51     shutil.rmtree(cleandir, True)
52
53 res = 0
54 arm = subprocess.Popen([gnunetarm, '-s', '-c', TEST_CONFIGURATION])
55 arm.communicate()
56
57 try:
58     print("Creating an ego " + TEST_REVOCATION_EGO)
59     sys.stdout.flush()
60     sys.stderr.flush()
61     idc = subprocess.Popen([
62         ident, '-C', TEST_REVOCATION_EGO, '-c', TEST_CONFIGURATION
63     ])
64     idc.communicate()
65     if idc.returncode != 0:
66         raise Exception(
67             "gnunet-identity failed to create an ego `" + TEST_REVOCATION_EGO +
68             "'"
69         )
70
71     sys.stdout.flush()
72     sys.stderr.flush()
73     idd = subprocess.Popen([ident, '-d'], stdout=subprocess.PIPE)
74     rev_key, x = idd.communicate()
75     rev_key = rev_key.decode("utf-8")
76     if len(rev_key.split()) < 3:
77         raise Exception("can't get revocation key out of `" + rev_key + "'")
78     rev_key = rev_key.split()[2]
79
80     print("Testing key " + rev_key)
81     sys.stdout.flush()
82     sys.stderr.flush()
83     tst = subprocess.Popen([revoc, '-t', rev_key, '-c', TEST_CONFIGURATION],
84                            stdout=subprocess.PIPE)
85     output_not_revoked, x = tst.communicate()
86     output_not_revoked = output_not_revoked.decode("utf-8")
87     if tst.returncode != 0:
88         raise Exception(
89             "gnunet-revocation failed to test a key - " + str(tst.returncode) +
90             ": " + output_not_revoked
91         )
92     if 'valid' not in output_not_revoked:
93         res = 1
94         print("Key was not valid")
95     else:
96         print("Key was valid")
97
98     print("Revoking key " + rev_key)
99     sys.stdout.flush()
100     sys.stderr.flush()
101     rev = subprocess.Popen([
102         revoc, '-R', TEST_REVOCATION_EGO, '-p', '-c', TEST_CONFIGURATION
103     ])
104     rev.communicate()
105     if rev.returncode != 0:
106         raise Exception("gnunet-revocation failed to revoke a key")
107
108     print("Testing revoked key " + rev_key)
109     sys.stdout.flush()
110     sys.stderr.flush()
111     tst = subprocess.Popen([revoc, '-t', rev_key, '-c', TEST_CONFIGURATION],
112                            stdout=subprocess.PIPE)
113     output_revoked, x = tst.communicate()
114     output_revoked = output_revoked.decode("utf-8")
115     if tst.returncode != 0:
116         raise Exception("gnunet-revocation failed to test a revoked key")
117     if 'revoked' not in output_revoked:
118         res = 1
119         print("Key was not revoked")
120     else:
121         print("Key was revoked")
122
123 finally:
124     arm = subprocess.Popen([gnunetarm, '-e', '-c', TEST_CONFIGURATION])
125     arm.communicate()
126     if os.path.isdir(cleandir):
127         shutil.rmtree(cleandir, True)
128
129 sys.exit(res)