blob: 4b2d93a1dcd7135bc614f9fc168c4c070adb9e15 [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
mblighc5ddfd12008-08-04 17:15:00 +00009 def initialize(self):
10 self.job.require_gcc()
11
12
jadmanski0afbb632008-06-06 21:10:57 +000013 # ftp://ftp.netperf.org/netperf/netperf-2.4.1.tar.gz
14 def setup(self, tarball = 'netperf-2.4.1.tar.gz'):
mbligh8b352852008-06-07 01:07:08 +000015 tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
jadmanski0afbb632008-06-06 21:10:57 +000016 autotest_utils.extract_tarball_to_dir(tarball, self.srcdir)
17 os.chdir(self.srcdir)
mbligh56a91f02006-09-14 17:55:19 +000018
jadmanski0afbb632008-06-06 21:10:57 +000019 utils.system('./configure')
20 utils.system('make')
mbligh54e56842006-09-23 06:02:54 +000021
22
jadmanski0afbb632008-06-06 21:10:57 +000023 def initialize(self):
24 # netserver doesn't detach properly from the console. When
25 # it is run from ssh, this causes the ssh command not to
26 # return even though netserver meant to be backgrounded.
27 # This behavior is remedied by redirecting fd 0, 1 & 2
28 self.server_path = ('%s &>/dev/null </dev/null'
29 % os.path.join(self.srcdir, 'src/netserver'))
30 self.client_path = os.path.join(self.srcdir, 'src/netperf')
mbligh56a91f02006-09-14 17:55:19 +000031
mbligh6f5bbce2007-08-10 19:18:37 +000032
mbligh8b352852008-06-07 01:07:08 +000033 def execute(self, server_ip, client_ip, role, script='snapshot_script',
34 args=''):
jadmanski0afbb632008-06-06 21:10:57 +000035 server_tag = server_ip + '#netperf-server'
36 client_tag = client_ip + '#netperf-client'
37 all = [server_tag, client_tag]
38 job = self.job
39 if (role == 'server'):
40 self.server_start()
41 try:
mbligh8b352852008-06-07 01:07:08 +000042 job.barrier(server_tag, 'start', 600).rendevous(*all)
43 job.barrier(server_tag, 'stop', 3600).rendevous(*all)
jadmanski0afbb632008-06-06 21:10:57 +000044 finally:
45 self.server_stop()
46 elif (role == 'client'):
47 os.environ['NETPERF_CMD'] = self.client_path
48 job.barrier(client_tag, 'start', 600).rendevous(*all)
49 self.client(script, server_ip, args)
50 job.barrier(client_tag, 'stop', 30).rendevous(*all)
51 else:
jadmanskief848312008-06-16 22:00:53 +000052 raise error.TestError('invalid role specified')
mbligh54e56842006-09-23 06:02:54 +000053
mbligh56a91f02006-09-14 17:55:19 +000054
jadmanski0afbb632008-06-06 21:10:57 +000055 def server_start(self):
56 # we should really record the pid we forked off, but there
57 # was no obvious way to run the daemon in the foreground.
58 # Hacked it for now
mbligh78be24a2008-06-13 21:40:08 +000059 utils.system('killall netserver', ignore_status=True)
60 utils.system(self.server_path)
mbligh56a91f02006-09-14 17:55:19 +000061
mbligh54e56842006-09-23 06:02:54 +000062
jadmanski0afbb632008-06-06 21:10:57 +000063 def server_stop(self):
64 # this should really just kill the pid I forked, but ...
mbligh78be24a2008-06-13 21:40:08 +000065 utils.system('killall netserver')
mbligh56a91f02006-09-14 17:55:19 +000066
mbligh54e56842006-09-23 06:02:54 +000067
jadmanski0afbb632008-06-06 21:10:57 +000068 def client(self, script, server_ip, args = 'CPU'):
69 # run some client stuff
70 stdout_path = os.path.join(self.resultsdir, script + '.stdout')
71 stderr_path = os.path.join(self.resultsdir, script + '.stderr')
72 self.job.stdout.tee_redirect(stdout_path)
73 self.job.stderr.tee_redirect(stderr_path)
mbligh56a91f02006-09-14 17:55:19 +000074
jadmanski0afbb632008-06-06 21:10:57 +000075 script_path = os.path.join(self.srcdir, 'doc/examples', script)
mbligh78be24a2008-06-13 21:40:08 +000076 utils.system('%s %s %s' % (script_path, server_ip, args))
mblighe8fa3af2006-09-28 23:14:56 +000077
jadmanski0afbb632008-06-06 21:10:57 +000078 self.job.stdout.restore()
79 self.job.stderr.restore()