Merge branch 'license/spdx'
[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 from __future__ import print_function
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([config, '-c', TEST_CONFIGURATION, '-s', 'PATHS', '-o', 'GNUNET_HOME', '-f'], stdout=subprocess.PIPE)
43 cleandir, x = get_clean.communicate()
44 cleandir = cleandir.decode("utf-8")
45 cleandir = cleandir.rstrip('\n').rstrip('\r')
46
47 if os.path.isdir(cleandir):
48     shutil.rmtree(cleandir, True)
49
50 res = 0
51 arm = subprocess.Popen([gnunetarm, '-s', '-c', TEST_CONFIGURATION])
52 arm.communicate()
53
54 try:
55     print("Creating an ego " + TEST_REVOCATION_EGO)
56     sys.stdout.flush()
57     sys.stderr.flush()
58     idc = subprocess.Popen([ident, '-C', TEST_REVOCATION_EGO, '-c', TEST_CONFIGURATION])
59     idc.communicate()
60     if idc.returncode != 0:
61         raise Exception("gnunet-identity failed to create an ego `" + TEST_REVOCATION_EGO + "'")
62
63     sys.stdout.flush()
64     sys.stderr.flush()
65     idd = subprocess.Popen([ident, '-d'], stdout=subprocess.PIPE)
66     rev_key, x = idd.communicate()
67     rev_key = rev_key.decode("utf-8")
68     if len(rev_key.split()) < 3:
69         raise Exception("can't get revocation key out of `" + rev_key + "'")
70     rev_key = rev_key.split()[2]
71
72     print("Testing key " + rev_key)
73     sys.stdout.flush()
74     sys.stderr.flush()
75     tst = subprocess.Popen([revoc, '-t', rev_key, '-c', TEST_CONFIGURATION], stdout=subprocess.PIPE)
76     output_not_revoked, x = tst.communicate()
77     output_not_revoked = output_not_revoked.decode("utf-8")
78     if tst.returncode != 0:
79         raise Exception("gnunet-revocation failed to test a key - " + str(tst.returncode) + ": " + output_not_revoked)
80     if 'valid' not in output_not_revoked:
81         res = 1
82         print("Key was not valid")
83     else:
84         print("Key was valid")
85
86     print("Revoking key " + rev_key)
87     sys.stdout.flush()
88     sys.stderr.flush()
89     rev = subprocess.Popen([revoc, '-R', TEST_REVOCATION_EGO, '-p', '-c', TEST_CONFIGURATION])
90     rev.communicate()
91     if rev.returncode != 0:
92         raise Exception("gnunet-revocation failed to revoke a key")
93
94     print("Testing revoked key " + rev_key)
95     sys.stdout.flush()
96     sys.stderr.flush()
97     tst = subprocess.Popen([revoc, '-t', rev_key, '-c', TEST_CONFIGURATION], stdout=subprocess.PIPE)
98     output_revoked, x = tst.communicate()
99     output_revoked = output_revoked.decode("utf-8")
100     if tst.returncode != 0:
101         raise Exception("gnunet-revocation failed to test a revoked key")
102     if 'revoked' not in output_revoked:
103         res = 1
104         print("Key was not revoked")
105     else:
106         print("Key was revoked")
107
108 finally:
109     arm = subprocess.Popen([gnunetarm, '-e', '-c', TEST_CONFIGURATION])
110     arm.communicate()
111     if os.path.isdir(cleandir):
112         shutil.rmtree(cleandir, True)
113
114 sys.exit(res)