# Copyright (C) The Arvados Authors. All rights reserved. # # SPDX-License-Identifier: AGPL-3.0 from __future__ import print_function from __future__ import absolute_import from builtins import str from builtins import range from multiprocessing import Process import os import subprocess import sys from . import prof def fn(n): return "file%i" % n def createfiles(d, n): for j in range(1, 5): print("Starting small file %s %i, %i" % (d, n, j)) if d: os.mkdir(d) ld = os.listdir('.') if d not in ld: print("ERROR %s missing" % d) os.chdir(d) for i in range(n, n+10): with open(fn(i), "w") as f: f.write(fn(i)) ld = os.listdir('.') for i in range(n, n+10): if fn(i) not in ld: print("ERROR %s missing" % fn(i)) for i in range(n, n+10): with open(fn(i), "r") as f: if f.read() != fn(i): print("ERROR %s doesn't have expected contents" % fn(i)) for i in range(n, n+10): os.remove(fn(i)) ld = os.listdir('.') for i in range(n, n+10): if fn(i) in ld: print("ERROR %s should have been removed" % fn(i)) if d: os.chdir('..') os.rmdir(d) ld = os.listdir('.') if d in ld: print("ERROR %s should have been removed" % d) def createbigfile(d, n): for j in range(1, 5): print("Starting big file %s %i, %i" % (d, n, j)) i = n if d: os.mkdir(d) ld = os.listdir('.') if d not in ld: print("ERROR %s missing" % d) os.chdir(d) with open(fn(i), "w") as f: for j in range(0, 1000): f.write((str(j) + fn(i)) * 10000) ld = os.listdir('.') if fn(i) not in ld: print("ERROR %s missing" % fn(i)) with open(fn(i), "r") as f: for j in range(0, 1000): expect = (str(j) + fn(i)) * 10000 if f.read(len(expect)) != expect: print("ERROR %s doesn't have expected contents" % fn(i)) os.remove(fn(i)) ld = os.listdir('.') if fn(i) in ld: print("ERROR %s should have been removed" % fn(i)) if d: os.chdir('..') os.rmdir(d) ld = os.listdir('.') if d in ld: print("ERROR %s should have been removed" % d) def do_ls(): with open("/dev/null", "w") as nul: for j in range(1, 50): subprocess.call(["ls", "-l"], stdout=nul, stderr=nul) def runit(target, indir): procs = [] for n in range(0, 20): if indir: p = Process(target=target, args=("dir%i" % n, n*10,)) else: p = Process(target=target, args=("", n*10,)) p.start() procs.append(p) p = Process(target=do_ls, args=()) p.start() procs.append(p) for p in procs: p.join() if os.listdir('.'): print("ERROR there are left over files in the directory") if __name__ == '__main__': if os.listdir('.'): print("ERROR starting directory is not empty") sys.exit() print("Single directory small files") with prof.CountTime(): runit(createfiles, False) print("Separate directories small files") with prof.CountTime(): runit(createfiles, True) print("Single directory large files") with prof.CountTime(): runit(createbigfile, False) print("Separate directories large files") with prof.CountTime(): runit(createbigfile, True)