#!@PYTHONEXE@ import os import sys import shutil import re import subprocess import time # FIXME: There's too much repetition, move generally used parts into reusable modules. if os.name == "nt": tmp = os.getenv("TEMP") else: tmp = "/tmp" if os.name == 'nt': st = 'gnunet-statistics.exe' arm = './gnunet-arm.exe' else: st = 'gnunet-statistics' arm = './gnunet-arm' run_arm = [arm, '-c', 'test_arm_api_data.conf', '--no-stdout', '--no-stderr'] debug = os.getenv('DEBUG') if debug: run_arm += [debug.split(' ')] def cleanup(): shutil.rmtree(os.path.join(tmp, "test-gnunetd-arm"), True) def sub_run(args, want_stdo=True, want_stde=False, nofail=False): if want_stdo: stdo = subprocess.PIPE else: stdo = None if want_stde: stde = subprocess.PIPE else: stde = None p = subprocess.Popen(args, stdout=stdo, stderr=stde) stdo, stde = p.communicate() if not nofail: if p.returncode != 0: sys.exit(p.returncode) return (p.returncode, stdo, stde) def fail(result): print(result) r_arm(['-e'], want_stdo=False) sys.exit(1) def end_arm_failer(command, rc, stdo, stde, normal): if normal: if rc != 0: fail( "FAIL: error running {}\nCommand output was:\n{}\n{}".format( command, stdo, stde ) ) else: if rc == 0: fail( "FAIL: expected error while running {}\nCommand output was:\n{}\n{}" .format(command, stdo, stde) ) def print_only_failer(command, rc, stdo, stde, normal): if normal: if rc != 0: print( "FAIL: error running {}\nCommand output was:\n{}\n{}".format( command, stdo, stde ) ) sys.exit(1) else: if rc == 0: print( "FAIL: expected error while running {}\nCommand output was:\n{}\n{}" .format(command, stdo, stde) ) sys.exit(1) def r_something(to_run, extra_args, failer=None, normal=True, **kw): rc, stdo, stde = sub_run( to_run + extra_args, nofail=True, want_stde=True, **kw ) if failer is not None: failer(to_run + extra_args, rc, stdo, stde, normal) return (rc, stdo, stde) def r_arm(extra_args, **kw): return r_something(run_arm, extra_args, **kw) cleanup() print("TEST: Bad argument checking...", end='') r_arm(['-x'], normal=False, failer=print_only_failer) print("PASS") print("TEST: Start ARM...", end='') r_arm(['-s'], failer=print_only_failer) time.sleep(1) print("PASS") print("TEST: Start another service...", end='') r_arm(['-i', 'resolver'], failer=end_arm_failer) time.sleep(1) print("PASS") print("TEST: Stop a service...", end='') r_arm(['-k', 'resolver'], failer=end_arm_failer) time.sleep(1) print("PASS") print("TEST: Stop ARM...", end='') r_arm(['-e'], failer=print_only_failer) time.sleep(1) print("PASS") cleanup()