blob: e01f815a21f4ff23b6ed2adb4cd401e4bbb5bf99 [file] [log] [blame]
mbligh34d01172008-06-05 16:26:31 +00001import os
mbligh9f857922008-06-05 16:19:07 +00002from autotest_lib.client.bin import test, autotest_utils
3from autotest_lib.client.common_lib import utils, error
4
mbligh56a91f02006-09-14 17:55:19 +00005
6class netperf2(test.test):
jadmanski0afbb632008-06-06 21:10:57 +00007 version = 1
mbligh56a91f02006-09-14 17:55:19 +00008
jadmanski0afbb632008-06-06 21:10:57 +00009 # ftp://ftp.netperf.org/netperf/netperf-2.4.1.tar.gz
10 def setup(self, tarball = 'netperf-2.4.1.tar.gz'):
11 tarball = utils.unmap_url(self.bindir, tarball,
12 self.tmpdir)
13 autotest_utils.extract_tarball_to_dir(tarball, self.srcdir)
14 os.chdir(self.srcdir)
mbligh56a91f02006-09-14 17:55:19 +000015
jadmanski0afbb632008-06-06 21:10:57 +000016 utils.system('./configure')
17 utils.system('make')
mbligh54e56842006-09-23 06:02:54 +000018
19
jadmanski0afbb632008-06-06 21:10:57 +000020 def initialize(self):
21 # netserver doesn't detach properly from the console. When
22 # it is run from ssh, this causes the ssh command not to
23 # return even though netserver meant to be backgrounded.
24 # This behavior is remedied by redirecting fd 0, 1 & 2
25 self.server_path = ('%s &>/dev/null </dev/null'
26 % os.path.join(self.srcdir, 'src/netserver'))
27 self.client_path = os.path.join(self.srcdir, 'src/netperf')
mbligh56a91f02006-09-14 17:55:19 +000028
mbligh6f5bbce2007-08-10 19:18:37 +000029
jadmanski0afbb632008-06-06 21:10:57 +000030 def execute(self, server_ip, client_ip, role,
31 script='snapshot_script', args=''):
32 server_tag = server_ip + '#netperf-server'
33 client_tag = client_ip + '#netperf-client'
34 all = [server_tag, client_tag]
35 job = self.job
36 if (role == 'server'):
37 self.server_start()
38 try:
39 job.barrier(server_tag, 'start',
40 600).rendevous(*all)
41 job.barrier(server_tag, 'stop',
42 3600).rendevous(*all)
43 finally:
44 self.server_stop()
45 elif (role == 'client'):
46 os.environ['NETPERF_CMD'] = self.client_path
47 job.barrier(client_tag, 'start', 600).rendevous(*all)
48 self.client(script, server_ip, args)
49 job.barrier(client_tag, 'stop', 30).rendevous(*all)
50 else:
51 raise error.UnhandledError('invalid role specified')
mbligh54e56842006-09-23 06:02:54 +000052
mbligh56a91f02006-09-14 17:55:19 +000053
jadmanski0afbb632008-06-06 21:10:57 +000054 def server_start(self):
55 # we should really record the pid we forked off, but there
56 # was no obvious way to run the daemon in the foreground.
57 # Hacked it for now
58 system('killall netserver', ignore_status=True)
59 system(self.server_path)
mbligh56a91f02006-09-14 17:55:19 +000060
mbligh54e56842006-09-23 06:02:54 +000061
jadmanski0afbb632008-06-06 21:10:57 +000062 def server_stop(self):
63 # this should really just kill the pid I forked, but ...
64 system('killall netserver')
mbligh56a91f02006-09-14 17:55:19 +000065
mbligh54e56842006-09-23 06:02:54 +000066
jadmanski0afbb632008-06-06 21:10:57 +000067 def client(self, script, server_ip, args = 'CPU'):
68 # run some client stuff
69 stdout_path = os.path.join(self.resultsdir, script + '.stdout')
70 stderr_path = os.path.join(self.resultsdir, script + '.stderr')
71 self.job.stdout.tee_redirect(stdout_path)
72 self.job.stderr.tee_redirect(stderr_path)
mbligh56a91f02006-09-14 17:55:19 +000073
jadmanski0afbb632008-06-06 21:10:57 +000074 script_path = os.path.join(self.srcdir, 'doc/examples', script)
75 system('%s %s %s' % (script_path, server_ip, args))
mblighe8fa3af2006-09-28 23:14:56 +000076
jadmanski0afbb632008-06-06 21:10:57 +000077 self.job.stdout.restore()
78 self.job.stderr.restore()