mbligh | b490479 | 2007-01-01 02:15:01 +0000 | [diff] [blame] | 1 | import test |
| 2 | from autotest_utils import * |
mbligh | eb13136 | 2007-01-09 22:24:38 +0000 | [diff] [blame] | 3 | import os, sys |
| 4 | from subprocess import * |
mbligh | b490479 | 2007-01-01 02:15:01 +0000 | [diff] [blame] | 5 | |
| 6 | class 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) |
mbligh | eb13136 | 2007-01-09 22:24:38 +0000 | [diff] [blame] | 14 | cflags = '-D_FILE_OFFSET_BITS=64 -D _GNU_SOURCE -static -Wall' |
mbligh | 98e3e01 | 2007-01-03 00:10:38 +0000 | [diff] [blame] | 15 | system('cc disktest.c ' + cflags + ' -o disktest') |
mbligh | b490479 | 2007-01-01 02:15:01 +0000 | [diff] [blame] | 16 | |
| 17 | |
mbligh | eb13136 | 2007-01-09 22:24:38 +0000 | [diff] [blame] | 18 | 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) |
mbligh | 9a7d4ac | 2007-02-16 00:27:26 +0000 | [diff] [blame^] | 21 | cmd = "%s/disktest -m %d -f %s/testfile.%d -i -S" % \ |
| 22 | (self.srcdir, self.chunk_mb, disk, chunk) |
mbligh | eb13136 | 2007-01-09 22:24:38 +0000 | [diff] [blame] | 23 | p = Popen(cmd, shell=True) |
| 24 | return(p.pid) |
| 25 | |
| 26 | |
mbligh | 9a7d4ac | 2007-02-16 00:27:26 +0000 | [diff] [blame^] | 27 | def execute(self, disks, gigabytes = 100, chunk_mb = memtotal()/1024): |
| 28 | os.chdir(self.srcdir) |
mbligh | eb13136 | 2007-01-09 22:24:38 +0000 | [diff] [blame] | 29 | |
| 30 | self.chunk_mb = chunk_mb |
| 31 | self.memory_mb = memtotal()/1024 |
mbligh | 9a7d4ac | 2007-02-16 00:27:26 +0000 | [diff] [blame^] | 32 | if self.memory_mb > chunk_mb: |
mbligh | eb13136 | 2007-01-09 22:24:38 +0000 | [diff] [blame] | 33 | raise "Too much RAM (%dMB) for this test to work" % \ |
| 34 | self.memory_mb |
| 35 | |
| 36 | chunks = (1024 * gigabytes) / chunk_mb |
| 37 | |
| 38 | for i in range(chunks): |
| 39 | pids = [] |
| 40 | for disk in disks: |
mbligh | 9a7d4ac | 2007-02-16 00:27:26 +0000 | [diff] [blame^] | 41 | pid = self.test_one_disk_chunk(disk, i) |
mbligh | eb13136 | 2007-01-09 22:24:38 +0000 | [diff] [blame] | 42 | pids.append(pid) |
| 43 | errors = [] |
| 44 | for pid in pids: |
| 45 | (junk, retval) = os.waitpid(pid, 0) |
| 46 | if (retval != 0): |
| 47 | errors.append(retval) |
| 48 | if errors: |
| 49 | raise "Errors from children: %s" % errors |
| 50 | |