From 95253bdf705a06ec01c2a04f437bae2ef23355c3 Mon Sep 17 00:00:00 2001 From: Tibor Frank Date: Thu, 16 Jun 2016 09:05:45 +0200 Subject: Add tests for Honeycomb L2 FIB support JIRA: CSIT-168 - add tests for Honeycomb L2 FIB support - add keywords for Honeycomb L2 FIB support - fix typos Change-Id: I81292c10e26e7ad05725034c1db1db0a81d29283 Signed-off-by: Tibor Frank --- tests/suites/honeycomb/3 - bridge_domain.robot | 2 +- tests/suites/honeycomb/6 - sub_interface.robot | 4 +- tests/suites/honeycomb/9 - l2_fib.robot | 229 +++++++++++++++++++++++++ tests/suites/honeycomb/resources/l2_fib.py | 142 +++++++++++++++ 4 files changed, 374 insertions(+), 3 deletions(-) create mode 100644 tests/suites/honeycomb/9 - l2_fib.robot create mode 100644 tests/suites/honeycomb/resources/l2_fib.py (limited to 'tests') diff --git a/tests/suites/honeycomb/3 - bridge_domain.robot b/tests/suites/honeycomb/3 - bridge_domain.robot index 61a67cc901..8eea9fb359 100644 --- a/tests/suites/honeycomb/3 - bridge_domain.robot +++ b/tests/suites/honeycomb/3 - bridge_domain.robot @@ -21,7 +21,7 @@ | ${bd2_name}= | bd-02 | &{bd_settings}= | flood=${True} | forward=${True} | learn=${True} | ... | unknown-unicast-flood=${True} | arp-termination=${True} -| &{if_settings}= | split_horizon_group=${1} | bvi=${True} +| &{if_settings}= | split_horizon_group=${1} | bvi=${False} *** Settings *** | Resource | resources/libraries/robot/default.robot diff --git a/tests/suites/honeycomb/6 - sub_interface.robot b/tests/suites/honeycomb/6 - sub_interface.robot index 6938082c16..8913814320 100644 --- a/tests/suites/honeycomb/6 - sub_interface.robot +++ b/tests/suites/honeycomb/6 - sub_interface.robot @@ -327,7 +327,7 @@ | | ... | this order. | | ... | | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - node - Information about a DUT node. Type: dictionary | | ... | - super_interface - Super interface. Type: string | | ... | - identifier - Sub-interface identifier. Type: integer or string | | ... @@ -347,7 +347,7 @@ | | ... | this order. | | ... | | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - node - Information about a DUT node. Type: dictionary | | ... | - super_interface - Super interface. Type: string | | ... | - identifier - Sub-interface identifier. Type: integer or string | | ... diff --git a/tests/suites/honeycomb/9 - l2_fib.robot b/tests/suites/honeycomb/9 - l2_fib.robot new file mode 100644 index 0000000000..bc56f4e85c --- /dev/null +++ b/tests/suites/honeycomb/9 - l2_fib.robot @@ -0,0 +1,229 @@ +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +*** Settings *** +| Resource | resources/libraries/robot/default.robot +| Resource | resources/libraries/robot/honeycomb/interfaces.robot +| Resource | resources/libraries/robot/honeycomb/bridge_domain.robot +| Resource | resources/libraries/robot/honeycomb/l2_fib.robot +| Variables | tests/suites/honeycomb/resources/l2_fib.py +| Documentation | *Honeycomb L2 FIB management test suite.* +| Suite Setup | Run keywords +| ... | Set test interface down +| ... | AND +| ... | Honeycomb removes all bridge domains | ${node} +| Suite Teardown | Honeycomb removes all bridge domains | ${node} +| Force tags | honeycomb_sanity + +*** Variables *** +# Node and interface used in tests. +| ${node}= | ${nodes['DUT1']} +| ${interface}= | GigabitEthernet0/8/0 + +*** Test Cases *** +| Honeycomb adds L2 FIB entry (forward) +| | [Documentation] | Honeycomb creates a bridge domain and assignes an \ +| | ... | interface to it. Then adds an L2 FIB entry (forward) to the bridge \ +| | ... | domain. +| | ... +| | [Teardown] | Honeycomb removes L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper['phys-address']} +| | ... +| | Given Interface state from Honeycomb should be +| | ... | ${node} | ${interface} | down +| | When Honeycomb sets interface state +| | ... | ${node} | ${interface} | up +| | Then Interface state from Honeycomb should be +| | ... | ${node} | ${interface} | up +| | When Honeycomb creates first l2 bridge domain +| | ... | ${node} | ${bd_name} | ${bd_settings} +| | Then Bridge domain configuration from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${bd_settings} +| | Given Bridge domain configuration in interface operational data should be empty +| | ... | ${node} | ${interface} +| | When Honeycomb adds interface to bridge domain +| | ... | ${node} | ${interface} | ${bd_name} | ${if_bd_settings} +| | Then Bridge domain configuration in interface operational data should be +| | ... | ${node} | ${interface} | ${if_bd_settings} +| | Given L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb adds L2 FIB entry to bridge domain +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_cfg} +| | Then L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper} +| | And L2 FIB entry from VAT should be +| | ... | ${node} | ${bd_index} | ${l2_fib_forward_vat} + +| Honeycomb adds L2 FIB entry (static, forward) +| | [Documentation] | Honeycomb adds an L2 FIB entry (static, forward) to the \ +| | ... | bridge domain. +| | ... +| | [Teardown] | Honeycomb removes L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_static_forward_oper['phys-address']} +| | ... +| | Given Bridge domain configuration in interface operational data should be +| | ... | ${node} | ${interface} | ${if_bd_settings} +| | And L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb adds L2 FIB entry to bridge domain +| | ... | ${node} | ${bd_name} | ${l2_fib_static_forward_cfg} +| | Then L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_static_forward_oper} +| | And L2 FIB entry from VAT should be +| | ... | ${node} | ${bd_index} | ${l2_fib_static_forward_vat} + +| Honeycomb adds L2 FIB entry (static, filter) +| | [Documentation] | Honeycomb adds an L2 FIB entry (static, filter) to the \ +| | ... | bridge domain. +| | ... +| | [Teardown] | Honeycomb removes L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_filter_oper['phys-address']} +| | ... +| | Given Bridge domain configuration in interface operational data should be +| | ... | ${node} | ${interface} | ${if_bd_settings} +| | And L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb adds L2 FIB entry to bridge domain +| | ... | ${node} | ${bd_name} | ${l2_fib_filter_cfg} +| | Then L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_filter_oper} +| | And L2 FIB entry from VAT should be +| | ... | ${node} | ${bd_index} | ${l2_fib_filter_vat} + +| Honeycomb adds and removes L2 FIB entry (forward) +| | [Documentation] | Honeycomb adds an L2 FIB entry (forward) to the bridge \ +| | ... | domain and then Honeycomb removes it from the bridge domain. +| | ... +| | [Teardown] | Honeycomb removes L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper['phys-address']} +| | ... +| | Given Bridge domain configuration in interface operational data should be +| | ... | ${node} | ${interface} | ${if_bd_settings} +| | And L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb adds L2 FIB entry to bridge domain +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_cfg} +| | Then L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper} +| | And L2 FIB entry from VAT should be +| | ... | ${node} | ${bd_index} | ${l2_fib_forward_vat} +| | When Honeycomb removes L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper['phys-address']} +| | Then L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} + +| Honeycomb adds more than one L2 FIB entry +| | [Documentation] | Honeycomb adds three L2 FIB entries to the bridge domain. +| | ... +| | [Teardown] | Honeycomb removes all L2 FIB entries +| | ... | ${node} | ${bd_name} +| | ... +| | Given Bridge domain configuration in interface operational data should be +| | ... | ${node} | ${interface} | ${if_bd_settings} +| | And L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb adds L2 FIB entry to bridge domain +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_cfg} +| | And Honeycomb adds L2 FIB entry to bridge domain +| | ... | ${node} | ${bd_name} | ${l2_fib_static_forward_cfg} +| | And Honeycomb adds L2 FIB entry to bridge domain +| | ... | ${node} | ${bd_name} | ${l2_fib_filter_cfg} +| | Then L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper} +| | And L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_static_forward_oper} +| | And L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_filter_oper} +| | And L2 FIB entry from VAT should be +| | ... | ${node} | ${bd_index} | ${l2_fib_forward_vat} +| | And L2 FIB entry from VAT should be +| | ... | ${node} | ${bd_index} | ${l2_fib_static_forward_vat} +| | And L2 FIB entry from VAT should be +| | ... | ${node} | ${bd_index} | ${l2_fib_filter_vat} + +| Honeycomb fails to set wrong L2 FIB entry +| | [Documentation] | Honeycomb tries to add an L2 FIB entry with wrong \ +| | ... | parameters to the bridge domain. It must fail. +| | ... +| | [Teardown] | Honeycomb removes all L2 FIB entries +| | ... | ${node} | ${bd_name} +| | ... +| | Given Bridge domain configuration in interface operational data should be +| | ... | ${node} | ${interface} | ${if_bd_settings} +| | And L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb fails to add wrong L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_cfg_wrong_mac} +| | Then L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb fails to add wrong L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_cfg_wrong_if} +| | Then L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb fails to add wrong L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_cfg_wrong_action} +| | Then L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} + +| Honeycomb fails to modify existing L2 FIB entry +| | [Documentation] | Honeycomb tries to modify an existing L2 FIB entry. It \ +| | ... | must fail. +| | ... +| | [Teardown] | Honeycomb removes all L2 FIB entries +| | ... | ${node} | ${bd_name} +| | ... +| | Given Bridge domain configuration in interface operational data should be +| | ... | ${node} | ${interface} | ${if_bd_settings} +| | And L2 FIB Table from Honeycomb should be empty +| | ... | ${node} | ${bd_name} +| | And L2 FIB Table from VAT should be empty +| | ... | ${node} | ${bd_index} +| | When Honeycomb adds L2 FIB entry to bridge domain +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_cfg} +| | Then L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper} +| | When Honeycomb fails to modify L2 FIB entry +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper['phys-address']} +| | ... | outgoing-interface +| | ... | ${l2_fib_forward_modified_cfg['outgoing-interface']} +| | Then L2 FIB Entry from Honeycomb should be +| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper} +| | And L2 FIB entry from VAT should be +| | ... | ${node} | ${bd_index} | ${l2_fib_forward_vat} + +*** Keywords *** +| Set test interface down +| | [Documentation] | Set the interface used in tests down. +| | ... +| | Honeycomb sets interface state +| | ... | ${node} | ${interface} | down diff --git a/tests/suites/honeycomb/resources/l2_fib.py b/tests/suites/honeycomb/resources/l2_fib.py new file mode 100644 index 0000000000..b06193ad1d --- /dev/null +++ b/tests/suites/honeycomb/resources/l2_fib.py @@ -0,0 +1,142 @@ +# Copyright (c) 2016 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Test variables for Honeycomb L2 FIB test suite.""" + +# Bridge domain name. +bd_name = 'test-l2-bd' +bd_index = 1 + +# Bridge domain settings used while creating a test bridge domain. +bd_settings = { + 'flood': True, + 'forward': True, + 'learn': True, + 'unknown-unicast-flood': True, + 'arp-termination': True +} + +# Bridge domain configuration used while adding the bridge domain to an +# interface. +if_bd_settings = { + 'bridge-domain': bd_name, + 'split-horizon-group': 1, + 'bridged-virtual-interface': False +} + +# Add L2 FIB entry (forward). +# Configuration data: +l2_fib_forward_cfg = { + "phys-address": "aa:bb:cc:dd:ee:ff", + "outgoing-interface": "GigabitEthernet0/8/0", + "action": "l2-fib-forward" +} + +# Expected operational data: +l2_fib_forward_oper = { + "phys-address": "aa:bb:cc:dd:ee:ff", + "outgoing-interface": "GigabitEthernet0/8/0", + "bridged-virtual-interface": False, + "action": "v3po:l2-fib-forward", + "static-config": False +} + +# Expected VAT data: +l2_fib_forward_vat = { + "mac": int("".join(l2_fib_forward_oper["phys-address"].split(':')), 16), + "static_mac": 0, + "filter_mac": 0, + "bvi_mac": 0 + } + +# Add L2 FIB entry (static, forward). +# Configuration data: +l2_fib_static_forward_cfg = { + "phys-address": "22:22:33:44:55:66", + "outgoing-interface": "GigabitEthernet0/8/0", + "static-config": True, + "action": "l2-fib-forward" +} + +# Expected operational data: +l2_fib_static_forward_oper = { + "phys-address": "22:22:33:44:55:66", + "outgoing-interface": "GigabitEthernet0/8/0", + "bridged-virtual-interface": False, + "action": "v3po:l2-fib-forward", + "static-config": True +} + +# Expected VAT data: +l2_fib_static_forward_vat = { + "mac": int("".join(l2_fib_static_forward_oper["phys-address"]. + split(':')), 16), + "sw_if_index": 5, + "static_mac": 1, + "filter_mac": 0, + "bvi_mac": 0 +} + +# Add L2 FIB entry (filter). +# Configuration data: +l2_fib_filter_cfg = { + "phys-address": "00:01:02:03:04:05", + "outgoing-interface": "GigabitEthernet0/8/0", + "static-config": True, + "action": "l2-fib-filter" +} + +# Expected operational data: +l2_fib_filter_oper = { + "phys-address": "00:01:02:03:04:05", + "outgoing-interface": "GigabitEthernet0/8/0", + "bridged-virtual-interface": False, + "action": "v3po:l2-fib-filter", + "static-config": True +} + +# Expected VAT data: +l2_fib_filter_vat = { + "mac": int("".join(l2_fib_filter_oper["phys-address"].split(':')), 16), + "sw_if_index": 5, + "static_mac": 1, + "filter_mac": 1, + "bvi_mac": 0 +} + +# WRONG configuration data - Add L2 FIB entry. +l2_fib_forward_cfg_wrong_mac = { + "phys-address": "WRONG-MAC", + "outgoing-interface": "GigabitEthernet0/8/0", + "action": "l2-fib-forward" +} + +l2_fib_forward_cfg_wrong_if = { + "phys-address": "aa:bb:cc:dd:ee:ff", + "outgoing-interface": "WRONG-INTERFACE", + "action": "l2-fib-forward" +} + +l2_fib_forward_cfg_wrong_action = { + "phys-address": "aa:bb:cc:dd:ee:ff", + "outgoing-interface": "GigabitEthernet0/8/0", + "action": "WRONG-ACTION" +} + +# Modify L2 FIB entry (forward). +# Configuration data: +l2_fib_forward_modified_cfg = { + "phys-address": "aa:bb:cc:dd:ee:ff", + "outgoing-interface": "GigabitEthernet0/9/0", + "action": "l2-fib-forward" +} -- cgit 1.2.3-korg