sample_output = '[{"latency": 4.944, "size": 0.00049}]'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
l.run(self.result)
- expected_result = jsonutils.loads(
- '{"latencies": ' + sample_output + "}")
+ expected_result = {"latencies0.latency": 4.944, "latencies0.size": 0.00049}
self.assertEqual(self.result, expected_result)
def test_successful_bandwidth_run_no_sla(self, mock_ssh):
sample_output = '[{"latency": 4.944, "size": 0.00049}]'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
l.run(self.result)
- expected_result = jsonutils.loads(
- '{"latencies": ' + sample_output + "}")
+ expected_result = {"latencies0.latency": 4.944, "latencies0.size": 0.00049}
self.assertEqual(self.result, expected_result)
def test_successful_bandwidth_run_sla(self, mock_ssh):
mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
self.assertRaises(RuntimeError, l.run, self.result)
+
+
+def main():
+ unittest.main()
+
+if __name__ == '__main__':
+ main()
import mock
from oslo_serialization import jsonutils
+from yardstick.common import utils
from yardstick.benchmark.scenarios.compute import ramspeed
"Block_size(kb)": 32768, "Bandwidth(MBps)": 8340.85}]}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
r.run(self.result)
- expected_result = jsonutils.loads(sample_output)
+ expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
self.assertEqual(self.result, expected_result)
def test_ramspeed_successful_run_sla(self, mock_ssh):
"Block_size(kb)": 32768, "Bandwidth(MBps)": 8340.85}]}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
r.run(self.result)
- expected_result = jsonutils.loads(sample_output)
+ expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
self.assertEqual(self.result, expected_result)
def test_ramspeed_unsuccessful_run_sla(self, mock_ssh):
"Bandwidth(MBps)": 9401.58}]}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
r.run(self.result)
- expected_result = jsonutils.loads(sample_output)
+ expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
self.assertEqual(self.result, expected_result)
def test_ramspeed_mem_successful_run_sla(self, mock_ssh):
"Bandwidth(MBps)": 9401.58}]}'
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
r.run(self.result)
- expected_result = jsonutils.loads(sample_output)
+ expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
self.assertEqual(self.result, expected_result)
def test_ramspeed_mem_unsuccessful_run_sla(self, mock_ssh):
import mock
from oslo_serialization import jsonutils
+from yardstick.common import utils
from yardstick.benchmark.scenarios.networking import iperf3
sample_output = self._read_sample_output(self.output_name_tcp)
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = jsonutils.loads(sample_output)
+ expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
p.run(result)
self.assertEqual(result, expected_result)
sample_output = self._read_sample_output(self.output_name_tcp)
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = jsonutils.loads(sample_output)
+ expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
p.run(result)
self.assertEqual(result, expected_result)
sample_output = self._read_sample_output(self.output_name_udp)
mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
- expected_result = jsonutils.loads(sample_output)
+ expected_result = utils.flatten_dict_key(jsonutils.loads(sample_output))
p.run(result)
self.assertEqual(result, expected_result)
mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
p.run(result)
- self.assertEqual(result, {'rtt': {'ares': 100.0}})
+ self.assertEqual(result, {'rtt.ares': 100.0})
@mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
def test_ping_successful_sla(self, mock_ssh):
mock_ssh.SSH.from_node().execute.return_value = (0, '100', '')
p.run(result)
- self.assertEqual(result, {'rtt': {'ares': 100.0}})
+ self.assertEqual(result, {'rtt.ares': 100.0})
@mock.patch('yardstick.benchmark.scenarios.networking.ping.ssh')
def test_ping_unsuccessful_sla(self, mock_ssh):
return file_path
+class CommonUtilTestCase(unittest.TestCase):
+ def setUp(self):
+ self.data = {
+ "benchmark": {
+ "data": {
+ "mpstat": {
+ "cpu0": {
+ "%sys": "0.00",
+ "%idle": "99.00"
+ },
+ "loadavg": [
+ "1.09",
+ "0.29"
+ ]
+ },
+ "rtt": "1.03"
+ }
+ }
+ }
+ def test__dict_key_flatten(self):
+ line = 'mpstat.loadavg1=0.29,rtt=1.03,mpstat.loadavg0=1.09,' \
+ 'mpstat.cpu0.%idle=99.00,mpstat.cpu0.%sys=0.00'
+ # need to sort for assert to work
+ line = ",".join(sorted(line.split(',')))
+ flattened_data = utils.flatten_dict_key(
+ self.data['benchmark']['data'])
+ result = ",".join(
+ ("=".join(item) for item in sorted(flattened_data.items())))
+ self.assertEqual(result, line)
+
+
def main():
unittest.main()
},
"runner_id": 8921
}
- self.data3 = {
- "benchmark": {
- "data": {
- "mpstat": {
- "cpu0": {
- "%sys": "0.00",
- "%idle": "99.00"
- },
- "loadavg": [
- "1.09",
- "0.29"
- ]
- },
- "rtt": "1.03"
- }
- }
- }
self.yardstick_conf = {'dispatcher_influxdb': {}}
}
self.assertEqual(influxdb.flush_result_data(data), 0)
- def test__dict_key_flatten(self):
- line = 'mpstat.loadavg1=0.29,rtt=1.03,mpstat.loadavg0=1.09,' \
- 'mpstat.cpu0.%idle=99.00,mpstat.cpu0.%sys=0.00'
- # need to sort for assert to work
- line = ",".join(sorted(line.split(',')))
- influxdb = InfluxdbDispatcher(self.yardstick_conf)
- flattened_data = influxdb._dict_key_flatten(
- self.data3['benchmark']['data'])
- result = ",".join(
- [k + "=" + v for k, v in sorted(flattened_data.items())])
- self.assertEqual(result, line)
-
def test__get_nano_timestamp(self):
influxdb = InfluxdbDispatcher(self.yardstick_conf)
results = {'timestamp': '1451461248.925574'}
from oslo_serialization import jsonutils
import yardstick.ssh as ssh
+from yardstick.common import utils
from yardstick.benchmark.scenarios import base
LOG = logging.getLogger(__name__)
if status:
raise RuntimeError(stderr)
+ lmbench_result = {}
if test_type == 'latency':
- result.update(
+ lmbench_result.update(
{"latencies": jsonutils.loads(stdout)})
else:
- result.update(jsonutils.loads(stdout))
+ lmbench_result.update(jsonutils.loads(stdout))
+ result.update(utils.flatten_dict_key(lmbench_result))
if "sla" in self.scenario_cfg:
sla_error = ""
if test_type == 'latency':
sla_max_latency = int(self.scenario_cfg['sla']['max_latency'])
- for t_latency in result["latencies"]:
+ for t_latency in lmbench_result["latencies"]:
latency = t_latency['latency']
if latency > sla_max_latency:
sla_error += "latency %f > sla:max_latency(%f); " \
% (latency, sla_max_latency)
elif test_type == 'bandwidth':
sla_min_bw = int(self.scenario_cfg['sla']['min_bandwidth'])
- bw = result["bandwidth(MBps)"]
+ bw = lmbench_result["bandwidth(MBps)"]
if bw < sla_min_bw:
sla_error += "bandwidth %f < " \
"sla:min_bandwidth(%f)" % (bw, sla_min_bw)
elif test_type == 'latency_for_cache':
sla_latency = float(self.scenario_cfg['sla']['max_latency'])
- cache_latency = float(result['L1cache'])
+ cache_latency = float(lmbench_result['L1cache'])
if sla_latency < cache_latency:
sla_error += "latency %f > sla:max_latency(%f); " \
% (cache_latency, sla_latency)
from oslo_serialization import jsonutils
import yardstick.ssh as ssh
+from yardstick.common import utils
from yardstick.benchmark.scenarios import base
LOG = logging.getLogger(__name__)
if status:
raise RuntimeError(stderr)
- result.update(jsonutils.loads(stdout))
+ ramspeed_result = jsonutils.loads(stdout)
+ result.update(utils.flatten_dict_key(ramspeed_result))
if "sla" in self.scenario_cfg:
sla_error = ""
sla_min_bw = int(self.scenario_cfg['sla']['min_bandwidth'])
- for i in result["Result"]:
+ for i in ramspeed_result["Result"]:
bw = i["Bandwidth(MBps)"]
if bw < sla_min_bw:
sla_error += "Bandwidth %f < " \
from oslo_serialization import jsonutils
import yardstick.ssh as ssh
+from yardstick.common import utils
from yardstick.benchmark.scenarios import base
LOG = logging.getLogger(__name__)
# Note: convert all ints to floats in order to avoid
# schema conflicts in influxdb. We probably should add
# a format func in the future.
- result.update(
- jsonutils.loads(stdout, parse_int=float))
+ iperf_result = jsonutils.loads(stdout, parse_int=float)
+ result.update(utils.flatten_dict_key(iperf_result))
if "sla" in self.scenario_cfg:
sla_iperf = self.scenario_cfg["sla"]
# convert bits per second to bytes per second
bit_per_second = \
- int(result["end"]["sum_received"]["bits_per_second"])
+ int(iperf_result["end"]["sum_received"]["bits_per_second"])
bytes_per_second = bit_per_second / 8
assert bytes_per_second >= sla_bytes_per_second, \
"bytes_per_second %d < sla:bytes_per_second (%d); " % \
else:
sla_jitter = float(sla_iperf["jitter"])
- jitter_ms = float(result["end"]["sum"]["jitter_ms"])
+ jitter_ms = float(iperf_result["end"]["sum"]["jitter_ms"])
assert jitter_ms <= sla_jitter, \
"jitter_ms %f > sla:jitter %f; " % \
(jitter_ms, sla_jitter)
import logging
import yardstick.ssh as ssh
+from yardstick.common import utils
from yardstick.benchmark.scenarios import base
LOG = logging.getLogger(__name__)
destination = self.context_cfg['target'].get('ipaddr', '127.0.0.1')
dest_list = [s.strip() for s in destination.split(',')]
- result["rtt"] = {}
- rtt_result = result["rtt"]
+ rtt_result = {}
+ ping_result = {"rtt": rtt_result}
for pos, dest in enumerate(dest_list):
if 'targets' in self.scenario_cfg:
(rtt_result[target_vm_name], sla_max_rtt)
else:
LOG.error("ping '%s' '%s' timeout", options, target_vm)
+ result.update(utils.flatten_dict_key(ping_result))
def _test(): # pragma: no cover
import os
import subprocess
import sys
+import collections
+import six
from functools import reduce
import yaml
if status:
raise RuntimeError(stderr)
return stdout.rstrip()
+
+
+def flatten_dict_key(data):
+ next_data = {}
+
+ # use list, because iterable is too generic
+ if not any(isinstance(v, (collections.Mapping, list)) for v in data.values()):
+ return data
+
+ for k, v in six.iteritems(data):
+ if isinstance(v, collections.Mapping):
+ for n_k, n_v in six.iteritems(v):
+ next_data["%s.%s" % (k, n_k)] = n_v
+ # use list because iterable is too generic
+ elif isinstance(v, list):
+ for index, item in enumerate(v):
+ next_data["%s%d" % (k, index)] = item
+ else:
+ next_data[k] = v
+
+ return flatten_dict_key(next_data)
import logging
import time
-import collections
import requests
-import six
+from yardstick.common import utils
from third_party.influxdb.influxdb_line_protocol import make_lines
from yardstick.dispatcher.base import Base as DispatchBase
msg = {}
point = {
"measurement": case,
- "fields": self._dict_key_flatten(data["data"]),
+ "fields": utils.flatten_dict_key(data["data"]),
"time": self._get_nano_timestamp(data),
"tags": self._get_extended_tags(criteria),
}
return make_lines(msg).encode('utf-8')
- def _dict_key_flatten(self, data):
- next_data = {}
-
- # use list, because iterable is too generic
- if not [v for v in data.values() if
- isinstance(v, (collections.Mapping, list))]:
- return data
-
- for k, v in six.iteritems(data):
- if isinstance(v, collections.Mapping):
- for n_k, n_v in six.iteritems(v):
- next_data["%s.%s" % (k, n_k)] = n_v
- # use list because iterable is too generic
- elif isinstance(v, list):
- for index, item in enumerate(v):
- next_data["%s%d" % (k, index)] = item
- else:
- next_data[k] = v
-
- return self._dict_key_flatten(next_data)
-
def _get_nano_timestamp(self, results):
try:
timestamp = results["timestamp"]