aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--samples/ping6.yaml9
-rw-r--r--tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml13
-rw-r--r--tests/unit/benchmark/scenarios/networking/test_ping6.py37
-rw-r--r--yardstick/benchmark/scenarios/networking/ping6.py84
-rw-r--r--yardstick/benchmark/scenarios/networking/ping6_benchmark.bash24
-rw-r--r--yardstick/benchmark/scenarios/networking/ping6_find_host.bash15
-rw-r--r--yardstick/benchmark/scenarios/networking/ping6_post_teardown.bash26
-rw-r--r--yardstick/benchmark/scenarios/networking/ping6_pre_setup.bash28
-rw-r--r--yardstick/benchmark/scenarios/networking/ping6_setup.bash10
-rw-r--r--yardstick/benchmark/scenarios/networking/ping6_teardown.bash11
-rw-r--r--[-rwxr-xr-x]yardstick/cmd/commands/task.py0
11 files changed, 207 insertions, 50 deletions
diff --git a/samples/ping6.yaml b/samples/ping6.yaml
index 22b8bb9cc..773d1be69 100644
--- a/samples/ping6.yaml
+++ b/samples/ping6.yaml
@@ -8,8 +8,13 @@ scenarios:
type: Ping6
options:
packetsize: 200
- host: node1.IPV6
-
+ host: host1,host2,host3,host4,host5
+ nodes:
+ host1: node1.IPV6
+ host2: node2.IPV6
+ host3: node3.IPV6
+ host4: node4.IPV6
+ host5: node5.IPV6
runner:
type: Iteration
iterations: 1
diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml
index 9b5e86509..6710621fb 100644
--- a/tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml
+++ b/tests/opnfv/test_cases/opnfv_yardstick_tc027.yaml
@@ -7,8 +7,15 @@ schema: "yardstick:task:0.1"
scenarios:
-
type: Ping6
- host: node1.IPV6
-
+ options:
+ packetsize: 200
+ host: host1,host2,host3,host4,host5
+ nodes:
+ host1: node1.IPV6
+ host2: node2.IPV6
+ host3: node3.IPV6
+ host4: node4.IPV6
+ host5: node5.IPV6
runner:
type: Iteration
iterations: 1
@@ -22,6 +29,6 @@ scenarios:
context:
type: Node
name: IPV6
- file: /root/yardstick/etc/yardstick/nodes/compass_sclab_physical/pod.yaml
+ file: /home/opnfv/repos/yardstick/etc/yardstick/nodes/compass_sclab_physical/pod.yaml
diff --git a/tests/unit/benchmark/scenarios/networking/test_ping6.py b/tests/unit/benchmark/scenarios/networking/test_ping6.py
index 662b85c30..b600e4103 100644
--- a/tests/unit/benchmark/scenarios/networking/test_ping6.py
+++ b/tests/unit/benchmark/scenarios/networking/test_ping6.py
@@ -21,18 +21,23 @@ class PingTestCase(unittest.TestCase):
def setUp(self):
self.ctx = {
- 'host': {
+ 'nodes':{
+ 'host1': {
'ip': '172.16.0.137',
'user': 'cirros',
'key_filename': "mykey.key",
'password': "root"
- },
+ },
+ }
}
@mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
- def test_pktgen_successful_setup(self, mock_ssh):
-
- p = ping6.Ping6({}, self.ctx)
+ def test_ping_successful_setup(self, mock_ssh):
+ args = {
+ 'options': {'host': 'host1','packetsize': 200},
+ 'sla': {'max_rtt': 50}
+ }
+ p = ping6.Ping6(args, self.ctx)
mock_ssh.SSH().execute.return_value = (0, '0', '')
p.setup()
@@ -40,12 +45,15 @@ class PingTestCase(unittest.TestCase):
@mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
def test_ping_successful_no_sla(self, mock_ssh):
+ args = {
+ 'options': {'host': 'host1','packetsize': 200},
+ }
result = {}
- p = ping6.Ping6({}, self.ctx)
+ p = ping6.Ping6(args, self.ctx)
p.client = mock_ssh.SSH()
- mock_ssh.SSH().execute.return_value = (0, '100', '')
+ mock_ssh.SSH().execute.side_effect = [(0, 'host1', ''),(0, 100, '')]
p.run(result)
self.assertEqual(result, {'rtt': 100.0})
@@ -53,13 +61,14 @@ class PingTestCase(unittest.TestCase):
def test_ping_successful_sla(self, mock_ssh):
args = {
+ 'options': {'host': 'host1','packetsize': 200},
'sla': {'max_rtt': 150}
- }
+ }
result = {}
p = ping6.Ping6(args, self.ctx)
p.client = mock_ssh.SSH()
- mock_ssh.SSH().execute.return_value = (0, '100', '')
+ mock_ssh.SSH().execute.side_effect = [(0, 'host1', ''),(0, 100, '')]
p.run(result)
self.assertEqual(result, {'rtt': 100.0})
@@ -67,28 +76,28 @@ class PingTestCase(unittest.TestCase):
def test_ping_unsuccessful_sla(self, mock_ssh):
args = {
- 'options': {'packetsize': 200},
+ 'options': {'host': 'host1','packetsize': 200},
'sla': {'max_rtt': 50}
}
result = {}
p = ping6.Ping6(args, self.ctx)
p.client = mock_ssh.SSH()
- mock_ssh.SSH().execute.return_value = (0, '100', '')
+ mock_ssh.SSH().execute.side_effect = [(0, 'host1', ''),(0, 100, '')]
self.assertRaises(AssertionError, p.run, result)
@mock.patch('yardstick.benchmark.scenarios.networking.ping6.ssh')
def test_ping_unsuccessful_script_error(self, mock_ssh):
args = {
- 'options': {'packetsize': 200},
- 'sla': {'max_rtt': 50}
+ 'options': {'host': 'host1','packetsize': 200},
+ 'sla': {'max_rtt': 150}
}
result = {}
p = ping6.Ping6(args, self.ctx)
p.client = mock_ssh.SSH()
- mock_ssh.SSH().execute.return_value = (1, '', 'FOOBAR')
+ mock_ssh.SSH().execute.side_effect = [(0, 'host1', ''),(1, '', 'FOOBAR')]
self.assertRaises(RuntimeError, p.run, result)
diff --git a/yardstick/benchmark/scenarios/networking/ping6.py b/yardstick/benchmark/scenarios/networking/ping6.py
index 5d878eb8f..067b8893e 100644
--- a/yardstick/benchmark/scenarios/networking/ping6.py
+++ b/yardstick/benchmark/scenarios/networking/ping6.py
@@ -25,9 +25,12 @@ class Ping6(base.Scenario): # pragma: no cover
__scenario_type__ = "Ping6"
TARGET_SCRIPT = 'ping6_benchmark.bash'
+ PRE_SETUP_SCRIPT = 'ping6_pre_setup.bash'
SETUP_SCRIPT = 'ping6_setup.bash'
+ FIND_HOST_SCRIPT = 'ping6_find_host.bash'
TEARDOWN_SCRIPT = 'ping6_teardown.bash'
METADATA_SCRIPT = 'ping6_metadata.txt'
+ POST_TEARDOWN_SCRIPT = 'ping6_post_teardown.bash'
def __init__(self, scenario_cfg, context_cfg):
self.scenario_cfg = scenario_cfg
@@ -35,13 +38,23 @@ class Ping6(base.Scenario): # pragma: no cover
self.setup_done = False
self.run_done = False
- def _ssh_host(self):
- # ssh host1
- host = self.context_cfg['host']
- host_user = host.get('user', 'ubuntu')
- host_ip = host.get('ip', None)
- host_pwd = host.get('password', 'root')
- LOG.info("user:%s, host:%s", host_user, host_ip)
+ def _pre_setup(self):
+ for node_name in self.host_list:
+ self._ssh_host(node_name)
+ self.client.run("cat > ~/pre_setup.sh",
+ stdin=open(self.pre_setup_script, "rb"))
+ status, stdout, stderr = self.client.execute(
+ "sudo bash pre_setup.sh")
+
+ def _ssh_host(self, node_name):
+ # ssh host
+ print node_name
+ nodes = self.context_cfg['nodes']
+ node = nodes.get(node_name, None)
+ host_user = node.get('user', 'ubuntu')
+ host_ip = node.get('ip', None)
+ host_pwd = node.get('password', 'root')
+ LOG.debug("user:%s, host:%s", host_user, host_ip)
self.client = ssh.SSH(host_user, host_ip, password=host_pwd)
self.client.wait(timeout=600)
@@ -51,11 +64,24 @@ class Ping6(base.Scenario): # pragma: no cover
'yardstick.benchmark.scenarios.networking',
Ping6.SETUP_SCRIPT)
+ self.pre_setup_script = pkg_resources.resource_filename(
+ 'yardstick.benchmark.scenarios.networking',
+ Ping6.PRE_SETUP_SCRIPT)
+
self.ping6_metadata_script = pkg_resources.resource_filename(
'yardstick.benchmark.scenarios.networking',
Ping6.METADATA_SCRIPT)
+
+ options = self.scenario_cfg['options']
+ host_str = options.get("host", 'host1')
+ self.host_list = host_str.split(',')
+ self.host_list.sort()
+ pre_setup = options.get("pre_setup", True)
+ if pre_setup:
+ self._pre_setup()
+
# ssh host1
- self._ssh_host()
+ self._ssh_host(self.host_list[0])
# run script to setup ipv6
self.client.run("cat > ~/setup.sh",
stdin=open(self.setup_script, "rb"))
@@ -73,9 +99,24 @@ class Ping6(base.Scenario): # pragma: no cover
'yardstick.benchmark.scenarios.networking',
Ping6.TARGET_SCRIPT)
- if not self.setup_done:
- self._ssh_host()
+ self.ping6_find_host_script = pkg_resources.resource_filename(
+ 'yardstick.benchmark.scenarios.networking',
+ Ping6.FIND_HOST_SCRIPT)
+ if not self.setup_done:
+ options = self.scenario_cfg['options']
+ host_str = options.get("host", 'host1')
+ self.host_list = host_str.split(',')
+ self.host_list.sort()
+ self._ssh_host(self.host_list[0])
+ self.client.run("cat > ~/find_host.sh",
+ stdin=open(self.ping6_find_host_script, "rb"))
+ cmd = "sudo bash find_host.sh"
+ LOG.debug("Executing command: %s", cmd)
+ status, stdout, stderr = self.client.execute(cmd)
+ host_name = stdout.strip()
+ print host_name
+ self._ssh_host(host_name)
self.client.run("cat > ~/ping6.sh",
stdin=open(self.ping6_script, "rb"))
cmd = "sudo bash ping6.sh"
@@ -99,8 +140,17 @@ class Ping6(base.Scenario): # pragma: no cover
def teardown(self):
"""teardown the benchmark"""
+ self.post_teardown_script = pkg_resources.resource_filename(
+ 'yardstick.benchmark.scenarios.networking',
+ Ping6.POST_TEARDOWN_SCRIPT)
+
+ options = self.scenario_cfg['options']
+ host_str = options.get("host", 'node1')
+ self.host_list = host_str.split(',')
+ self.host_list.sort()
+
if not self.run_done:
- self._ssh_host()
+ self._ssh_host(self.host_list[0])
self.teardown_script = pkg_resources.resource_filename(
'yardstick.benchmark.scenarios.networking',
@@ -110,6 +160,10 @@ class Ping6(base.Scenario): # pragma: no cover
cmd = "sudo bash teardown.sh"
status, stdout, stderr = self.client.execute(cmd)
+ post_teardown = options.get("post_teardown", True)
+ if post_teardown:
+ self._post_teardown()
+
if status:
raise RuntimeError(stderr)
@@ -117,3 +171,11 @@ class Ping6(base.Scenario): # pragma: no cover
pass
else:
LOG.error("ping6 teardown failed")
+
+ def _post_teardown(self):
+ for node_name in self.host_list:
+ self._ssh_host(node_name)
+ self.client.run("cat > ~/post_teardown.sh",
+ stdin=open(self.post_teardown_script, "rb"))
+ status, stdout, stderr = self.client.execute(
+ "sudo bash post_teardown.sh")
diff --git a/yardstick/benchmark/scenarios/networking/ping6_benchmark.bash b/yardstick/benchmark/scenarios/networking/ping6_benchmark.bash
index 6df354a1b..bd02be76e 100644
--- a/yardstick/benchmark/scenarios/networking/ping6_benchmark.bash
+++ b/yardstick/benchmark/scenarios/networking/ping6_benchmark.bash
@@ -10,11 +10,23 @@
##############################################################################
# Run a single ping6 command towards a ipv6 router
-
set -e
-
+source /opt/admin-openrc.sh
+chmod 600 vRouterKey
# TODO find host
-sudo ip netns exec qdhcp-$(neutron net-list | grep -w ipv4-int-network1 | awk '{print $2}') bash
-# TODO find VM ip
-ssh -i vRouterkey fedora@20.0.0.4
-ping6 -c 1 2001:db8:0:1::1 | grep ttl | awk -F [=\ ] '{printf $10}'
+wait_vm_ok() {
+ retry=0
+ until timeout 100s sudo ip netns exec qdhcp-$(neutron net-list | grep -w ipv4-int-network1 | awk '{print $2}') ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i vRouterKey fedora@20.0.0.4 "exit" >/dev/null 2>&1
+ do
+ sleep 10
+ let retry+=1
+ if [ $retry -ge 40 ];
+ then
+ echo "vm ssh start timeout !!!"
+ exit 0
+ fi
+ done
+}
+wait_vm_ok
+sleep 600
+sudo ip netns exec qdhcp-$(neutron net-list | grep -w ipv4-int-network1 | awk '{print $2}') ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i vRouterKey fedora@20.0.0.4 "ping6 -c 1 2001:db8:0:1::1 | grep ttl | awk -F [=\ ] '{printf \$10}'"
diff --git a/yardstick/benchmark/scenarios/networking/ping6_find_host.bash b/yardstick/benchmark/scenarios/networking/ping6_find_host.bash
new file mode 100644
index 000000000..a1d50d418
--- /dev/null
+++ b/yardstick/benchmark/scenarios/networking/ping6_find_host.bash
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+##############################################################################
+# Copyright (c) 2015 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
+##############################################################################
+
+source /opt/admin-openrc.sh
+host_num=$(neutron dhcp-agent-list-hosting-net ipv4-int-network1 | grep True | awk -F [=\ ] '{printf $4}') > /tmp/ipv6.log
+scp vRouterKey $host_num:~
+echo $host_num \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/networking/ping6_post_teardown.bash b/yardstick/benchmark/scenarios/networking/ping6_post_teardown.bash
new file mode 100644
index 000000000..f40d47d64
--- /dev/null
+++ b/yardstick/benchmark/scenarios/networking/ping6_post_teardown.bash
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+##############################################################################
+# Copyright (c) 2015 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
+##############################################################################
+sed -i 's/enable_security_group= False/enable_security_group = True/g' /etc/neutron/plugins/ml2/ml2_conf.ini
+sed -i 3d /etc/neutron/plugins/ml2/ml2_conf.ini
+sed -i 's/firewall_driver= neutron.agent.firewall.NoopFirewallDriver/firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver/g' /etc/neutron/plugins/ml2/ml2_conf.ini
+sed -i 's/security_group_api= nova/security_group_api = neutron/g' /etc/nova/nova.conf
+
+service neutron-l3-agent restart
+service neutron-dhcp-agent restart
+service neutron-metadata-agent restart
+service neutron-server restart
+service nova-api restart
+service nova-cert restart
+service nova-conductor restart
+service nova-consoleauth restart
+service nova-novncproxy restart
+service nova-scheduler restart
+service nova-compute restart \ No newline at end of file
diff --git a/yardstick/benchmark/scenarios/networking/ping6_pre_setup.bash b/yardstick/benchmark/scenarios/networking/ping6_pre_setup.bash
new file mode 100644
index 000000000..4a781d21e
--- /dev/null
+++ b/yardstick/benchmark/scenarios/networking/ping6_pre_setup.bash
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+##############################################################################
+# Copyright (c) 2015 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
+##############################################################################
+
+sed -i 's/enable_security_group = True/enable_security_group= False/g' /etc/neutron/plugins/ml2/ml2_conf.ini
+sed -i '2a extension_drivers = port_security' /etc/neutron/plugins/ml2/ml2_conf.ini
+sed -i 's/firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver/firewall_driver= neutron.agent.firewall.NoopFirewallDriver/g' /etc/neutron/plugins/ml2/ml2_conf.ini
+sed -i 's/security_group_api = neutron/security_group_api= nova/g' /etc/nova/nova.conf
+
+
+service neutron-l3-agent restart
+service neutron-dhcp-agent restart
+service neutron-metadata-agent restart
+service neutron-server restart
+service nova-api restart
+service nova-cert restart
+service nova-conductor restart
+service nova-consoleauth restart
+service nova-novncproxy restart
+service nova-scheduler restart
+service nova-compute restart
diff --git a/yardstick/benchmark/scenarios/networking/ping6_setup.bash b/yardstick/benchmark/scenarios/networking/ping6_setup.bash
index 2a54da2ba..ddb6c1cd9 100644
--- a/yardstick/benchmark/scenarios/networking/ping6_setup.bash
+++ b/yardstick/benchmark/scenarios/networking/ping6_setup.bash
@@ -9,17 +9,13 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+
# download and create image
source /opt/admin-openrc.sh
wget https://download.fedoraproject.org/pub/fedora/linux/releases/22/Cloud/x86_64/Images/Fedora-Cloud-Base-22-20150521.x86_64.qcow2
glance image-create --name 'Fedora22' --disk-format qcow2 \
--container-format bare --file ./Fedora-Cloud-Base-22-20150521.x86_64.qcow2
-# create external network
-neutron net-create net04_ext --router:external --provider:physical_network physnet \
---provider:network_type vlan --provider:segmentation_id 1411
-neutron subnet-create net04_ext 10.145.140.0/24 --name net04_ext__subnet \
---allocation-pool start=10.145.140.13,end=10.145.140.20 --disable-dhcp --gateway 10.145.140.1
# create router
neutron router-create ipv4-router
@@ -36,8 +32,8 @@ neutron subnet-create --name ipv4-int-subnet1 \
neutron router-interface-add ipv4-router ipv4-int-subnet1
# Associate the net04_ext to the Neutron routers
-neutron router-gateway-set ipv6-router net04_ext
-neutron router-gateway-set ipv4-router net04_ext
+neutron router-gateway-set ipv6-router ext-net
+neutron router-gateway-set ipv4-router ext-net
# Create two subnets, one IPv4 subnet ipv4-int-subnet2 and
# one IPv6 subnet ipv6-int-subnet2 in ipv6-int-network2, and associate both subnets to ipv6-router
diff --git a/yardstick/benchmark/scenarios/networking/ping6_teardown.bash b/yardstick/benchmark/scenarios/networking/ping6_teardown.bash
index 7ab145523..33eff5ca7 100644
--- a/yardstick/benchmark/scenarios/networking/ping6_teardown.bash
+++ b/yardstick/benchmark/scenarios/networking/ping6_teardown.bash
@@ -8,6 +8,7 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+source /opt/admin-openrc.sh
# delete VM
nova delete VM1
nova delete VM2
@@ -35,8 +36,8 @@ neutron subnet-delete --name ipv6-int-subnet2
neutron subnet-delete --name ipv4-int-subnet2
#clear gateway
-neutron router-gateway-clear ipv4-router net04_ext
-neutron router-gateway-clear ipv6-router net04_ext
+neutron router-gateway-clear ipv4-router ext-net
+neutron router-gateway-clear ipv6-router ext-net
#delete ipv4 router interface
neutron router-interface-delete ipv4-router ipv4-int-subnet1
@@ -50,9 +51,5 @@ neutron net-delete ipv4-int-network1
neutron router-delete ipv4-router
neutron router-delete ipv6-router
-# delete ext net
-neutron subnet-delete net04_ext__subnet
-neutron net-delete net04_ext
-
# delete glance image
-glance --os-image-api-version 1 image-delete Fedora22 \ No newline at end of file
+glance --os-image-api-version 1 image-delete Fedora22
diff --git a/yardstick/cmd/commands/task.py b/yardstick/cmd/commands/task.py
index 17e8f4c42..17e8f4c42 100755..100644
--- a/yardstick/cmd/commands/task.py
+++ b/yardstick/cmd/commands/task.py