aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nfvbench/chaining.py22
-rw-r--r--pylint.rc2
-rw-r--r--test/test_chains.py30
3 files changed, 41 insertions, 13 deletions
diff --git a/nfvbench/chaining.py b/nfvbench/chaining.py
index 5e2d730..8d717aa 100644
--- a/nfvbench/chaining.py
+++ b/nfvbench/chaining.py
@@ -823,16 +823,17 @@ class ChainManager(object):
raise
else:
# no openstack, no need to create chains
- # make sure there at least as many entries as chains in each left/right list
- if len(config.vlans) != 2:
- raise ChainException('The config vlans property must be a list '
- 'with 2 lists of VLAN IDs')
- if not config.l2_loopback:
- self._get_dest_macs_from_config()
- re_vlan = "[0-9]*$"
- self.vlans = [self._check_list('vlans[0]', config.vlans[0], re_vlan),
- self._check_list('vlans[1]', config.vlans[1], re_vlan)]
+ if not config.l2_loopback and config.no_arp:
+ self._get_dest_macs_from_config()
+ if config.vlan_tagging:
+ # make sure there at least as many entries as chains in each left/right list
+ if len(config.vlans) != 2:
+ raise ChainException('The config vlans property must be a list '
+ 'with 2 lists of VLAN IDs')
+ re_vlan = "[0-9]*$"
+ self.vlans = [self._check_list('vlans[0]', config.vlans[0], re_vlan),
+ self._check_list('vlans[1]', config.vlans[1], re_vlan)]
def _get_dest_macs_from_config(self):
re_mac = "[0-9a-fA-F]{2}([-:])[0-9a-fA-F]{2}(\\1[0-9a-fA-F]{2}){4}$"
@@ -847,7 +848,8 @@ class ChainManager(object):
if isinstance(ll, (int, str)):
ll = [ll]
if not ll or len(ll) < self.chain_count:
- raise ChainException('%s=%s must be a list with 1 element per chain' % (list_name, ll))
+ raise ChainException('%s=%s must be a list with %d elements per chain' %
+ (list_name, ll, self.chain_count))
for item in ll:
if not re.match(pattern, str(item)):
raise ChainException("Invalid format '{item}' specified in {fname}"
diff --git a/pylint.rc b/pylint.rc
index 8f58824..953c7f6 100644
--- a/pylint.rc
+++ b/pylint.rc
@@ -384,6 +384,8 @@ max-statements=50
# Minimum number of public methods for a class (see R0903).
min-public-methods=0
+[ELIF]
+max-nested-blocks=6
[IMPORTS]
diff --git a/test/test_chains.py b/test/test_chains.py
index 36a29dd..109b73b 100644
--- a/test/test_chains.py
+++ b/test/test_chains.py
@@ -78,8 +78,28 @@ def test_chain_runner_ext_no_openstack():
config.vlans = [100, 200]
config['traffic_generator']['mac_addrs_left'] = ['00:00:00:00:00:00']
config['traffic_generator']['mac_addrs_right'] = ['00:00:00:00:01:00']
- runner = ChainRunner(config, None, specs, BasicFactory())
- runner.close()
+
+ for shared_net in [True, False]:
+ for no_arp in [False, True]:
+ for vlan_tag in [False, True]:
+ for scc in [1, 2]:
+ config = _get_chain_config(ChainType.EXT, scc, shared_net)
+ config.no_arp = no_arp
+ if no_arp:
+ # If EXT and no arp, the config must provide mac (1 pair per chain)
+ config['traffic_generator']['mac_addrs_left'] = ['00:00:00:00:00:00'] * scc
+ config['traffic_generator']['mac_addrs_right'] = ['00:00:00:00:01:00'] * scc
+ config['vlan_tagging'] = vlan_tag
+ if vlan_tag:
+ # these are the 2 valid forms of vlan ranges
+ if scc == 1:
+ config.vlans = [100, 200]
+ else:
+ config.vlans = [[port * 100 + index for index in range(scc)]
+ for port in range(2)]
+ runner = ChainRunner(config, None, specs, BasicFactory())
+ runner.close()
+
def _mock_find_image(self, image_name):
return True
@@ -129,7 +149,11 @@ def _test_ext_chain(config, cred, mock_glance, mock_neutron, mock_client):
runner.close()
def test_ext_chain_runner():
- """Test openstack+EXT chain runner."""
+ """Test openstack+EXT chain runner.
+
+ Test 8 combinations of configs:
+ shared/not shared net x arp/no_arp x scc 1 or 2
+ """
cred = MagicMock(spec=nfvbench.credentials.Credentials)
for shared_net in [True, False]:
for no_arp in [False, True]: