blob: 41d5521437e96b3e250ed0fd2737c60adfe2c31d [file] [log] [blame]
mblighb4904792007-01-01 02:15:01 +00001import test
2from autotest_utils import *
mbligheb131362007-01-09 22:24:38 +00003import os, sys
4from subprocess import *
mblighb4904792007-01-01 02:15:01 +00005
6class disktest(test.test):
7 version = 1
8
9 def setup(self):
10 os.mkdir(self.srcdir)
11 os.chdir(self.bindir)
12 system('cp disktest.c src/')
13 os.chdir(self.srcdir)
mbligheb131362007-01-09 22:24:38 +000014 cflags = '-D_FILE_OFFSET_BITS=64 -D _GNU_SOURCE -static -Wall'
mbligh98e3e012007-01-03 00:10:38 +000015 system('cc disktest.c ' + cflags + ' -o disktest')
mblighb4904792007-01-01 02:15:01 +000016
17
mbligheb131362007-01-09 22:24:38 +000018 def test_one_disk_chunk(self, disk, chunk):
19 print "testing %d MB files on %s in %d MB memory" % \
20 (self.chunk_mb, disk, self.memory_mb)
mbligh9a7d4ac2007-02-16 00:27:26 +000021 cmd = "%s/disktest -m %d -f %s/testfile.%d -i -S" % \
22 (self.srcdir, self.chunk_mb, disk, chunk)
mbligheb131362007-01-09 22:24:38 +000023 p = Popen(cmd, shell=True)
24 return(p.pid)
25
26
mbligh25bb1e12007-10-12 23:57:47 +000027 def execute(self, disks, gigabytes = None, chunk_mb = memtotal()/1024):
mbligh9a7d4ac2007-02-16 00:27:26 +000028 os.chdir(self.srcdir)
mbligheb131362007-01-09 22:24:38 +000029
mbligh25bb1e12007-10-12 23:57:47 +000030 if not gigabytes:
31 free = 100 # cap it at 100GB by default
32 for disk in disks:
33 free = min(freespace(disk) / 1024**3, free)
34 gigabytes = free
35 print "resizing to %s GB" % gigabytes
36 sys.stdout.flush()
37
mbligheb131362007-01-09 22:24:38 +000038 self.chunk_mb = chunk_mb
39 self.memory_mb = memtotal()/1024
mbligh9a7d4ac2007-02-16 00:27:26 +000040 if self.memory_mb > chunk_mb:
mbligheb131362007-01-09 22:24:38 +000041 raise "Too much RAM (%dMB) for this test to work" % \
42 self.memory_mb
43
44 chunks = (1024 * gigabytes) / chunk_mb
45
46 for i in range(chunks):
47 pids = []
48 for disk in disks:
mbligh9a7d4ac2007-02-16 00:27:26 +000049 pid = self.test_one_disk_chunk(disk, i)
mbligheb131362007-01-09 22:24:38 +000050 pids.append(pid)
51 errors = []
52 for pid in pids:
53 (junk, retval) = os.waitpid(pid, 0)
54 if (retval != 0):
55 errors.append(retval)
56 if errors:
57 raise "Errors from children: %s" % errors
58