Merge branch 'master' of ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / revocation / test_local_revocation.py.in
1 #!@PYTHON@
2 #    This file is part of GNUnet.
3 #    (C) 2010 Christian Grothoff (and other contributing authors)
4 #
5 #    GNUnet is free software; you can redistribute it and/or modify
6 #    it under the terms of the GNU General Public License as published
7 #    by the Free Software Foundation; either version 2, or (at your
8 #    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 #    General Public License for more details.
14 #
15 #    You should have received a copy of the GNU General Public License
16 #    along with GNUnet; see the file COPYING.  If not, write to the
17 #    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 #    Boston, MA 02110-1301, USA.
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
43 get_clean = subprocess.Popen ([config, '-c', TEST_CONFIGURATION, '-s', 'PATHS', '-o', 'GNUNET_HOME', '-f'], stdout=subprocess.PIPE)
44 cleandir, x = get_clean.communicate ()
45 cleandir = cleandir.decode("utf-8")
46 cleandir = cleandir.rstrip ('\n').rstrip ('\r')
47
48 if os.path.isdir (cleandir):
49   shutil.rmtree (cleandir, True)
50
51 res = 0
52 arm = subprocess.Popen ([gnunetarm, '-s', '-c', TEST_CONFIGURATION])
53 arm.communicate ()
54
55 try:
56   print ("Creating an ego " + TEST_REVOCATION_EGO)
57   sys.stdout.flush ()
58   sys.stderr.flush ()
59   idc = subprocess.Popen ([ident, '-C', TEST_REVOCATION_EGO, '-c', TEST_CONFIGURATION])
60   idc.communicate ()
61   if idc.returncode != 0:
62     raise Exception ("gnunet-identity failed to create an ego `" + TEST_REVOCATION_EGO + "'")
63
64   sys.stdout.flush ()
65   sys.stderr.flush ()
66   idd = subprocess.Popen ([ident, '-d'], stdout=subprocess.PIPE)
67   rev_key, x = idd.communicate ()
68   rev_key = rev_key.decode("utf-8")
69   if len (rev_key.split ()) < 3:
70     raise Exception ("can't get revocation key out of `" + rev_key + "'")
71   rev_key = rev_key.split ()[2]
72
73   print ("Testing key " + rev_key)
74   sys.stdout.flush ()
75   sys.stderr.flush ()
76   tst = subprocess.Popen ([revoc, '-t', rev_key, '-c', TEST_CONFIGURATION], stdout=subprocess.PIPE)
77   output_not_revoked, x = tst.communicate ()
78   output_not_revoked = output_not_revoked.decode("utf-8")
79   if tst.returncode != 0:
80     raise Exception ("gnunet-revocation failed to test a key - " + str (tst.returncode) + ": " + output_not_revoked)
81   if 'valid' not in output_not_revoked:
82     res = 1
83     print ("Key was not valid")
84   else:
85     print ("Key was valid")
86
87   print ("Revoking key " + rev_key)
88   sys.stdout.flush ()
89   sys.stderr.flush ()
90   rev = subprocess.Popen ([revoc, '-R', TEST_REVOCATION_EGO, '-p', '-c', TEST_CONFIGURATION])
91   rev.communicate ()
92   if rev.returncode != 0:
93     raise Exception ("gnunet-revocation failed to revoke a key")
94
95   print ("Testing revoked key " + rev_key)
96   sys.stdout.flush ()
97   sys.stderr.flush ()
98   tst = subprocess.Popen ([revoc, '-t', rev_key, '-c', TEST_CONFIGURATION], stdout=subprocess.PIPE)
99   output_revoked, x = tst.communicate ()
100   output_revoked = output_revoked.decode("utf-8")
101   if tst.returncode != 0:
102     raise Exception ("gnunet-revocation failed to test a revoked key")
103   if 'revoked' not in output_revoked:
104     res = 1
105     print ("Key was not revoked")
106   else:
107     print ("Key was revoked")
108
109 finally:
110   arm = subprocess.Popen ([gnunetarm, '-e', '-c', TEST_CONFIGURATION])
111   arm.communicate ()
112   if os.path.isdir (cleandir):
113     shutil.rmtree (cleandir, True)
114
115 sys.exit (res)