Merge branch '12430-output-glob'
[arvados.git] / services / fuse / tests / fstest.py
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 import os
6 import subprocess
7 import sys
8
9 from multiprocessing import Process
10 from . import prof
11
12 def fn(n):
13     return "file%i" % n
14
15 def createfiles(d, n):
16     for j in range(1, 5):
17         print("Starting small file %s %i, %i" % (d, n, j))
18         if d:
19             os.mkdir(d)
20             ld = os.listdir('.')
21             if d not in ld:
22                 print("ERROR %s missing" % d)
23             os.chdir(d)
24
25         for i in range(n, n+10):
26             with open(fn(i), "w") as f:
27                 f.write(fn(i))
28
29         ld = os.listdir('.')
30         for i in range(n, n+10):
31             if fn(i) not in ld:
32                 print("ERROR %s missing" % fn(i))
33
34         for i in range(n, n+10):
35             with open(fn(i), "r") as f:
36                 if f.read() != fn(i):
37                     print("ERROR %s doesn't have expected contents" % fn(i))
38
39         for i in range(n, n+10):
40             os.remove(fn(i))
41
42         ld = os.listdir('.')
43         for i in range(n, n+10):
44             if fn(i) in ld:
45                 print("ERROR %s should have been removed" % fn(i))
46
47         if d:
48             os.chdir('..')
49             os.rmdir(d)
50             ld = os.listdir('.')
51             if d in ld:
52                 print("ERROR %s should have been removed" % d)
53
54
55 def createbigfile(d, n):
56     for j in range(1, 5):
57         print("Starting big file %s %i, %i" % (d, n, j))
58         i = n
59         if d:
60             os.mkdir(d)
61             ld = os.listdir('.')
62             if d not in ld:
63                 print("ERROR %s missing" % d)
64             os.chdir(d)
65
66         with open(fn(i), "w") as f:
67             for j in range(0, 1000):
68                 f.write((str(j) + fn(i)) * 10000)
69
70         ld = os.listdir('.')
71         if fn(i) not in ld:
72             print("ERROR %s missing" % fn(i))
73
74         with open(fn(i), "r") as f:
75             for j in range(0, 1000):
76                 expect = (str(j) + fn(i)) * 10000
77                 if f.read(len(expect)) != expect:
78                     print("ERROR %s doesn't have expected contents" % fn(i))
79
80         os.remove(fn(i))
81
82         ld = os.listdir('.')
83         if fn(i) in ld:
84             print("ERROR %s should have been removed" % fn(i))
85
86         if d:
87             os.chdir('..')
88             os.rmdir(d)
89             ld = os.listdir('.')
90             if d in ld:
91                 print("ERROR %s should have been removed" % d)
92
93 def do_ls():
94     with open("/dev/null", "w") as nul:
95         for j in range(1, 50):
96             subprocess.call(["ls", "-l"], stdout=nul, stderr=nul)
97
98 def runit(target, indir):
99     procs = []
100     for n in range(0, 20):
101         if indir:
102             p = Process(target=target, args=("dir%i" % n, n*10,))
103         else:
104             p = Process(target=target, args=("", n*10,))
105         p.start()
106         procs.append(p)
107
108     p = Process(target=do_ls, args=())
109     p.start()
110     procs.append(p)
111
112     for p in procs:
113         p.join()
114
115     if os.listdir('.'):
116         print("ERROR there are left over files in the directory")
117
118
119 if __name__ == '__main__':
120     if os.listdir('.'):
121         print("ERROR starting directory is not empty")
122         sys.exit()
123
124     print("Single directory small files")
125     with prof.CountTime():
126         runit(createfiles, False)
127
128     print("Separate directories small files")
129     with prof.CountTime():
130         runit(createfiles, True)
131
132     print("Single directory large files")
133     with prof.CountTime():
134         runit(createbigfile, False)
135
136     print("Separate directories large files")
137     with prof.CountTime():
138         runit(createbigfile, True)