3 # This testcase simply checks that the DHT command-line tools work.
4 # It launches a single peer, stores a value "testdata" under "testkey",
5 # and then gives the system 50 ms to fetch it.
8 # - command line tool interfaces fail
9 # - DHT plugins for storage are not installed / working
10 # - block plugins for verification (the test plugin) is not installed
12 # The code does NOT depend on DHT routing or any actual P2P functionality.
14 from __future__ import print_function
24 tmp = os.getenv ("TEMP")
29 get = './gnunet-dht-get.exe'
30 put = './gnunet-dht-put.exe'
31 arm = 'gnunet-arm.exe'
33 get = './gnunet-dht-get'
34 put = './gnunet-dht-put'
37 tf, tempcfg = tempfile.mkstemp (prefix='test_dht_api_peer1.')
40 run_get = [get, '-c', tempcfg]
41 run_put = [put, '-c', tempcfg]
42 run_arm = [arm, '-c', tempcfg]
43 debug = os.getenv ('DEBUG')
45 run_arm += [debug.split (' ')]
47 def cleanup (exitcode):
51 def sub_run (args, want_stdo = True, want_stde = False, nofail = False):
53 stdo = subprocess.PIPE
57 stde = subprocess.PIPE
60 p = subprocess.Popen (args, stdout = stdo, stderr = stde)
61 stdo, stde = p.communicate ()
64 sys.exit (p.returncode)
65 return (p.returncode, stdo, stde)
69 r_arm (['-e'], want_stdo = False)
72 def r_something (to_run, extra_args, failer = None, normal = True, **kw):
73 rc, stdo, stde = sub_run (to_run + extra_args, nofail = True, **kw)
74 if failer is not None:
75 failer (to_run + extra_args, rc, stdo, stde, normal)
76 return (rc, stdo, stde)
78 def r_arm (extra_args, **kw):
79 return r_something (run_arm, extra_args, **kw)
81 def r_get (extra_args, **kw):
82 return r_something (run_get, extra_args, **kw)
84 def r_put (extra_args, **kw):
85 return r_something (run_put, extra_args, **kw)
87 def end_arm_failer (command, rc, stdo, stde, normal):
90 fail ("FAIL: error running {}\nCommand output was:\n{}\n{}".format (command, stdo, stde))
93 fail ("FAIL: expected error while running {}\nCommand output was:\n{}\n{}".format (command, stdo, stde))
95 def print_only_failer (command, rc, stdo, stde, normal):
98 print ("FAIL: error running {}\nCommand output was:\n{}\n{}".format (command, stdo, stde))
102 print ("FAIL: expected error while running {}\nCommand output was:\n{}\n{}".format (command, stdo, stde))
105 shutil.copyfile ('test_dht_api_peer1.conf', tempcfg)
107 print ("TEST: Starting ARM...", end='')
108 r_arm (['-s'], failer = end_arm_failer, want_stdo = False, want_stde = False)
112 print ("TEST: Testing put...", end='')
113 r_put (['-k', 'testkey', '-d', 'testdata', '-t', '8'], failer = end_arm_failer)
117 print ("TEST: Testing get...", end='')
118 rc, stdo, stde = r_get (['-k', 'testkey', '-T', '50 ms', '-t', '8'], want_stdo = True, failer = end_arm_failer)
119 stdo = stdo.replace ('\r', '').splitlines ()
120 expect = "Result 0, type 8:\ntestdata".splitlines()
121 if len (stdo) != 2 or len (expect) != 2 or stdo[0] != expect[0] or stdo[1] != expect[1]:
122 fail ("output `{}' differs from expected `{}'".format (stdo, expect))
125 r_arm (['-e', '-d'], failer = print_only_failer)