From 4f5f136f8d445c60db38c9f59622f379f04ff3bb Mon Sep 17 00:00:00 2001 From: selias Date: Wed, 8 Jun 2016 15:51:19 +0200 Subject: [PATCH] Update Honeycomb tests - add new negative test for bridged-virtual-interface setting - modify variables in original bd tests to use bvi=False - separate interface ipv4 test case into netmask and prefix - replace per-testcase tag definitions with per-suite forced tags - add separate tag for persistence suite, due to it's long execution time Change-Id: I79ae699125d4838ed8b394dc80a028e08b4de684 Signed-off-by: selias --- .../python/honeycomb/HcAPIKwInterfaces.py | 48 ------------ .../libraries/robot/honeycomb/bridge_domain.robot | 76 +++++++++++++++++- .../libraries/robot/honeycomb/interfaces.robot | 91 +++++++++++++++++++--- .../honeycomb/1 - interface_management.robot | 57 ++++++++++---- tests/suites/honeycomb/2 - vxlan.robot | 7 +- tests/suites/honeycomb/3 - bridge_domain.robot | 20 +++-- tests/suites/honeycomb/4 - tap.robot | 4 +- .../honeycomb/5 - interface_vhost_user.robot | 9 +-- tests/suites/honeycomb/6 - sub_interface.robot | 2 +- tests/suites/honeycomb/7 - persistence.robot | 2 +- 10 files changed, 213 insertions(+), 103 deletions(-) diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py index afd6076c7b..ec928a7567 100644 --- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py +++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py @@ -448,30 +448,6 @@ class InterfaceKeywords(object): return InterfaceKeywords._set_interface_properties( node, interface, path, None) - @staticmethod - def add_first_ipv4_neighbor(node, interface, ip_addr, link_layer_address): - """Add the first IPv4 neighbour. - - If there are any other neighbours configured, they will be removed. - - :param node: Honeycomb node. - :param interface: The name of interface. - :param ip_addr: IPv4 address of neighbour to be set. - :param link_layer_address: Link layer address. - :type node: dict - :type interface: str - :type ip_addr: str - :type link_layer_address: str - :return: Content of response. - :rtype: bytearray - """ - - path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv4") - neighbor = {"neighbor": [{"ip": ip_addr, - "link-layer-address": link_layer_address}, ]} - return InterfaceKeywords._set_interface_properties( - node, interface, path, neighbor) - @staticmethod def add_ipv4_neighbor(node, interface, ip_addr, link_layer_address): """Add the IPv4 neighbour. @@ -603,30 +579,6 @@ class InterfaceKeywords(object): return InterfaceKeywords._set_interface_properties( node, interface, path, None) - @staticmethod - def add_first_ipv6_neighbor(node, interface, ip_addr, link_layer_address): - """Add the first IPv6 neighbour. - - If there are any other neighbours configured, they will be removed. - - :param node: Honeycomb node. - :param interface: The name of interface. - :param ip_addr: IPv6 address of neighbour to be set. - :param link_layer_address: Link layer address. - :type node: dict - :type interface: str - :type ip_addr: str - :type link_layer_address: str - :return: Content of response. - :rtype: bytearray - """ - - path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv6") - neighbor = {"neighbor": [{"ip": ip_addr, - "link-layer-address": link_layer_address}, ]} - return InterfaceKeywords._set_interface_properties( - node, interface, path, neighbor) - @staticmethod def add_ipv6_neighbor(node, interface, ip_addr, link_layer_address): """Add the IPv6 neighbour. diff --git a/resources/libraries/robot/honeycomb/bridge_domain.robot b/resources/libraries/robot/honeycomb/bridge_domain.robot index 4c455ff50d..76122fa8f9 100644 --- a/resources/libraries/robot/honeycomb/bridge_domain.robot +++ b/resources/libraries/robot/honeycomb/bridge_domain.robot @@ -114,6 +114,29 @@ | | interfaceAPI.Add bridge domain to interface | | ... | ${node} | ${interface2} | ${bd_name} | &{settings} +| Honeycomb fails to add interfaces to bridge domain +| | [Documentation] | Uses Honeycomb API to assign interfaces to a bridge\ +| | ... | domain. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - interface1, interface2 - names of interfaces to assign to bridge\ +| | ... | domain. Type: string +| | ... | - bd_name - name of the bridge domain. Type: string +| | ... | - settings - bridge domain specific interface settings.\ +| | ... | Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Honeycomb fails to add interfaces to bridge domain \ +| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \ +| | ... | \| bd-04 \| ${{split_horizon_group:2, bvi:True}} \| +| | [Arguments] | ${node} | ${interface1} | ${interface2} | ${bd_name} +| | ... | ${settings} +| | Run keyword and expect error | *Failed to validate* +| | ... | Honeycomb adds interfaces to bridge domain | ${node} | ${interface1} +| | ... | ${interface2} | ${bd_name} | ${settings} + | Honeycomb should show interfaces assigned to bridge domain | | [Documentation] | Uses Honeycomb API to verify interface assignment to\ | | ... | bridge domain. @@ -146,6 +169,29 @@ | | ... | ${if2_data['v3po:l2']['bridged-virtual-interface']} | | ... | ${settings['bvi']} +| Honeycomb should not show interfaces assigned to bridge domain +| | [Documentation] | Uses Honeycomb API to verify interface assignment to\ +| | ... | bridge domain. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - interface1, interface2 - names of interfaces to check bridge domain\ +| | ... | assignment on. Type: string +| | ... | - bd_name - name of the bridge domain. Type: string +| | ... | - settings - bridge domain specific interface settings.\ +| | ... | Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Honeycomb should not show interfaces assigned to bridge domain \ +| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \ +| | ... | \| bd-04 \| ${{split_horizon_group:2, bvi:False}} \| +| | [Arguments] | ${node} | ${interface1} | ${interface2} | ${bd_name} +| | ... | ${settings} +| | Run keyword and expect error | *ValueError* +| | ... | Honeycomb should show interfaces assigned to bridge domain +| | ... | ${node} | ${interface1} | ${interface2} | ${bd_name} | ${settings} + | VAT should show interfaces assigned to bridge domain | | [Documentation] | Uses VAT to verify interface assignment to\ | | ... | bridge domain. @@ -154,9 +200,9 @@ | | ... | - node - Information about a DUT node. Type: dictionary | | ... | - index - Index of bridge domains on VPP node. Starts from 0,\ | | ... | new BDs reuse numbers after a bridge domain is removed. Type: int -| | ... | - interface1, interface2 - Names of interfaces to assign to bridge\ -| | ... | domain. Type: string -| | ... | - settings - Bridge domain specific interface settings.\ +| | ... | - interface1, interface2 - names of interfaces to check bridge domain\ +| | ... | assignment on. Type: string +| | ... | - settings - bridge domain specific interface settings.\ | | ... | Type: dictionary | | ... | | ... | *Example:* @@ -176,6 +222,30 @@ | | | Should contain | ${if_indices} | ${interface['sw_if_index']} | | | Should be equal | ${interface['shg']} | ${settings['split_horizon_group']} +| VAT should not show interfaces assigned to bridge domain +| | [Documentation] | Uses VAT to verify interface assignment to\ +| | ... | bridge domain, and expects to fail. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - index - index of bridge domains on VPP node. Starts from 0,\ +| | ... | new BDs reuse numbers after a bridge domain is removed. Type: integer +| | ... | - interface1, interface2 - names of interfaces to check bridge domain\ +| | ... | assignment on. Type: string +| | ... | - settings - bridge domain specific interface settings.\ +| | ... | Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| VAT should not show interfaces assigned to bridge domain \ +| | ... | \| ${nodes['DUT1']} \| ${4} \| GigabitEthernet0/8/0 \ +| | ... | \| GigabitEthernet0/9/0 \| ${{split_horizon_group:2, bvi:False}} \| +| | [Arguments] | ${node} | ${index} | ${interface1} | ${interface2} +| | ... | ${settings} +| | Run keyword and expect error | *No JSON object could be decoded* +| | ... | VAT should show interfaces assigned to bridge domain +| | ... | ${node} | ${index} | ${interface1} | ${interface2} | ${settings} + | Honeycomb removes all bridge domains | | [Documentation] | Uses Honeycomb API to remove all bridge domains from the \ | | ... | VPP node. diff --git a/resources/libraries/robot/honeycomb/interfaces.robot b/resources/libraries/robot/honeycomb/interfaces.robot index 02d0a49cb8..ea1d2b090b 100644 --- a/resources/libraries/robot/honeycomb/interfaces.robot +++ b/resources/libraries/robot/honeycomb/interfaces.robot @@ -90,7 +90,7 @@ | | ... | ${vat_data['admin_up_down']} == 1 | up | down | | Should be equal | ${vat_state} | ${state} -| Honeycomb sets interface ipv4 configuration +| Honeycomb sets interface ipv4 address | | [Documentation] | Uses Honeycomb API to change ipv4 configuration\ | | ... | of the specified interface. | | ... @@ -99,25 +99,21 @@ | | ... | - interface - name of an interface on the specified node. Type: string | | ... | - address - IP address to set. Type: string | | ... | - netmask - subnet mask to set. Type: string -| | ... | - fib_address - IP address to add to fib table. Type: string -| | ... | - fib_mac - MAC address to add to fib table. Type: string | | ... | - settings - ipv4 interface settings. Type: dictionary | | ... | | ... | *Example:* | | ... | | ... | \| Honeycomb sets interface ipv4 configuration \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 255.255.255.0 \ -| | ... | \| 192.168.0.3 \| 08:00:27:c0:5d:37 \ | | ... | \| ${{'enabled': True, 'mtu': 1500}} \| | | [Arguments] | ${node} | ${interface} | ${address} | ${netmask} -| | ... | ${fib_address} | ${fib_mac} | ${settings} +| | ... | ${settings} | | interfaceAPI.Add first ipv4 address | | ... | ${node} | ${interface} | ${address} | ${netmask} -| | interfaceAPI.Add first ipv4 neighbor -| | ... | ${node} | ${interface} | ${fib_address} | ${fib_mac} | | :FOR | ${key} | IN | @{settings.keys()} | | | interfaceAPI.Configure interface ipv4 | | | ... | ${node} | ${interface} | ${key} | ${settings['${key}']} +| | | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} | Honeycomb sets interface ipv4 address with prefix | | [Documentation] | Uses Honeycomb API to assign an ipv4 address to the\ @@ -128,14 +124,38 @@ | | ... | - interface - name of an interface on the specified node. Type: string | | ... | - address - IP address to set. Type: string | | ... | - prefix - length of address network prefix. Type: int +| | ... | - settings - ipv4 interface settings. Type: dictionary | | ... | | ... | *Example:* | | ... | | ... | \| Honeycomb sets interface ipv4 address with prefix \ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 24 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} +| | ... | ${settings} | | interfaceAPI.Add first ipv4 address | | ... | ${node} | ${interface} | ${address} | ${prefix} +| | :FOR | ${key} | IN | @{settings.keys()} +| | | interfaceAPI.Configure interface ipv4 +| | | ... | ${node} | ${interface} | ${key} | ${settings['${key}']} + +| Honeycomb adds interface ipv4 neighbor +| | [Documentation] | Uses Honeycomb API to assign an ipv4 neighbor to the\ +| | ... | specified interface. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - interface - name of an interface on the specified node. Type: string +| | ... | - fib_address - IP address to add to fib table. Type: string +| | ... | - fib_mac - MAC address to add to fib table. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Honeycomb adds interface ipv4 neighbor \| ${nodes['DUT1']} \ +| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.3 \| 08:00:27:c0:5d:37 \ +| | ... | \| ${{'enabled': True, 'mtu': 1500}} \| +| | [Arguments] | ${node} | ${interface} | ${fib_address} | ${fib_mac} +| | interfaceAPI.Add ipv4 neighbor +| | ... | ${node} | ${interface} | ${fib_address} | ${fib_mac} | IPv4 config from Honeycomb should be | | [Documentation] | Retrieves interface ipv4 configuration through Honeycomb\ @@ -145,7 +165,7 @@ | | ... | - node - information about a DUT node. Type: dictionary | | ... | - interface - name of an interface on the specified node. Type: string | | ... | - address - IP address to expect. Type: string -| | ... | - netmask - subnet mask to expect. Type: string +| | ... | - prefix - prefix length to expect. Type: string | | ... | - fib_address - IP address to expect in fib table. Type: string | | ... | - fib_mac - MAC address to expect in fib table. Type: string | | ... | - settings - ipv4 interface settings to expect. Type: dictionary @@ -156,13 +176,13 @@ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 255.255.255.0 \ | | ... | \| 192.168.0.3 \| 08:00:27:c0:5d:37 \ | | ... | \| ${{'enabled': True, 'mtu': 1500}} \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${netmask} +| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} | | ... | ${fib_address} | ${fib_mac} | ${settings} | | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} | | Should be equal | ${address} | | ... | ${api_data['ietf-ip:ipv4']['address'][0]['ip']} -| | Should be equal | ${netmask} -| | ... | ${api_data['ietf-ip:ipv4']['address'][0]['netmask']} +| | Should be equal | ${prefix} +| | ... | ${api_data['ietf-ip:ipv4']['address'][0]['prefix-length']} | | Should be equal | ${fib_address} | | ... | ${api_data['ietf-ip:ipv4']['neighbor'][0]['ip'] | | Should be equal | ${fib_mac} @@ -188,9 +208,58 @@ | | [Arguments] | ${node} | ${interface} | ${address} | ${netmask} | | ${vpp_data}= | interfaceCLI.VPP get interface ip addresses | | ... | ${node} | ${interface} | ipv4 +#TODO: update based on resolution of bug https://jira.fd.io/browse/VPP-132 | | Should be equal | ${vpp_data[0]['ip']} | ${address} | | Should be equal | ${vpp_data[0]['netmask']} | ${netmask} +| Honeycomb removes interface ipv4 addresses +| | [Documentation] | Removes all configured ipv4 addresses from the specified\ +| | ... | interface. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - interface - name of an interface on the specified node. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Honeycomb removes interface ipv4 addresses \| ${nodes['DUT1']} \ +| | ... | \| GigabitEthernet0/8/0 \| +| | [Arguments] | ${node} | ${interface} +| | Remove all ipv4 addresses | ${node} | ${interface} + +| IPv4 address from Honeycomb should be empty +| | [Documentation] | Retrieves interface ipv4 configuration through Honeycomb\ +| | ... | and expects to find no IPv4 addresses. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - interface - name of an interface on the specified node. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| IPv4 address from Honeycomb should be empty\| ${nodes['DUT1']} \ +| | ... | \| GigabitEthernet0/8/0 \| +| | [Arguments] | ${node} | ${interface} +| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | Should be empty | ${api_data['ietf-ip:ipv4']['address'] + +| IPv4 address from VAT should be empty +| | [Documentation] | Retrieves interface ipv4 configuration through VAT and\ +| | ... | and expects to find no ipv4 addresses. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - interface - name of an interface on the specified node. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| IPv4 config from VAT should be empty \| ${nodes['DUT1']} \ +| | ... | \| GigabitEthernet0/8/0 \| +| | [Arguments] | ${node} | ${interface} +| | Run keyword and expect error | *No JSON object could be decoded.* +| | ... | InterfaceCLI.VPP get interface ip addresses +| | ... | ${node} | ${interface} | ipv4 + | Honeycomb sets interface ipv6 configuration | | [Documentation] | Uses Honeycomb API to change ipv6 configuration\ | | ... | of the specified interface. diff --git a/tests/suites/honeycomb/1 - interface_management.robot b/tests/suites/honeycomb/1 - interface_management.robot index ce5fa0492f..01be01a6b0 100644 --- a/tests/suites/honeycomb/1 - interface_management.robot +++ b/tests/suites/honeycomb/1 - interface_management.robot @@ -16,8 +16,10 @@ | ${node}= | ${nodes['DUT1']} | ${interface}= | ${node['interfaces']['port1']['name']} # Configuration which will be set and verified during tests. -| @{ipv4_address_mask}= | 192.168.0.2 | 255.255.255.0 -| @{ipv4_address_prefix}= | 192.168.0.3 | ${16} +| ${ipv4_address}= | 192.168.0.2 +| ${ipv4_address2}= | 192.168.0.3 +| ${ipv4_mask}= | 255.255.255.0 +| ${ipv4_prefix}= | ${24} | @{ipv4_neighbor}= | 192.168.0.4 | 08:00:27:c0:5d:37 | &{ipv4_settings}= | enabled=${True} | forwarding=${True} | mtu=${9000} | @{ipv6_address}= | 10::10 | ${64} @@ -32,6 +34,7 @@ *** Settings *** | Resource | resources/libraries/robot/default.robot | Resource | resources/libraries/robot/honeycomb/interfaces.robot +| Force Tags | honeycomb_sanity | Documentation | *Honeycomb interface management test suite.* | ... | ... | Test suite uses the first interface of the first DUT node. @@ -40,7 +43,6 @@ | Honeycomb configures and reads interface state | | [Documentation] | Check if Honeycomb API can modify the admin state of\ | | ... | VPP interfaces. -| | [Tags] | honeycomb_sanity | | Given Interface state is | ${node} | ${interface} | down | | When Honeycomb sets interface state | ${node} | ${interface} | up | | Then Interface state from Honeycomb should be @@ -51,28 +53,50 @@ | | ... | ${node} | ${interface} | down | | And Interface state from VAT should be | ${node} | ${interface} | down -| Honeycomb modifies interface configuration - ipv4 -| | [Documentation] | Check if Honeycomb API can configure interfaces for ipv4. -| | [Tags] | honeycomb_sanity -| | When Honeycomb sets interface ipv4 configuration -| | ... | ${node} | ${interface} | @{ipv4_address_mask} | @{ipv4_neighbor} -| | ... | ${ipv4_settings} +| Honeycomb modifies interface configuration - ipv4 (netmask) +| | [Documentation] | Check if Honeycomb API can configure interfaces for ipv4\ +| | ... | with address and netmask provided. +| | When Honeycomb sets interface ipv4 address | ${node} | ${interface} +| | ... | ${ipv4_address} | ${ipv4_mask} | ${ipv4_settings} +| | And Honeycomb adds interface ipv4 neighbor +| | ... | ${node} | ${interface} | @{ipv4_neighbor} | | Then IPv4 config from Honeycomb should be -| | ... | ${node} | ${interface} | @{ipv4_address_mask} | @{ipv4_neighbor} -| | ... | ${ipv4_settings} +| | ... | ${node} | ${interface} | ${ipv4_address} | ${ipv4_prefix} +| | ... | @{ipv4_neighbor} | ${ipv4_settings} +| | And IPv4 config from VAT should be +| | ... | ${node} | ${interface} | ${ipv4_address} | ${ipv4_prefix} + +| Honeycomb removes ipv4 address from interface +| | [Documentation] | Check if Honeycomb API can remove configured ipv4\ +| | ... | addresses from interface. +| | Given IPv4 config from Honeycomb should be +| | ... | ${node} | ${interface} | ${ipv4_address} | ${ipv4_prefix} +| | ... | @{ipv4_neighbor} | ${ipv4_settings} | | And IPv4 config from VAT should be -| | ... | ${node} | ${interface} | @{ipv4_address_mask} +| | ... | ${node} | ${interface} | ${ipv4_address} | ${ipv4_prefix} +| | When Honeycomb removes interface ipv4 addresses | ${node} | ${interface} +| | Then IPv4 address from Honeycomb should be empty | ${node} |${interface} +| | And ipv4 address from VAT should be empty | ${node} | ${interface} + +| Honeycomb modifies interface configuration - ipv4 (prefix) +| | [Documentation] | Check if Honeycomb API can configure interfaces for ipv4\ +| | ... | with address and prefix provided. +| | [Teardown] | Honeycomb removes interface ipv4 addresses | ${node} +| | ... | ${interface} | | When Honeycomb sets interface ipv4 address with prefix -| | ... | ${node} | ${interface} | @{ipv4_address_prefix} +| | ... | ${node} | ${interface} | ${ipv4_address2} | ${ipv4_prefix} +| | ... | ${ipv4_settings} +| | And Honeycomb adds interface ipv4 neighbor +| | ... | ${node} | ${interface} | @{ipv4_neighbor} | | Then IPv4 config from Honeycomb should be -| | ... | ${node} | ${interface} | @{ipv4_address_prefix} | @{ipv4_neighbor} +| | ... | ${node} | ${interface} | ${ipv4_address2} | ${ipv4_prefix} +| | ... | @{ipv4_neighbor} | | ... | ${ipv4_settings} | | And IPv4 config from VAT should be -| | ... | ${node} | ${interface} | @{ipv4_address_prefix} +| | ... | ${node} | ${interface} | ${ipv4_address2} | ${ipv4_prefix} | Honeycomb modifies interface configuration - ipv6 | | [Documentation] | Check if Honeycomb API can configure interfaces for ipv6. -| | [Tags] | honeycomb_sanity | | When Honeycomb sets interface ipv6 configuration | | ... | ${node} | ${interface} | @{ipv6_address} | @{ipv6_neighbor} | | ... | ${ipv6_settings} @@ -85,7 +109,6 @@ | Honeycomb modifies interface configuration - ethernet,routing | | [Documentation] | Check if Honeycomb API can configure interface ethernet\ | | ... | and routing settings. -| | [Tags] | honeycomb_sanity | | When Honeycomb sets interface ethernet and routing configuration | | ... | ${node} | ${interface} | ${ethernet} | ${routing} | | Then Interface ethernet and routing configuration from Honeycomb should be diff --git a/tests/suites/honeycomb/2 - vxlan.robot b/tests/suites/honeycomb/2 - vxlan.robot index 64bfb3814c..c49c14c9f8 100644 --- a/tests/suites/honeycomb/2 - vxlan.robot +++ b/tests/suites/honeycomb/2 - vxlan.robot @@ -32,6 +32,7 @@ | Resource | resources/libraries/robot/honeycomb/vxlan.robot # import additional VxLAN settings from resource file | Variables | tests/suites/honeycomb/resources/vxlan.py +| Force Tags | honeycomb_sanity | Documentation | *Honeycomb VxLAN management test suite.* | ... | ... | Test suite uses the first interface of the first DUT node. @@ -39,7 +40,6 @@ *** Test Cases *** | Honeycomb configures VxLAN tunnel | | [Documentation] | Check if Honeycomb API can configure VxLAN settings. -| | [Tags] | honeycomb_sanity | | Given VxLAN configuration from Honeycomb should be empty | | ... | ${node} | ${vx_interface} | | And VxLAN configuration from VAT should be empty | ${node} @@ -52,7 +52,6 @@ | Honeycomb disables VxLAN tunnel | | [Documentation] | Check if Honeycomb API can reset VxLAN configuration. -| | [Tags] | honeycomb_sanity | | Given VxLAN configuration from Honeycomb should be | | ... | ${node} | ${vx_interface} | ${vxlan_settings} | | And VxLAN configuration from VAT should be @@ -65,7 +64,6 @@ Honeycomb can configure VXLAN tunnel after one has been disabled | | [Documentation] | Check if Honeycomb API can configure VxLAN settings again\ | | ... | after previous settings have been removed. -| | [Tags] | honeycomb_sanity | | [Teardown] | Honeycomb removes VxLAN tunnel settings | | ... | ${node} | ${vx_interface} | | Given VxLAN configuration from Honeycomb should be empty @@ -81,7 +79,6 @@ Honeycomb can configure VXLAN tunnel after one has been disabled | Honeycomb does not set VxLAN configuration on another interface type | | [Documentation] | Check if Honeycomb API prevents setting VxLAN\ | | ... | on incorrect interface. -| | [Tags] | honeycomb_sanity | | Given VxLAN configuration from Honeycomb should be empty | | ... | ${node} | ${interface} | | And VxLAN configuration from VAT should be empty | ${node} @@ -95,7 +92,6 @@ Honeycomb can configure VXLAN tunnel after one has been disabled | Honeycomb does not set invalid VxLAN configuration | | [Documentation] | Check if Honeycomb API prevents setting incorrect VxLAN\ | | ... | settings. -| | [Tags] | honeycomb_sanity | | Given VxLAN configuration from Honeycomb should be empty | | ... | ${node} | ${vx_interface} | | And VxLAN configuration from VAT should be empty | ${node} @@ -107,7 +103,6 @@ Honeycomb can configure VXLAN tunnel after one has been disabled | Honeycomb configures VxLAN tunnel with ipv6 | | [Documentation] | Check if Honeycomb API can configure VxLAN with\ | | ... | ipv6 settings. -| | [Tags] | honeycomb_sanity | | [Teardown] | Honeycomb removes VxLAN tunnel settings | | ... | ${node} | ${vx_interface} | | Given VxLAN configuration from Honeycomb should be empty diff --git a/tests/suites/honeycomb/3 - bridge_domain.robot b/tests/suites/honeycomb/3 - bridge_domain.robot index 8eea9fb359..c2986b65b7 100644 --- a/tests/suites/honeycomb/3 - bridge_domain.robot +++ b/tests/suites/honeycomb/3 - bridge_domain.robot @@ -22,12 +22,14 @@ | &{bd_settings}= | flood=${True} | forward=${True} | learn=${True} | ... | unknown-unicast-flood=${True} | arp-termination=${True} | &{if_settings}= | split_horizon_group=${1} | bvi=${False} +| &{if_settings2}= | split_horizon_group=${2} | bvi=${True} *** Settings *** | Resource | resources/libraries/robot/default.robot | Resource | resources/libraries/robot/honeycomb/interfaces.robot | Resource | resources/libraries/robot/honeycomb/bridge_domain.robot | Suite Teardown | Honeycomb removes all bridge domains | ${node} +| Force Tags | honeycomb_sanity | Documentation | *Honeycomb bridge domain management test suite.* | ... | ... | Test suite uses the first two interfaces on the first DUT node. @@ -35,7 +37,6 @@ *** Test Cases *** | Honeycomb sets up l2 bridge domain | | [Documentation] | Check if Honeycomb can create bridge domains on VPP node. -| | [Tags] | honeycomb_sanity | | When Honeycomb creates first l2 bridge domain | | ... | ${node} | ${bd1_name} | ${bd_settings} | | Then Bridge domain configuration from Honeycomb should be @@ -46,7 +47,6 @@ | Honeycomb manages multiple bridge domains on node | | [Documentation] | Check if Honeycomb can manage multiple bridge domains on\ | | ... | a single node. -| | [Tags] | honeycomb_sanity | | Given Bridge domain configuration from Honeycomb should be | | ... | ${node} | ${bd1_name} | ${bd_settings} | | When Honeycomb creates l2 bridge domain @@ -63,7 +63,6 @@ | Honeycomb removes bridge domains | | [Documentation] | Check if Honeycomb can remove bridge domains from a VPP\ | | ... | node. -| | [Tags] | honeycomb_sanity | | Given Bridge domain configuration from Honeycomb should be | | ... | ${node} | ${bd1_name} | ${bd_settings} | | When Honeycomb removes all bridge domains | ${node} @@ -73,7 +72,6 @@ | Honeycomb assigns interfaces to bridge domain | | [Documentation] | Check if Honeycomb can assign VPP interfaces to an\ | | ... | existing bridge domain. -| | [Tags] | honeycomb_sanity | | Given Honeycomb creates first l2 bridge domain | | ... | ${node} | ${bd1_name} | ${bd_settings} | | When Honeycomb adds interfaces to bridge domain @@ -86,7 +84,6 @@ | Honeycomb removes bridge domain with an interface assigned | | [Documentation] | Check if Honeycomb can remove a bridge domain that has an\ | | ... | interface assigned to it. -| | [Tags] | honeycomb_sanity | | Given Honeycomb should show interfaces assigned to bridge domain | | ... | ${node} | @{interfaces} | ${bd1_name} | ${if_settings} | | And VAT should show interfaces assigned to bridge domain @@ -94,3 +91,16 @@ | | When Honeycomb removes all bridge domains | ${node} | | Then Honeycomb should show no bridge domains | ${node} | | And VAT should show no bridge domains | ${node} + +| Honeycomb does not assign two bridged virtual interfaces to one bridge domain. +| | [Documentation] | Check if Honeycomb can assign two bridged virtual\ +| | ... | interfaces to a single bridge domain, and expect to fail. +| | [Teardown] | Honeycomb removes all bridge domains | ${node} +| | Given Honeycomb creates first l2 bridge domain +| | ... | ${node} | ${bd1_name} | ${bd_settings} +| | When Honeycomb fails to add interfaces to bridge domain +| | ... | ${node} | @{interfaces} | ${bd1_name} | ${if_settings2} +| | Then Honeycomb should not show interfaces assigned to bridge domain +| | ... | ${node} | @{interfaces} | ${bd1_name} | ${if_settings2} +| | And VAT should not show interfaces assigned to bridge domain +| | ... | ${node} | ${0} | @{interfaces} | ${if_settings2} diff --git a/tests/suites/honeycomb/4 - tap.robot b/tests/suites/honeycomb/4 - tap.robot index e3613c0e48..4bce990ee8 100644 --- a/tests/suites/honeycomb/4 - tap.robot +++ b/tests/suites/honeycomb/4 - tap.robot @@ -26,6 +26,7 @@ | Resource | resources/libraries/robot/default.robot | Resource | resources/libraries/robot/honeycomb/interfaces.robot | Resource | resources/libraries/robot/honeycomb/tap.robot +| Force Tags | honeycomb_sanity | Documentation | *Honeycomb TAP management test suite.* | ... | ... | Test suite uses the first interface of the first DUT node. @@ -33,7 +34,6 @@ *** Test Cases *** | Honeycomb configures TAP interface | | [Documentation] | Check if Honeycomb API can configure a TAP interface. -| | [Tags] | honeycomb_sanity | | Given TAP configuration from Honeycomb should be empty | | ... | ${node} | ${tap_interface} | | And TAP configuration from VAT should be empty @@ -48,7 +48,6 @@ | Honeycomb modifies existing TAP interface configuration | | [Documentation] | Check if Honeycomb API can re-configure and existing TAP\ | | ... | interface with new settings. -| | [Tags] | honeycomb_sanity | | Given TAP configuration from Honeycomb should be | | ... | ${node} | ${tap_interface} | ${tap_settings} | | And TAP configuration from VAT should be @@ -62,7 +61,6 @@ | Honeycomb removes TAP interface | | [Documentation] | Check if Honeycomb API can remove TAP interface. -| | [Tags] | honeycomb_sanity | | Given TAP configuration from Honeycomb should be | | ... | ${node} | ${tap_interface} | ${tap_settings2} | | And TAP configuration from VAT should be diff --git a/tests/suites/honeycomb/5 - interface_vhost_user.robot b/tests/suites/honeycomb/5 - interface_vhost_user.robot index 505eb8929b..bba026ebc4 100644 --- a/tests/suites/honeycomb/5 - interface_vhost_user.robot +++ b/tests/suites/honeycomb/5 - interface_vhost_user.robot @@ -26,6 +26,7 @@ *** Settings *** | Resource | resources/libraries/robot/default.robot | Resource | resources/libraries/robot/honeycomb/vhost_user.robot +| Force Tags | honeycomb_sanity | Documentation | *Honeycomb vhost-user interface management test suite.* | ... | ... | This test suite tests if it is posible to create, modify and\ @@ -35,7 +36,6 @@ | Honycomb creates vhost-user interface - server | | [Documentation] | Check if Honeycomb creates a vhost-user interface, role:\ | | ... | server. -| | [Tags] | honeycomb_sanity | | ... | | Given vhost-user configuration from Honeycomb should be empty | | ... | ${node} | ${vhost_interface} @@ -49,7 +49,6 @@ | Honycomb modifies vhost-user interface - server | | [Documentation] | Check if Honeycomb can modify properties of existing\ | | ... | vhost-user interface, role: server. -| | [Tags] | honeycomb_sanity | | ... | | Given vhost-user configuration from Honeycomb should be | | ... | ${node} | ${vhost_interface} | ${vhost_user_server} @@ -75,7 +74,6 @@ | Honycomb deletes vhost-user interface - server | | [Documentation] | Check if Honeycomb can delete an existing vhost-user\ | | ... | interface, role: server. -| | [Tags] | honeycomb_sanity | | ... | | Given vhost-user configuration from Honeycomb should be | | ... | ${node} | ${vhost_interface} | ${vhost_user_server} @@ -89,7 +87,6 @@ | Honycomb creates vhost-user interface - client | | [Documentation] | Check if Honeycomb creates a vhost-user interface, role:\ | | ... | client. -| | [Tags] | honeycomb_sanity | | ... | | Given vhost-user configuration from Honeycomb should be empty | | ... | ${node} | ${vhost_interface} @@ -103,7 +100,6 @@ | Honycomb modifies vhost-user interface - client | | [Documentation] | Check if Honeycomb can modify properties of existing\ | | ... | vhost-user interface, role: client. -| | [Tags] | honeycomb_sanity | | ... | | Given vhost-user configuration from Honeycomb should be | | ... | ${node} | ${vhost_interface} | ${vhost_user_client} @@ -129,7 +125,6 @@ | Honycomb deletes vhost-user interface - client | | [Documentation] | Check if Honeycomb can delete an existing vhost-user\ | | ... | interface, role: client. -| | [Tags] | honeycomb_sanity | | ... | | Given vhost-user configuration from Honeycomb should be | | ... | ${node} | ${vhost_interface} | ${vhost_user_client} @@ -143,7 +138,6 @@ | Honeycomb does not set vhost-user configuration on another interface type | | [Documentation] | Check if Honeycomb refuses to set vhost-user\ | | ... | configuration for interface which is not v3po:vhost-user type. -| | [Tags] | honeycomb_sanity | | ... | | When Honeycomb fails setting vhost-user on different interface type | | ... | ${node} | ${interface} | ${vhost_user_server} @@ -155,7 +149,6 @@ | Honeycomb does not set invalid vhost-user configuration | | [Documentation] | Check if Honeycomb refuses to set invalid parameters to\ | | ... | vhost-user interface. -| | [Tags] | honeycomb_sanity | | ... | | Given vhost-user configuration from Honeycomb should be empty | | ... | ${node} | ${vhost_interface} diff --git a/tests/suites/honeycomb/6 - sub_interface.robot b/tests/suites/honeycomb/6 - sub_interface.robot index 49f56914be..0ad6deb0d6 100644 --- a/tests/suites/honeycomb/6 - sub_interface.robot +++ b/tests/suites/honeycomb/6 - sub_interface.robot @@ -18,11 +18,11 @@ | Resource | resources/libraries/robot/honeycomb/interfaces.robot | Variables | tests/suites/honeycomb/resources/sub_interfaces.py | Suite Teardown | Honeycomb removes all bridge domains | ${node} +| Force Tags | honeycomb_sanity | Documentation | *Honeycomb sub-interface management test suite.* | ... | ... | This test suite tests if it is posible to create, modify and \ | ... | delete a sub-interface. -| Force Tags | honeycomb_sanity *** Variables *** | ${node}= | ${nodes['DUT1']} diff --git a/tests/suites/honeycomb/7 - persistence.robot b/tests/suites/honeycomb/7 - persistence.robot index f992b64010..ad0aeced8d 100644 --- a/tests/suites/honeycomb/7 - persistence.robot +++ b/tests/suites/honeycomb/7 - persistence.robot @@ -21,8 +21,8 @@ | Resource | resources/libraries/robot/honeycomb/persistence.robot | Suite Setup | Restart Honeycomb and VPP and clear persisted configuration | ... | ${node} +| Force Tags | honeycomb_persistence | Documentation | *Honeycomb configuration persistence test suite.* -| Force Tags | honeycomb_sanity *** Test Cases *** | Honeycomb persists configuration through restart of both Honeycomb and VPP -- 2.16.6