--- /dev/null
+---
+# Sample benchmark task config file
+# Measure compute capacity and scale.
+# Including number of cores, number of threads, available memory size and
+# cache size.
+
+schema: "yardstick:task:0.1"
+
+scenarios:
+-
+ type: NetworkCapacity
+ host: node1.LF
+
+ runner:
+ type: Iteration
+ iterations: 1
+
+context:
+ type: Node
+ name: LF
+ file: etc/yardstick/nodes/compass_sclab_virtual/pod.yaml
--- /dev/null
+#!/usr/bin/env python\r
+\r
+##############################################################################\r
+# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.\r
+#\r
+# All rights reserved. This program and the accompanying materials\r
+# are made available under the terms of the Apache License, Version 2.0\r
+# which accompanies this distribution, and is available at\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+##############################################################################\r
+\r
+# Unittest for yardstick.benchmark.scenarios.networking.networkcapacity.NetworkCapacity\r
+\r
+import mock\r
+import unittest\r
+import os\r
+import json\r
+\r
+from yardstick.benchmark.scenarios.networking import networkcapacity\r
+\r
+SAMPLE_OUTPUT = '{"Number of connections":"308","Number of frames received": "166503"}'\r
+\r
+@mock.patch('yardstick.benchmark.scenarios.networking.networkcapacity.ssh')\r
+class NetworkCapacityTestCase(unittest.TestCase):\r
+\r
+ def setUp(self):\r
+ self.ctx = {\r
+ 'host': {\r
+ 'ip': '172.16.0.137',\r
+ 'user': 'cirros',\r
+ 'password': "root"\r
+ },\r
+ }\r
+\r
+ self.result = {}\r
+\r
+ def test_capacity_successful_setup(self, mock_ssh):\r
+ c = networkcapacity.NetworkCapacity({}, self.ctx)\r
+ mock_ssh.SSH().execute.return_value = (0, '', '')\r
+ c.setup()\r
+ self.assertIsNotNone(c.client)\r
+ self.assertTrue(c.setup_done)\r
+\r
+ def test_capacity_successful(self, mock_ssh):\r
+ c = networkcapacity.NetworkCapacity({}, self.ctx)\r
+\r
+ mock_ssh.SSH().execute.return_value = (0, SAMPLE_OUTPUT, '')\r
+ c.run(self.result)\r
+ expected_result = json.loads(SAMPLE_OUTPUT)\r
+ self.assertEqual(self.result, expected_result)\r
+\r
+ def test_capacity_unsuccessful_script_error(self, mock_ssh):\r
+ c = networkcapacity.NetworkCapacity({}, self.ctx)\r
+\r
+ mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')\r
+ self.assertRaises(RuntimeError, c.run, self.result)\r
--- /dev/null
+#!/bin/bash
+
+##############################################################################
+# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# Measure compute capacity and scale of a host
+
+set -e
+OUTPUT_FILE=/tmp/netperf-out.log
+
+# run capacity test
+run_capacity()
+{
+ netstat -s > $OUTPUT_FILE
+}
+
+# write the result to stdout in json format
+output_json()
+{
+ CONNECTIONS=$(awk '/active/{print $1}' $OUTPUT_FILE)
+ FRAMES=$(awk '/total\ packets\ received/{print $1}' $OUTPUT_FILE)
+ echo -e "{ \
+ \"Number of connections\":\"$CONNECTIONS\", \
+ \"Number of frames received\": \"$FRAMES\" \
+ }"
+}
+
+main()
+{
+ run_capacity
+
+ output_json
+}
+
+main
--- /dev/null
+##############################################################################\r
+# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.\r
+#\r
+# All rights reserved. This program and the accompanying materials\r
+# are made available under the terms of the Apache License, Version 2.0\r
+# which accompanies this distribution, and is available at\r
+# http://www.apache.org/licenses/LICENSE-2.0\r
+##############################################################################\r
+import pkg_resources\r
+import logging\r
+import json\r
+\r
+import yardstick.ssh as ssh\r
+from yardstick.benchmark.scenarios import base\r
+\r
+LOG = logging.getLogger(__name__)\r
+\r
+\r
+class NetworkCapacity(base.Scenario):\r
+ """Measure Network capacity and scale.\r
+\r
+ This scenario reads network status including number of connections,\r
+ number of frames sent/received.\r
+ """\r
+ __scenario_type__ = "NetworkCapacity"\r
+ TARGET_SCRIPT = "networkcapacity.bash"\r
+\r
+ def __init__(self, scenario_cfg, context_cfg):\r
+ self.scenario_cfg = scenario_cfg\r
+ self.context_cfg = context_cfg\r
+ self.setup_done = False\r
+\r
+ def setup(self):\r
+ """scenario setup"""\r
+ self.target_script = pkg_resources.resource_filename(\r
+ "yardstick.benchmark.scenarios.networking",\r
+ NetworkCapacity.TARGET_SCRIPT)\r
+\r
+ host = self.context_cfg['host']\r
+ if host is None:\r
+ raise RuntimeError('No right node.please check the configuration')\r
+ host_user = host.get('user', 'ubuntu')\r
+ host_ip = host.get('ip', None)\r
+ host_pwd = host.get('password', None)\r
+\r
+ LOG.debug("user:%s, host:%s", host_user, host_ip)\r
+ self.client = ssh.SSH(host_user, host_ip, password=host_pwd)\r
+ self.client.wait(timeout=600)\r
+\r
+ # copy script to host\r
+ self.client.run("cat > ~/networkcapacity.sh",\r
+ stdin=open(self.target_script, 'rb'))\r
+\r
+ self.setup_done = True\r
+\r
+ def run(self, result):\r
+ """execute the benchmark"""\r
+\r
+ if not self.setup_done:\r
+ self.setup()\r
+\r
+ cmd = "sudo bash networkcapacity.sh"\r
+\r
+ LOG.debug("Executing command: %s", cmd)\r
+ status, stdout, stderr = self.client.execute(cmd)\r
+ if status:\r
+ raise RuntimeError(stderr)\r
+\r
+ result.update(json.loads(stdout))\r