| Index: server/site_wifitest.py
|
| diff --git a/server/site_wifitest.py b/server/site_wifitest.py
|
| index f5548a183db0d7882eb5f0a105a1f506b82582b8..8acc70c62efe173eb518dc9272436a93b05c7f1f 100644
|
| --- a/server/site_wifitest.py
|
| +++ b/server/site_wifitest.py
|
| @@ -68,7 +68,7 @@ class WiFiTest(object):
|
| def __init__(self, name, steps, config):
|
| self.name = name
|
| self.steps = steps
|
| - self.keyvals = {}
|
| + self.perf_keyvals = {}
|
|
|
| router = config['router']
|
| self.router = hosts.create_host(router['addr'])
|
| @@ -132,9 +132,14 @@ class WiFiTest(object):
|
| # potential bg thread for client network monitoring
|
| self.client_netdump_thread = None
|
| self.__client_discover_commands(client)
|
| - self.netperf_iter = 0
|
| self.firewall_rules = []
|
|
|
| + # Find all repeated steps and create iterators for them
|
| + self.iterated_steps = {}
|
| + step_names = [step[0] for step in steps]
|
| + for step_name in list(set(step_names)):
|
| + if step_names.count(step_name) > 1:
|
| + self.iterated_steps[step_name] = 0
|
|
|
| def cleanup(self, params):
|
| """ Cleanup state: disconnect client and destroy ap """
|
| @@ -188,6 +193,15 @@ class WiFiTest(object):
|
| else:
|
| params = {}
|
|
|
| + # What should perf data be prefixed with?
|
| + if 'perf_prefix' in params:
|
| + self.prefix = '%s_%s' % (method, params.pop('perf_prefix'))
|
| + elif method in self.iterated_steps:
|
| + self.prefix = '%s_%d' % (method, self.iterated_steps[method])
|
| + self.iterated_steps[method] += 1
|
| + else:
|
| + self.prefix = method
|
| +
|
| logging.info("%s: step '%s' params %s", self.name, method, params)
|
|
|
| func = getattr(self, method, None)
|
| @@ -213,8 +227,11 @@ class WiFiTest(object):
|
|
|
|
|
| def write_keyvals(self, job):
|
| - job.write_perf_keyval(self.keyvals)
|
| + job.write_perf_keyval(self.perf_keyvals)
|
|
|
| + def write_perf(self, data):
|
| + for key, value in data.iteritems():
|
| + self.perf_keyvals['%s_%s' % (self.prefix, key)] = value
|
|
|
| def __get_ipaddr(self, host, ifnet):
|
| # XXX gotta be a better way to do this
|
| @@ -250,11 +267,12 @@ class WiFiTest(object):
|
|
|
| result_times = re.match("OK ([0-9\.]*) ([0-9\.]*) .*", result)
|
|
|
| - self.keyvals['connect_config_s'] = result_times.group(1)
|
| - self.keyvals['connect_assoc_s'] = result_times.group(2)
|
| - for k in ('multiple_attempts', 'clear_error', 'fast_fail'):
|
| + self.write_perf({'config_s': result_times.group(1),
|
| + 'assoc_s': result_times.group(2)})
|
| + for k in ('already_connected', 'clear_error', 'fast_fail',
|
| + 'get_prop', 'in_progress', 'lost_dbus', 'multiple_attempts'):
|
| if re.search(k, result) is not None:
|
| - self.keyvals[k] = 'true'
|
| + self.write_perf({k:'true'})
|
|
|
| print "%s: %s" % (self.name, result)
|
|
|
| @@ -424,17 +442,6 @@ class WiFiTest(object):
|
| stats['min'], stats['avg'], stats['max'])
|
|
|
|
|
| - def __ping_prefix(self, params):
|
| - if 'name' in params:
|
| - return params['name']
|
| -
|
| - args = []
|
| - for k, v in params.items():
|
| - if k != 'count':
|
| - args.append('%s_%s' % (k, v))
|
| - return '/'.join(args)
|
| -
|
| -
|
| def client_ping(self, params):
|
| """ Ping the server from the client """
|
| ping_ip = params.get('ping_ip', self.server_wifi_ip)
|
| @@ -444,9 +451,7 @@ class WiFiTest(object):
|
| (self.__ping_args(params), ping_ip), timeout=3*int(count))
|
|
|
| stats = self.__get_pingstats(result.stdout)
|
| - prefix = 'client_ping_%s_' % self.__ping_prefix(params)
|
| - for k,v in stats.iteritems():
|
| - self.keyvals[prefix + k] = v
|
| + self.write_perf(stats)
|
| self.__print_pingstats("client_ping ", stats)
|
|
|
|
|
| @@ -478,9 +483,7 @@ class WiFiTest(object):
|
| ping_ip), timeout=3*int(count))
|
|
|
| stats = self.__get_pingstats(result.stdout)
|
| - prefix = 'server_ping_' + self.__ping_prefix(params)
|
| - for k,v in stats.iteritems():
|
| - self.keyvals['server_ping_' + k] = v
|
| + self.write_perf(stats)
|
| self.__print_pingstats("server_ping ", stats)
|
|
|
|
|
| @@ -623,13 +626,7 @@ class WiFiTest(object):
|
| for rule in np_rules:
|
| self.__firewall_close(rule)
|
|
|
| - # Results are prefixed with the iteration or a caller-defined name
|
| - prefix = 'Netperf_%s_' % params.get('name', str(self.netperf_iter))
|
| - self.netperf_iter += 1
|
| -
|
| - self.keyvals[prefix + 'test'] = test
|
| - self.keyvals[prefix + 'mode'] = mode
|
| - self.keyvals[prefix + 'actual_time'] = actual_time
|
| + self.write_perf({'test':test, 'mode':mode, 'actual_time':actual_time})
|
|
|
| logging.info(results)
|
|
|
| @@ -649,7 +646,7 @@ class WiFiTest(object):
|
|
|
| 87380 16384 16384 2.00 941.28
|
| """
|
| - self.keyvals[prefix + 'Throughput'] = float(lines[6].split()[4])
|
| + self.write_perf({'Throughput':float(lines[6].split()[4])})
|
| elif test == 'UDP_STREAM':
|
| """Parses the following and returns a touple containing throughput
|
| and the number of errors.
|
| @@ -664,8 +661,8 @@ class WiFiTest(object):
|
| 131072 2.00 3673 961.87
|
| """
|
| udp_tokens = lines[5].split()
|
| - self.keyvals[prefix + 'Throughput'] = float(udp_tokens[5])
|
| - self.keyvals[prefix + 'Errors'] = float(udp_tokens[4])
|
| + self.write_perf({'Throughput':float(udp_tokens[5]),
|
| + 'Errors':float(udp_tokens[4])})
|
| elif test in ['TCP_RR', 'TCP_CRR', 'UDP_RR']:
|
| """Parses the following which works for both rr (TCP and UDP)
|
| and crr tests and returns a singleton containing transfer rate.
|
| @@ -680,7 +677,7 @@ class WiFiTest(object):
|
| 16384 87380 1 1 2.00 14118.53
|
| 16384 87380
|
| """
|
| - self.kevals[prefix + 'Trasnfer_Rate'] = float(lines[6].split()[5])
|
| + self.write_perf({'Trasnfer_Rate':float(lines[6].split()[5])})
|
| else:
|
| raise error.TestError('Unhandled test')
|
|
|
|
|