diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/ci/prepare_env.sh | 25 | ||||
-rw-r--r-- | tests/opnfv/test_cases/opnfv_yardstick_tc051.yaml | 90 | ||||
-rwxr-xr-x | tests/opnfv/test_cases/opnfv_yardstick_tc073.yaml | 37 | ||||
-rw-r--r-- | tests/unit/benchmark/scenarios/storage/test_storperf.py | 214 |
4 files changed, 366 insertions, 0 deletions
diff --git a/tests/ci/prepare_env.sh b/tests/ci/prepare_env.sh index 723a04aa1..35118b12c 100755 --- a/tests/ci/prepare_env.sh +++ b/tests/ci/prepare_env.sh @@ -55,3 +55,28 @@ export EXTERNAL_NETWORK INSTALLER_TYPE DEPLOY_TYPE NODE_NAME # Prepare a admin-rc file for StorPerf integration $YARDSTICK_REPO_DIR/tests/ci/prepare_storperf_admin-rc.sh + +# Fetching id_rsa file from jump_server..." +verify_connectivity() { + local ip=$1 + echo "Verifying connectivity to $ip..." + for i in $(seq 0 10); do + if ping -c 1 -W 1 $ip > /dev/null; then + echo "$ip is reachable!" + return 0 + fi + sleep 1 + done + error "Can not talk to $ip." +} + +ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + +if [ "$INSTALLER_TYPE" == "fuel" ]; then + #ip_fuel="10.20.0.2" + verify_connectivity $INSTALLER_IP + echo "Fetching id_rsa file from jump_server $INSTALLER_IP..." + sshpass -p r00tme scp 2>/dev/null $ssh_options \ + root@${INSTALLER_IP}:~/.ssh/id_rsa /root/.ssh/id_rsa &> /dev/null +fi + diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc051.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc051.yaml new file mode 100644 index 000000000..8e2e0c789 --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc051.yaml @@ -0,0 +1,90 @@ +--- +# Test case for TC051 :OpenStack Controller Node CPU Overload High Availability +# This test case is written by new scenario-based HA testing framework + +schema: "yardstick:task:0.1" +scenarios: + - + type: "GeneralHA" + options: + attackers: + - + fault_type: "general-attacker" + host: node1 + key: "stress-cpu" + attack_key: "stress-cpu" + + monitors: + - + monitor_type: "openstack-cmd" + key: "nova-image-list" + command_name: "nova image-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "neutron-router-list" + command_name: "neutron router-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "heat-stack-list" + command_name: "heat stack-list" + monitor_time: 10 + sla: + max_outage_time: 5 + + - + monitor_type: "openstack-cmd" + key: "cinder-list" + command_name: "cinder list" + monitor_time: 10 + sla: + max_outage_time: 5 + + + steps: + - + actionKey: "stress-cpu" + actionType: "attacker" + index: 1 + + - + actionKey: "nova-image-list" + actionType: "monitor" + index: 2 + + - + actionKey: "neutron-router-list" + actionType: "monitor" + index: 3 + + - + actionKey: "heat-stack-list" + actionType: "monitor" + index: 4 + + - + actionKey: "cinder-list" + actionType: "monitor" + index: 5 + + + nodes: + node1: node1.LF + runner: + type: Duration + duration: 1 + sla: + outage_time: 5 + action: monitor + +context: + type: Node + name: LF + file: etc/yardstick/nodes/fuel_virtual/pod.yaml diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc073.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc073.yaml new file mode 100755 index 000000000..fd95b8c9d --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc073.yaml @@ -0,0 +1,37 @@ +--- +# Yardstick TC073 config file +# measure network latency and throughput using netperf +# There are two sample scenarios: bulk test and request/response test +# In bulk test, UDP_STREAM and TCP_STREAM can be used +# send_msg_size and recv_msg_size are options of bulk test +# In req/rsp test, TCP_RR TCP_CRR UDP_RR can be used +# req_rsp_size is option of req/rsp test + +schema: "yardstick:task:0.1" +{% set host = host or "node1.LF" %} +{% set target = target or "node2.LF" %} +{% set pod_info = pod_info or "etc/yardstick/nodes/compass_sclab_physical/pod.yaml" %} +scenarios: +- + type: NetperfNode + options: + testname: 'UDP_STREAM' + send_msg_size: 1024 + duration: 20 + + host: {{host}} + target: {{target}} + + runner: + type: Iteration + iterations: 1 + interval: 1 + sla: + mean_latency: 100 + action: monitor + +context: + type: Node + name: LF + file: {{pod_info}} + diff --git a/tests/unit/benchmark/scenarios/storage/test_storperf.py b/tests/unit/benchmark/scenarios/storage/test_storperf.py new file mode 100644 index 000000000..d87ed733c --- /dev/null +++ b/tests/unit/benchmark/scenarios/storage/test_storperf.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python + +############################################################################## +# Copyright (c) 2016 Huawei Technologies Co.,Ltd. +# +# 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 +############################################################################## + +# Unittest for yardstick.benchmark.scenarios.storage.storperf.StorPerf + +import mock +import unittest +import requests +import json + +from yardstick.benchmark.scenarios.storage import storperf + + +def mocked_requests_config_post(*args, **kwargs): + class MockResponseConfigPost: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseConfigPost('{"stack_id": "dac27db1-3502-4300-b301-91c64e6a1622","stack_created": "false"}', 200) + + +def mocked_requests_config_get(*args, **kwargs): + class MockResponseConfigGet: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseConfigGet('{"stack_id": "dac27db1-3502-4300-b301-91c64e6a1622","stack_created": "true"}', 200) + + +def mocked_requests_job_get(*args, **kwargs): + class MockResponseJobGet: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseJobGet('{"_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}', 200) + + +def mocked_requests_job_post(*args, **kwargs): + class MockResponseJobPost: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseJobPost('{"job_id": \ + "d46bfb8c-36f4-4a40-813b-c4b4a437f728"}', 200) + + +def mocked_requests_job_delete(*args, **kwargs): + class MockResponseJobDelete: + def __init__(self, json_data, status_code): + self.content = json_data + self.status_code = status_code + + return MockResponseJobDelete('{}', 200) + + +def mocked_requests_delete(*args, **kwargs): + class MockResponseDelete: + def __init__(self, json_data, status_code): + self.json_data = json_data + self.status_code = status_code + + return MockResponseDelete('{}', 200) + + +def mocked_requests_delete_failed(*args, **kwargs): + class MockResponseDeleteFailed: + def __init__(self, json_data, status_code): + self.json_data = json_data + self.status_code = status_code + + if args[0] == "http://172.16.0.137:5000/api/v1.0/configurations": + return MockResponseDeleteFailed('{"message": "Teardown failed"}', 400) + + return MockResponseDeleteFailed('{}', 404) + + +class StorPerfTestCase(unittest.TestCase): + + def setUp(self): + self.ctx = { + 'host': { + 'ip': '172.16.0.137', + 'user': 'cirros', + 'key_filename': "mykey.key" + } + } + + self.result = {} + + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.post', + side_effect=mocked_requests_config_post) + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.get', + side_effect=mocked_requests_config_get) + def test_successful_setup(self, mock_post, mock_get): + options = { + "agent_count": 8, + "public_network": 'ext-net', + "volume_size": 10, + "block_sizes": 4096, + "queue_depths": 4, + "workload": "rs", + "StorPerf_ip": "192.168.23.2", + "query_interval": 10, + "timeout": 60 + } + + args = { + "options": options + } + + s = storperf.StorPerf(args, self.ctx) + + s.setup() + + self.assertTrue(s.setup_done) + + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.post', + side_effect=mocked_requests_job_post) + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.get', + side_effect=mocked_requests_job_get) + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.delete', + side_effect=mocked_requests_job_delete) + def test_successful_run(self, mock_post, mock_get, mock_delete): + options = { + "agent_count": 8, + "public_network": 'ext-net', + "volume_size": 10, + "block_sizes": 4096, + "queue_depths": 4, + "workload": "rs", + "StorPerf_ip": "192.168.23.2", + "query_interval": 10, + "timeout": 60 + } + + args = { + "options": options + } + + s = storperf.StorPerf(args, self.ctx) + s.setup_done = True + + sample_output = '{"_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}' + + expected_result = json.loads(sample_output) + + s.run(self.result) + + self.assertEqual(self.result, expected_result) + + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.delete', side_effect=mocked_requests_delete) + def test_successful_teardown(self, mock_delete): + options = { + "agent_count": 8, + "public_network": 'ext-net', + "volume_size": 10, + "block_sizes": 4096, + "queue_depths": 4, + "workload": "rs", + "StorPerf_ip": "192.168.23.2", + "query_interval": 10, + "timeout": 60 + } + + args = { + "options": options + } + + s = storperf.StorPerf(args, self.ctx) + + s.teardown() + + self.assertFalse(s.setup_done) + + @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.delete', side_effect=mocked_requests_delete_failed) + def test_failed_teardown(self, mock_delete): + options = { + "agent_count": 8, + "public_network": 'ext-net', + "volume_size": 10, + "block_sizes": 4096, + "queue_depths": 4, + "workload": "rs", + "StorPerf_ip": "192.168.23.2", + "query_interval": 10, + "timeout": 60 + } + + args = { + "options": options + } + + s = storperf.StorPerf(args, self.ctx) + + self.assertRaises(AssertionError, s.teardown(), self.result) + + +def main(): + unittest.main() + +if __name__ == '__main__': + main() |