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): 271912So.canty@f5.com for i 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): 441912So.canty@f5.com for i in range(timeout): 451912So.canty@f5.com n = 0 461912So.canty@f5.com 471912So.canty@f5.com for f 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): 591735Szelenkov@nginx.com for i 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 721803Szelenkov@nginx.com pytest.fail('Can\'t connect to the 127.0.0.1:' + str(port)) 731735Szelenkov@nginx.com 741740Szelenkov@nginx.com 75*2264Szelenkov@nginx.comdef check_findmnt(): 761772Szelenkov@nginx.com try: 77*2264Szelenkov@nginx.com return subprocess.check_output( 781772Szelenkov@nginx.com ['findmnt', '--raw'], stderr=subprocess.STDOUT 791772Szelenkov@nginx.com ).decode() 801772Szelenkov@nginx.com except FileNotFoundError: 81*2264Szelenkov@nginx.com return False 82*2264Szelenkov@nginx.com 83*2264Szelenkov@nginx.com 84*2264Szelenkov@nginx.comdef findmnt(): 85*2264Szelenkov@nginx.com out = check_findmnt() 86*2264Szelenkov@nginx.com 87*2264Szelenkov@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 931877Szelenkov@nginx.comdef sysctl(): 941877Szelenkov@nginx.com try: 951877Szelenkov@nginx.com out = subprocess.check_output( 961877Szelenkov@nginx.com ['sysctl', '-a'], stderr=subprocess.STDOUT 971877Szelenkov@nginx.com ).decode() 981877Szelenkov@nginx.com except FileNotFoundError: 991877Szelenkov@nginx.com pytest.skip('requires sysctl') 1001877Szelenkov@nginx.com 1011877Szelenkov@nginx.com return out 1021877Szelenkov@nginx.com 1031877Szelenkov@nginx.com 1041912So.canty@f5.comdef waitformount(template, timeout=50): 1051912So.canty@f5.com for i in range(timeout): 1061772Szelenkov@nginx.com if findmnt().find(template) != -1: 1071772Szelenkov@nginx.com return True 1081772Szelenkov@nginx.com 1091772Szelenkov@nginx.com time.sleep(0.1) 1101772Szelenkov@nginx.com 1111772Szelenkov@nginx.com return False 1121772Szelenkov@nginx.com 1131772Szelenkov@nginx.com 1141912So.canty@f5.comdef waitforunmount(template, timeout=50): 1151912So.canty@f5.com for i in range(timeout): 1161772Szelenkov@nginx.com if findmnt().find(template) == -1: 1171772Szelenkov@nginx.com return True 1181772Szelenkov@nginx.com 1191772Szelenkov@nginx.com time.sleep(0.1) 1201772Szelenkov@nginx.com 1211772Szelenkov@nginx.com return False 1221772Szelenkov@nginx.com 1231772Szelenkov@nginx.com 1241740Szelenkov@nginx.comdef getns(nstype): 1251740Szelenkov@nginx.com # read namespace id from symlink file: 1261740Szelenkov@nginx.com # it points to: '<nstype>:[<ns id>]' 1271740Szelenkov@nginx.com # # eg.: 'pid:[4026531836]' 1281740Szelenkov@nginx.com nspath = '/proc/self/ns/' + nstype 1291740Szelenkov@nginx.com data = None 1301740Szelenkov@nginx.com 1311740Szelenkov@nginx.com if os.path.exists(nspath): 1321740Szelenkov@nginx.com data = int(os.readlink(nspath)[len(nstype) + 2 : -1]) 1331740Szelenkov@nginx.com 1341740Szelenkov@nginx.com return data 135