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