11912So.canty@f5.comimport glob 21735Szelenkov@nginx.comimport os 31735Szelenkov@nginx.comimport socket 41772Szelenkov@nginx.comimport subprocess 51735Szelenkov@nginx.comimport time 61735Szelenkov@nginx.com 71735Szelenkov@nginx.comimport pytest 81735Szelenkov@nginx.com 91735Szelenkov@nginx.com 101735Szelenkov@nginx.comdef public_dir(path): 111735Szelenkov@nginx.com os.chmod(path, 0o777) 121735Szelenkov@nginx.com 131735Szelenkov@nginx.com for root, dirs, files in os.walk(path): 141735Szelenkov@nginx.com for d in dirs: 152257Szelenkov@nginx.com try: 162257Szelenkov@nginx.com os.chmod(os.path.join(root, d), 0o777) 172257Szelenkov@nginx.com except FileNotFoundError: 182257Szelenkov@nginx.com pass 191735Szelenkov@nginx.com for f in files: 202257Szelenkov@nginx.com try: 212257Szelenkov@nginx.com os.chmod(os.path.join(root, f), 0o777) 222257Szelenkov@nginx.com except FileNotFoundError: 232257Szelenkov@nginx.com pass 241735Szelenkov@nginx.com 251735Szelenkov@nginx.com 261912So.canty@f5.comdef waitforfiles(*files, timeout=50): 27*2477Szelenkov@nginx.com for _ in range(timeout): 281735Szelenkov@nginx.com wait = False 291735Szelenkov@nginx.com 301735Szelenkov@nginx.com for f in files: 311735Szelenkov@nginx.com if not os.path.exists(f): 321735Szelenkov@nginx.com wait = True 331735Szelenkov@nginx.com break 341735Szelenkov@nginx.com 351735Szelenkov@nginx.com if not wait: 361735Szelenkov@nginx.com return True 371735Szelenkov@nginx.com 381735Szelenkov@nginx.com time.sleep(0.1) 391735Szelenkov@nginx.com 401735Szelenkov@nginx.com return False 411735Szelenkov@nginx.com 421735Szelenkov@nginx.com 431912So.canty@f5.comdef waitforglob(pattern, count=1, timeout=50): 44*2477Szelenkov@nginx.com for _ in range(timeout): 451912So.canty@f5.com n = 0 461912So.canty@f5.com 47*2477Szelenkov@nginx.com for _ in glob.glob(pattern): 481912So.canty@f5.com n += 1 491912So.canty@f5.com 501912So.canty@f5.com if n == count: 511912So.canty@f5.com return True 521912So.canty@f5.com 531912So.canty@f5.com time.sleep(0.1) 541912So.canty@f5.com 551912So.canty@f5.com return False 561912So.canty@f5.com 571912So.canty@f5.com 581735Szelenkov@nginx.comdef waitforsocket(port): 59*2477Szelenkov@nginx.com for _ in range(50): 601735Szelenkov@nginx.com with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: 611735Szelenkov@nginx.com try: 621735Szelenkov@nginx.com sock.settimeout(5) 631735Szelenkov@nginx.com sock.connect(('127.0.0.1', port)) 641735Szelenkov@nginx.com return 651735Szelenkov@nginx.com 661735Szelenkov@nginx.com except ConnectionRefusedError: 671735Szelenkov@nginx.com time.sleep(0.1) 681735Szelenkov@nginx.com 691735Szelenkov@nginx.com except KeyboardInterrupt: 701735Szelenkov@nginx.com raise 711735Szelenkov@nginx.com 722330Szelenkov@nginx.com pytest.fail(f"Can't connect to the 127.0.0.1:{port}") 731735Szelenkov@nginx.com 741740Szelenkov@nginx.com 752264Szelenkov@nginx.comdef check_findmnt(): 761772Szelenkov@nginx.com try: 772264Szelenkov@nginx.com return subprocess.check_output( 781772Szelenkov@nginx.com ['findmnt', '--raw'], stderr=subprocess.STDOUT 791772Szelenkov@nginx.com ).decode() 801772Szelenkov@nginx.com except FileNotFoundError: 812264Szelenkov@nginx.com return False 822264Szelenkov@nginx.com 832264Szelenkov@nginx.com 842264Szelenkov@nginx.comdef findmnt(): 852264Szelenkov@nginx.com out = check_findmnt() 862264Szelenkov@nginx.com 872264Szelenkov@nginx.com if not out: 881772Szelenkov@nginx.com pytest.skip('requires findmnt') 891772Szelenkov@nginx.com 901772Szelenkov@nginx.com return out 911772Szelenkov@nginx.com 921772Szelenkov@nginx.com 931912So.canty@f5.comdef waitformount(template, timeout=50): 94*2477Szelenkov@nginx.com for _ in range(timeout): 951772Szelenkov@nginx.com if findmnt().find(template) != -1: 961772Szelenkov@nginx.com return True 971772Szelenkov@nginx.com 981772Szelenkov@nginx.com time.sleep(0.1) 991772Szelenkov@nginx.com 1001772Szelenkov@nginx.com return False 1011772Szelenkov@nginx.com 1021772Szelenkov@nginx.com 1031912So.canty@f5.comdef waitforunmount(template, timeout=50): 104*2477Szelenkov@nginx.com for _ in range(timeout): 1051772Szelenkov@nginx.com if findmnt().find(template) == -1: 1061772Szelenkov@nginx.com return True 1071772Szelenkov@nginx.com 1081772Szelenkov@nginx.com time.sleep(0.1) 1091772Szelenkov@nginx.com 1101772Szelenkov@nginx.com return False 1111772Szelenkov@nginx.com 1121772Szelenkov@nginx.com 1131740Szelenkov@nginx.comdef getns(nstype): 1141740Szelenkov@nginx.com # read namespace id from symlink file: 1151740Szelenkov@nginx.com # it points to: '<nstype>:[<ns id>]' 1161740Szelenkov@nginx.com # # eg.: 'pid:[4026531836]' 1172330Szelenkov@nginx.com nspath = f'/proc/self/ns/{nstype}' 1181740Szelenkov@nginx.com data = None 1191740Szelenkov@nginx.com 1201740Szelenkov@nginx.com if os.path.exists(nspath): 1211740Szelenkov@nginx.com data = int(os.readlink(nspath)[len(nstype) + 2 : -1]) 1221740Szelenkov@nginx.com 1231740Szelenkov@nginx.com return data 124