integration: Tunneling protocols support update 47/57047/3
authorMartin Klozik <martin.klozik@tieto.com>
Fri, 4 May 2018 08:11:46 +0000 (01:11 -0700)
committerMartin Klozik <martin.klozik@tieto.com>
Fri, 4 May 2018 09:25:21 +0000 (02:25 -0700)
Support of tunneling protocols by IxNet was limited to OP2P and PTUNP
deployment scenarios. This patch adds generic support for generation
of VXLAN, GRE and GENEVE frames by IxNet into integration testcases.

As part of this patch, the processing of tunnel type settings was
modified to follow VSPERF priority order during configuration parameter
evaluation.

JIRA: VSPERF-573

Change-Id: I7bf7d4a5545a6b130cc3ac252efaabe4b97bdb29
Signed-off-by: Martin Klozik <martin.klozik@tieto.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Christian Trautman <ctrautma@redhat.com>
Reviewed-by: Sridhar Rao <sridhar.rao@spirent.com>
Reviewed-by: Cian Ferriter <cian.ferriter@intel.com>
Reviewed-by: Richard Elias <richard.elias@tieto.com>
conf/02_vswitch.conf
conf/integration/01_testcases.conf
docs/testing/user/userguide/integration.rst
testcases/testcase.py

index 4d0fc46..c9ffa0b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2015-2016 Intel Corporation.
+# Copyright 2015-2018 Intel Corporation, Tieto and others.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -174,6 +174,10 @@ VSWITCHD_VANILLA_ARGS = []
 # Bridge name to be used by VSWTICH
 VSWITCH_BRIDGE_NAME = 'br0'
 
+# A tunnel type used by OP2P and PTUNP deployments
+# Supported values: 'vxlan', 'gre' or 'geneve'
+TUNNEL_TYPE = 'vxlan'
+
 # directory where hugepages will be mounted on system init
 HUGEPAGE_DIR = '/dev/hugepages'
 
index 8c013d2..142ec81 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2015-2017 Intel Corporation.
+# Copyright 2015-2018 Intel Corporation, Tieto and others.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# The 1st value of SUPPORTED_TUNNELING_PROTO is used as the default
-# tunneling protocol for OP2P tests.
-SUPPORTED_TUNNELING_PROTO = ['vxlan', 'gre', 'geneve']
-
 #
 # Generic test configuration options are described at conf/01_testcases.conf
 #
@@ -327,7 +323,6 @@ INTEGRATION_TESTS = [
     {
         "Name": "overlay_p2p_tput",
         "Deployment": "op2p",
-        "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
         "Tunnel Operation": "encapsulation",
         "Description": "Overlay Encapsulation Throughput RFC2544 Test",
         "Parameters": {
@@ -341,7 +336,6 @@ INTEGRATION_TESTS = [
     {
         "Name": "overlay_p2p_cont",
         "Deployment": "op2p",
-        "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
         "Tunnel Operation": "encapsulation",
         "Description": "Overlay Encapsulation RFC2544 Continuous Stream",
         "Parameters": {
@@ -355,7 +349,6 @@ INTEGRATION_TESTS = [
     {
         "Name": "overlay_p2p_decap_tput",
         "Deployment": "op2p",
-        "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
         "Tunnel Operation": "decapsulation",
         "Description": "Overlay Decapsulation Throughput RFC2544 Test",
         "Parameters": {
@@ -369,7 +362,6 @@ INTEGRATION_TESTS = [
     {
         "Name": "overlay_p2p_decap_cont",
         "Deployment": "op2p",
-        "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0],
         "Tunnel Operation": "decapsulation",
         "Description": "Overlay Decapsulation RFC2544 Continuous Stream",
         "Parameters": {
index 6680840..2b2246d 100644 (file)
@@ -1,6 +1,6 @@
 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
 .. http://creativecommons.org/licenses/by/4.0
-.. (c) OPNFV, Intel Corporation, AT&T and others.
+.. (c) OPNFV, Intel Corporation, AT&T, Tieto and others.
 
 .. _integration-tests:
 
@@ -22,6 +22,12 @@ P2P (Physical to Physical scenarios).
 NOTE: The configuration for overlay tests provided in this guide is for
 unidirectional traffic only.
 
+NOTE: The overlay tests require an IxNet traffic generator. The tunneled traffic
+is configured by ``ixnetrfc2544v2.tcl`` script. This script can be used
+with all supported deployment scenarios for generation of frames with VXLAN, GRE
+or GENEVE protocols. In that case options "Tunnel Operation" and
+"TRAFFICGEN_IXNET_TCL_SCRIPT" must be properly configured at testcase definition.
+
 Executing Integration Tests
 ---------------------------
 
index f28519f..68b8aec 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2015-2017 Intel Corporation.
+# Copyright 2015-2018 Intel Corporation, Tieto and others.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@ import subprocess
 
 from datetime import datetime as dt
 from conf import settings as S
-from conf import get_test_param, merge_spec
+from conf import merge_spec
 import core.component_factory as component_factory
 from core.loader import Loader
 from core.results.results_constants import ResultsConstants
@@ -85,6 +85,7 @@ class TestCase(object):
         S.setValue('VSWITCH', cfg.get('vSwitch', S.getValue('VSWITCH')))
         S.setValue('VNF', cfg.get('VNF', S.getValue('VNF')))
         S.setValue('TRAFFICGEN', cfg.get('Trafficgen', S.getValue('TRAFFICGEN')))
+        S.setValue('TUNNEL_TYPE', cfg.get('Tunnel Type', S.getValue('TUNNEL_TYPE')))
         test_params = copy.deepcopy(S.getValue('TEST_PARAMS'))
         tc_test_params = cfg.get('Parameters', S.getValue('TEST_PARAMS'))
         test_params = merge_spec(test_params, tc_test_params)
@@ -125,16 +126,7 @@ class TestCase(object):
         self.deployment = cfg['Deployment']
         self._frame_mod = cfg.get('Frame Modification', None)
 
-        self._tunnel_type = None
-        self._tunnel_operation = None
-
-        if self.deployment == 'op2p':
-            self._tunnel_operation = cfg['Tunnel Operation']
-
-            if 'Tunnel Type' in cfg:
-                self._tunnel_type = cfg['Tunnel Type']
-                self._tunnel_type = get_test_param('TUNNEL_TYPE',
-                                                   self._tunnel_type)
+        self._tunnel_operation = cfg.get('Tunnel Operation', None)
 
         # check if test requires background load and which generator it uses
         self._load_cfg = cfg.get('Load', None)
@@ -145,16 +137,14 @@ class TestCase(object):
 
         # set traffic details, so they can be passed to vswitch and traffic ctls
         self._traffic = copy.deepcopy(S.getValue('TRAFFIC'))
-        self._traffic.update({'bidir': bidirectional,
-                              'tunnel_type': self._tunnel_type,})
-
-        self._traffic = functions.check_traffic(self._traffic)
+        self._traffic.update({'bidir': bidirectional})
 
         # Packet Forwarding mode
         self._vswitch_none = str(S.getValue('VSWITCH')).strip().lower() == 'none'
 
         # trafficgen configuration required for tests of tunneling protocols
-        if self.deployment == "op2p":
+        if self._tunnel_operation:
+            self._traffic.update({'tunnel_type': S.getValue('TUNNEL_TYPE')})
             self._traffic['l2'].update({'srcmac':
                                         S.getValue('TRAFFICGEN_PORT1_MAC'),
                                         'dstmac':
@@ -166,9 +156,9 @@ class TestCase(object):
                                         S.getValue('TRAFFICGEN_PORT2_IP')})
 
             if self._tunnel_operation == "decapsulation":
-                self._traffic['l2'] = S.getValue(self._tunnel_type.upper() + '_FRAME_L2')
-                self._traffic['l3'] = S.getValue(self._tunnel_type.upper() + '_FRAME_L3')
-                self._traffic['l4'] = S.getValue(self._tunnel_type.upper() + '_FRAME_L4')
+                self._traffic['l2'].update(S.getValue(S.getValue('TUNNEL_TYPE').upper() + '_FRAME_L2'))
+                self._traffic['l3'].update(S.getValue(S.getValue('TUNNEL_TYPE').upper() + '_FRAME_L3'))
+                self._traffic['l4'].update(S.getValue(S.getValue('TUNNEL_TYPE').upper() + '_FRAME_L4'))
                 self._traffic['l2']['dstmac'] = S.getValue('NICS')[1]['mac']
         elif len(S.getValue('NICS')) >= 2 and \
              (S.getValue('NICS')[0]['type'] == 'vf' or
@@ -180,6 +170,8 @@ class TestCase(object):
             else:
                 self._logger.debug("MAC addresses can not be read")
 
+        self._traffic = functions.check_traffic(self._traffic)
+
         # count how many VNFs are involved in TestSteps
         if self.test:
             for step in self.test:
@@ -409,8 +401,8 @@ class TestCase(object):
                 item[ResultsConstants.SCAL_PRE_INSTALLED_FLOWS] = self._traffic['pre_installed_flows']
             if self._vnf_ctl.get_vnfs_number():
                 item[ResultsConstants.GUEST_LOOPBACK] = ' '.join(S.getValue('GUEST_LOOPBACK'))
-            if self._tunnel_type:
-                item[ResultsConstants.TUNNEL_TYPE] = self._tunnel_type
+            if self._tunnel_operation:
+                item[ResultsConstants.TUNNEL_TYPE] = S.getValue('TUNNEL_TYPE')
         return results
 
     def _copy_fwd_tools_for_all_guests(self, vm_count):