blob: 85c2997be0188db348384269a5b3d614e013969d [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
mbligh1dd73322007-12-19 15:41:45 +000027 def execute(self, disks = None, gigabytes = None,
28 chunk_mb = memtotal() / 1024):
mbligh9a7d4ac2007-02-16 00:27:26 +000029 os.chdir(self.srcdir)
mbligheb131362007-01-09 22:24:38 +000030
mbligh1dd73322007-12-19 15:41:45 +000031 if not disks:
32 disks = [self.tmpdir]
mbligh25bb1e12007-10-12 23:57:47 +000033 if not gigabytes:
34 free = 100 # cap it at 100GB by default
35 for disk in disks:
36 free = min(freespace(disk) / 1024**3, free)
37 gigabytes = free
38 print "resizing to %s GB" % gigabytes
39 sys.stdout.flush()
40
mbligheb131362007-01-09 22:24:38 +000041 self.chunk_mb = chunk_mb
42 self.memory_mb = memtotal()/1024
mbligh9a7d4ac2007-02-16 00:27:26 +000043 if self.memory_mb > chunk_mb:
mbligh642b03e2008-01-14 16:53:15 +000044 e_msg = "Too much RAM (%dMB) for this test to work" % self.memory_mb
45 raise TestError(e_msg)
mbligheb131362007-01-09 22:24:38 +000046
47 chunks = (1024 * gigabytes) / chunk_mb
48
49 for i in range(chunks):
50 pids = []
51 for disk in disks:
mbligh9a7d4ac2007-02-16 00:27:26 +000052 pid = self.test_one_disk_chunk(disk, i)
mbligheb131362007-01-09 22:24:38 +000053 pids.append(pid)
54 errors = []
55 for pid in pids:
56 (junk, retval) = os.waitpid(pid, 0)
57 if (retval != 0):
58 errors.append(retval)
59 if errors:
mbligh642b03e2008-01-14 16:53:15 +000060 raise TestError("Errors from children: %s" % errors)
61