From 6f6ed9af46d616b073481799c157ed3bc88a8810 Mon Sep 17 00:00:00 2001 From: Vincenzo Riccobene Date: Mon, 11 Jan 2016 11:59:48 +0000 Subject: Implementation of yardstick-tc006 in Yardstick Includes - Yardstick Scenario for integration with ApexLake - Yardstick Task .yaml file - Documentation JIRA: YARDSTICK-219 Change-Id: Iabde8fa63f346cf1e4a02691f22d1761de79a239 Signed-off-by: Vincenzo Riccobene --- .coveragerc | 1 + .../yardstick_testcases/opnfv_yardstick_tc006.rst | 136 +++++++++++++++++++++ run_tests.sh | 2 + setup.py | 1 + tests/opnfv/test_cases/opnfv_yardstick_tc006.yaml | 26 ++++ .../scenarios/networking/test_vtc_throughput.py | 48 ++++++++ .../scenarios/networking/vtc_throughput.py | 85 +++++++++++++ 7 files changed, 299 insertions(+) create mode 100644 docs/configguide/yardstick_testcases/opnfv_yardstick_tc006.rst create mode 100644 tests/opnfv/test_cases/opnfv_yardstick_tc006.yaml create mode 100644 tests/unit/benchmark/scenarios/networking/test_vtc_throughput.py create mode 100644 yardstick/benchmark/scenarios/networking/vtc_throughput.py diff --git a/.coveragerc b/.coveragerc index 07ca20984..d2e3447da 100644 --- a/.coveragerc +++ b/.coveragerc @@ -5,3 +5,4 @@ source = yardstick [report] ignore_errors = True precision = 3 +omit = yardstick/vTC/* diff --git a/docs/configguide/yardstick_testcases/opnfv_yardstick_tc006.rst b/docs/configguide/yardstick_testcases/opnfv_yardstick_tc006.rst new file mode 100644 index 000000000..b9fbf016e --- /dev/null +++ b/docs/configguide/yardstick_testcases/opnfv_yardstick_tc006.rst @@ -0,0 +1,136 @@ +.. _DPDKpktgen: https://github.com/Pktgen/Pktgen-DPDK/ +.. _rfc2544: https://www.ietf.org/rfc/rfc2544.txt + + +************************************* +Yardstick Test Case Description TC006 +************************************* ++-----------------------------------------------------------------------------+ +|Network Performance | ++==============+==============================================================+ +|test case id | OPNFV_YARDSTICK_TC006_Virtual Traffic Classifier Data Plane | +| | Throughput Benchmarking Test. | +| | | ++--------------+--------------------------------------------------------------+ +|metric | Throughput | +| | | ++--------------+--------------------------------------------------------------+ +|test purpose | To measure the throughput supported by the virtual Traffic | +| | Classifier according to the RFC2544 methodology for a | +| | user-defined set of vTC deployment configurations. | +| | | ++--------------+--------------------------------------------------------------+ +|configuration | file: file: opnfv_yardstick_tc006.yaml | +| | | +| | packet_size: size of the packets to be used during the | +| | throughput calculation. | +| | Allowe values: [64, 128, 256, 512, 1024, 1280, 1518] | +| | | +| | vnic_type: type of VNIC to be used. | +| | Allowed values are: | +| | - normal: for default OvS port configuration | +| | - direct: for SR-IOV port configuration | +| | Default value: None | +| | | +| | vtc_flavor: OpenStack flavor to be used for the vTC | +| | Default available values are: m1.small, m1.medium, | +| | and m1.large, but the user can create his/her own | +| | flavor and give it as input | +| | Default value: None | +| | | +| | vlan_sender: vlan tag of the network on which the vTC will | +| | receive traffic (VLAN Network 1). | +| | Allowed values: range (1, 4096) | +| | | +| | vlan_receiver: vlan tag of the network on which the vTC | +| | will send traffic back to the packet generator | +| | (VLAN Network 2). | +| | Allowed values: range (1, 4096) | +| | | +| | default_net_name: neutron name of the defaul network that | +| | is used for access to the internet from the vTC | +| | (vNIC 1). | +| | | +| | default_subnet_name: subnet name for vNIC1 | +| | (information available through Neutron). | +| | | +| | vlan_net_1_name: Neutron Name for VLAN Network 1 | +| | (information available through Neutron). | +| | | +| | vlan_subnet_1_name: Subnet Neutron name for VLAN Network 1 | +| | (information available through Neutron). | +| | | +| | vlan_net_2_name: Neutron Name for VLAN Network 2 | +| | (information available through Neutron). | +| | | +| | vlan_subnet_2_name: Subnet Neutron name for VLAN Network 2 | +| | (information available through Neutron). | +| | | ++--------------+--------------------------------------------------------------+ +|test tool | DPDK pktgen | +| | | +| | DPDK Pktgen is not part of a Linux distribution, | +| | hence it needs to be installed by the user. | +| | | ++--------------+--------------------------------------------------------------+ +|references | DPDK Pktgen: DPDKpktgen_ | +| | ETSI-NFV-TST001 | +| | RFC 2544: rfc2544_ | +| | | ++--------------+--------------------------------------------------------------+ +|applicability | Test can be configured with different flavors, vNIC type | +| | and packet sizes. Default values exist as specified above. | +| | The vNIC type and flavor MUST be specified by the user. | +| | | ++--------------+--------------------------------------------------------------+ +|pre-test | The vTC has been successfully instantiated and configured. | +| | The user has correctly assigned the values to the deployment | +| | configuration parameters. | +| | | +| | - Multicast traffic MUST be enabled on the network. | +| | The Data network switches need to be configured in | +| | order to manage multicast traffic. | +| | - In the case of SR-IOV vNICs use, SR-IOV compatible NICs | +| | must be used on the compute node. | +| | - Yarsdtick needs to be installed on a host connected to the | +| | data network and the host must have 2 DPDK-compatible | +| | NICs. Proper configuration of DPDK and DPDK pktgen is | +| | required before to run the test case. | +| | (For further instructions please refer to the ApexLake | +| | documentation). | +| | | ++-----------------------------------------------------------------------------+ +|test sequence | Description and expected results | +| | | ++-----------------------------------------------------------------------------+ +|step 1 | The vTC is deployed, according to the user-defined | +| | configuration | +| | | ++--------------+--------------------------------------------------------------+ +|step 2 | The vTC is correctly deployed and configured as necessary | +| | The initialization script has been correctly executed and | +| | vTC is ready to receive and process the traffic. | +| | | ++--------------+--------------------------------------------------------------+ +|step 3 | Test case is executed with the selected parameters: | +| | - vTC flavor | +| | - vNIC type | +| | - packet size | +| | The traffic is sent to the vTC using the maximum available | +| | traffic rate for 60 seconds. | +| | | ++--------------+--------------------------------------------------------------+ +|step 4 | The vTC instance forwards all the packets back to the packet | +| | generator for 60 seconds, as specified by RFC 2544. | +| | | +| | Steps 3 and 4 are executed different times, with different | +| | rates in order to find the maximum supported traffic rate | +| | according to the current definition of throughput in RFC | +| | 2544. | +| | | ++--------------+--------------------------------------------------------------+ +|test verdict | The result of the test is a number between 0 and 100 which | +| | represents the throughput in terms of percentage of the | +| | available pktgen NIC bandwidth. | +| | | ++--------------+--------------------------------------------------------------+ diff --git a/run_tests.sh b/run_tests.sh index d1567af9c..e093a20d3 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -74,6 +74,8 @@ run_functional_test() { fi } +export PYTHONPATH='yardstick/vTC/apexlake' + run_flake8 run_tests run_coverage diff --git a/setup.py b/setup.py index 48f00f47c..eb55e9283 100755 --- a/setup.py +++ b/setup.py @@ -40,6 +40,7 @@ setup( "six", "testrepository>=0.0.18", "testtools>=1.4.0" + "nose" ], extras_require={ 'plot': ["matplotlib>=1.4.2"] diff --git a/tests/opnfv/test_cases/opnfv_yardstick_tc006.yaml b/tests/opnfv/test_cases/opnfv_yardstick_tc006.yaml new file mode 100644 index 000000000..3d4091293 --- /dev/null +++ b/tests/opnfv/test_cases/opnfv_yardstick_tc006.yaml @@ -0,0 +1,26 @@ +--- +schema: "yardstick:task:0.1" + +scenarios: +- + type: vtc_throughput + + options: + packet_size: 1280 + vlan_sender: 1007 + vlan_receiver: 1006 + default_net_name: monitoring + default_subnet_name: monitoring_subnet + vlan_net_1_name: inbound_traffic_network + vlan_subnet_1_name: inbound_traffic_subnet + vlan_net_2_name: inbound_traffic_network + vlan_subnet_2_name: inbound_traffic_subnet + vnic_type: direct # [normal (OvS), direct (SR-IOV)] + vtc_flavor: m1.large + + runner: + type: Iteration + iterations: 1 + +context: + type: Dummy diff --git a/tests/unit/benchmark/scenarios/networking/test_vtc_throughput.py b/tests/unit/benchmark/scenarios/networking/test_vtc_throughput.py new file mode 100644 index 000000000..ecdf555d2 --- /dev/null +++ b/tests/unit/benchmark/scenarios/networking/test_vtc_throughput.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +############################################################################## +# Copyright (c) 2015 Ericsson AB 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 +############################################################################## + +# Unittest for yardstick.benchmark.scenarios.networking.iperf3.Iperf + +import mock +import unittest + +from yardstick.benchmark.scenarios.networking import vtc_throughput + + +class VtcThroughputTestCase(unittest.TestCase): + + def setUp(self): + scenario = dict() + scenario['options'] = dict() + scenario['options']['default_net_name'] = '' + scenario['options']['default_subnet_name'] = '' + scenario['options']['vlan_net_1_name'] = '' + scenario['options']['vlan_subnet_1_name'] = '' + scenario['options']['vlan_net_2_name'] = '' + scenario['options']['vlan_subnet_2_name'] = '' + scenario['options']['vnic_type'] = '' + scenario['options']['vtc_flavor'] = '' + scenario['options']['packet_size'] = '' + scenario['options']['vlan_sender'] = '' + scenario['options']['vlan_receiver'] = '' + + self.vt = vtc_throughput.VtcThroughput(scenario, '') + + def test_run_for_success(self): + result = {} + self.vt.run(result) + + +def main(): + unittest.main() + +if __name__ == '__main__': + main() diff --git a/yardstick/benchmark/scenarios/networking/vtc_throughput.py b/yardstick/benchmark/scenarios/networking/vtc_throughput.py new file mode 100644 index 000000000..fe7a88470 --- /dev/null +++ b/yardstick/benchmark/scenarios/networking/vtc_throughput.py @@ -0,0 +1,85 @@ +############################################################################# +# Copyright (c) 2015 Ericsson AB 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 +############################################################################## + +import logging +import os + +from yardstick.benchmark.scenarios import base +from experimental_framework import api as api + +LOG = logging.getLogger(__name__) + + +class VtcThroughput(base.Scenario): + """Execute Instantiation Validation TC on the vTC + """ + __scenario_type__ = "vtc_throughput" + + def __init__(self, scenario_cfg, context_cfg): + self.scenario_cfg = scenario_cfg + self.context_cfg = context_cfg + self.options = None + self.setup_done = False + + def setup(self): + '''scenario setup''' + + self.options = self.scenario_cfg['options'] + self.setup_done = True + + def run(self, result): + """execute test""" + + if not self.setup_done: + self.setup() + + heat_template = 'vTC.yaml' + iterations = 1 + + openstack_credentials = { + 'ip_controller': '0.0.0.0', + 'heat_url': '***', + 'auth_uri': os.environ.get('OS_AUTH_URL'), + 'user': os.environ.get('OS_USERNAME'), + 'password': os.environ.get('OS_PASSWORD'), + 'project': os.environ.get('OS_TENANT_NAME') + } + heat_template_parameters = { + 'default_net': self.options['default_net_name'], + 'default_subnet': self.options['default_subnet_name'], + 'source_net': self.options['vlan_net_1_name'], + 'source_subnet': self.options['vlan_subnet_1_name'], + 'destination_net': self.options['vlan_net_2_name'], + 'destination_subnet': self.options['vlan_subnet_2_name'] + } + deployment_configuration = { + 'vnic_type': [self.options['vnic_type']], + 'vtc_flavor': [self.options['vtc_flavor']] + } + + test_case = dict() + test_case['name'] = 'rfc2544_throughput_benchmark.' \ + 'RFC2544ThroughputBenchmark' + test_case['params'] = dict() + test_case['params']['packet_size'] = str(self.options['packet_size']) + test_case['params']['vlan_sender'] = str(self.options['vlan_sender']) + test_case['params']['vlan_receiver'] = \ + str(self.options['vlan_receiver']) + + try: + result = api.FrameworkApi.execute_framework( + [test_case], + iterations, + heat_template, + heat_template_parameters, + deployment_configuration, + openstack_credentials) + except Exception as e: + LOG.info('Exception: {}'.format(e.message)) + LOG.info('Got output: {}'.format(result)) -- cgit 1.2.3-korg