blob: 8555b45dd6bd4e006cd721e80e0340bf88ee514a [file] [log] [blame]
mbligh9f857922008-06-05 16:19:07 +00001from autotest_lib.client.bin import test, autotest_utils
2from autotest_lib.client.common_lib import utils, error
3
mbligh56a91f02006-09-14 17:55:19 +00004
5class netperf2(test.test):
6 version = 1
7
8 # ftp://ftp.netperf.org/netperf/netperf-2.4.1.tar.gz
9 def setup(self, tarball = 'netperf-2.4.1.tar.gz'):
mbligh9f857922008-06-05 16:19:07 +000010 tarball = autotest_utils.unmap_url(self.bindir, tarball,
11 self.tmpdir)
12 autotest_utils.extract_tarball_to_dir(tarball, self.srcdir)
mbligh56a91f02006-09-14 17:55:19 +000013 os.chdir(self.srcdir)
14
mbligh9f857922008-06-05 16:19:07 +000015 utils.system('./configure')
16 utils.system('make')
mbligh54e56842006-09-23 06:02:54 +000017
18
19 def initialize(self):
mbligh6f5bbce2007-08-10 19:18:37 +000020 # netserver doesn't detach properly from the console. When
21 # it is run from ssh, this causes the ssh command not to
22 # return even though netserver meant to be backgrounded.
23 # This behavior is remedied by redirecting fd 0, 1 & 2
24 self.server_path = ('%s &>/dev/null </dev/null'
25 % os.path.join(self.srcdir, 'src/netserver'))
mbligh56a91f02006-09-14 17:55:19 +000026 self.client_path = os.path.join(self.srcdir, 'src/netperf')
27
mbligh6f5bbce2007-08-10 19:18:37 +000028
mblighc6b01ed2006-10-13 17:03:26 +000029 def execute(self, server_ip, client_ip, role,
30 script='snapshot_script', args=''):
31 server_tag = server_ip + '#netperf-server'
32 client_tag = client_ip + '#netperf-client'
33 all = [server_tag, client_tag]
mbligh54e56842006-09-23 06:02:54 +000034 job = self.job
35 if (role == 'server'):
mbligh54e56842006-09-23 06:02:54 +000036 self.server_start()
apwda2a62f2006-11-06 17:39:25 +000037 try:
38 job.barrier(server_tag, 'start',
mbligh38f84772007-08-09 21:19:39 +000039 600).rendevous(*all)
apwda2a62f2006-11-06 17:39:25 +000040 job.barrier(server_tag, 'stop',
41 3600).rendevous(*all)
42 finally:
43 self.server_stop()
mbligh54e56842006-09-23 06:02:54 +000044 elif (role == 'client'):
mbligh54e56842006-09-23 06:02:54 +000045 os.environ['NETPERF_CMD'] = self.client_path
mbligh38f84772007-08-09 21:19:39 +000046 job.barrier(client_tag, 'start', 600).rendevous(*all)
mblighc6b01ed2006-10-13 17:03:26 +000047 self.client(script, server_ip, args)
48 job.barrier(client_tag, 'stop', 30).rendevous(*all)
mbligh54e56842006-09-23 06:02:54 +000049 else:
mbligh9f857922008-06-05 16:19:07 +000050 raise error.UnhandledError('invalid role specified')
mbligh54e56842006-09-23 06:02:54 +000051
mbligh56a91f02006-09-14 17:55:19 +000052
53 def server_start(self):
mbligh54e56842006-09-23 06:02:54 +000054 # we should really record the pid we forked off, but there
55 # was no obvious way to run the daemon in the foreground.
56 # Hacked it for now
mbligh8ea61e22008-05-09 18:09:37 +000057 system('killall netserver', ignore_status=True)
mbligha8cc6e02006-09-23 05:00:33 +000058 system(self.server_path)
mbligh56a91f02006-09-14 17:55:19 +000059
mbligh54e56842006-09-23 06:02:54 +000060
mbligh56a91f02006-09-14 17:55:19 +000061 def server_stop(self):
62 # this should really just kill the pid I forked, but ...
63 system('killall netserver')
64
mbligh54e56842006-09-23 06:02:54 +000065
mblighc6b01ed2006-10-13 17:03:26 +000066 def client(self, script, server_ip, args = 'CPU'):
mbligh56a91f02006-09-14 17:55:19 +000067 # run some client stuff
mblighc6b01ed2006-10-13 17:03:26 +000068 stdout_path = os.path.join(self.resultsdir, script + '.stdout')
69 stderr_path = os.path.join(self.resultsdir, script + '.stderr')
70 self.job.stdout.tee_redirect(stdout_path)
71 self.job.stderr.tee_redirect(stderr_path)
mbligh56a91f02006-09-14 17:55:19 +000072
mblighe8fa3af2006-09-28 23:14:56 +000073 script_path = os.path.join(self.srcdir, 'doc/examples', script)
mblighc6b01ed2006-10-13 17:03:26 +000074 system('%s %s %s' % (script_path, server_ip, args))
mblighe8fa3af2006-09-28 23:14:56 +000075
mblighc6b01ed2006-10-13 17:03:26 +000076 self.job.stdout.restore()
77 self.job.stderr.restore()