diff options
Diffstat (limited to 'resources/libraries/robot')
29 files changed, 0 insertions, 6855 deletions
diff --git a/resources/libraries/robot/honeycomb/access_control_lists.robot b/resources/libraries/robot/honeycomb/access_control_lists.robot deleted file mode 100644 index 57016f9a1a..0000000000 --- a/resources/libraries/robot/honeycomb/access_control_lists.robot +++ /dev/null @@ -1,447 +0,0 @@ -# Copyright (c) 2019 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. - -*** Variables *** -#TODO: update based on resolution of bug https://jira.fd.io/browse/HONEYCOMB-119 - -*** Settings *** -| Library | resources.libraries.python.Classify -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.honeycomb.HcAPIKwACL.ACLKeywords -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Documentation | Keywords used to manage ACLs. - -*** Keywords *** -| Honeycomb creates ACL table -| | [Documentation] | Uses Honeycomb API to create an ACL table. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - settings - ACL table settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb creates ACL table \| ${nodes['DUT1']} \ -| | ... | \| ${settings} \| -| | [Arguments] | ${node} | ${settings} -| | Add classify table | ${node} | ${settings} - -| Honeycomb removes ACL table -| | [Documentation] | Uses Honeycomb API to remove and existing ACL table. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_name - name of an ACL table. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes ACL table \| ${nodes['DUT1']} \| table0 \| -| | [Arguments] | ${node} | ${table_name} -| | Remove classify table | ${node} | ${table_name} - -| Honeycomb adds ACL session -| | [Documentation] | Uses Honeycomb API to create an ACL session. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_name - name of an ACL table. Type: string -| | ... | - settings - ACL session settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds ACL session \| ${nodes['DUT1']} \ -| | ... | \| table0 \| ${settings} \| -| | [Arguments] | ${node} | ${table_name} | ${settings} -| | Add classify session | ${node} | ${table_name} | ${settings} - -| Honeycomb removes ACL session -| | [Documentation] | Uses Honeycomb API to remove an ACL session. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_name - name of an ACL table. Type: string -| | ... | - match - ACL session match setting. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes ACL session \| ${nodes['DUT1']} \ -| | ... | \| table0 \| 00:00:00:00:00:00:01:02:03:04:05:06:00:00:00:00 \| -| | [Arguments] | ${node} | ${table_name} | ${match} -| | Remove classify session | ${node} | ${table_name} | ${match} - -| Honeycomb enables ACL on interface -| | [Documentation] | Uses Honeycomb API to enable ACL on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - table_name - name of an ACL table. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb enables ACL on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabithEthernet0/8/0 \| table0 \| -| | [Arguments] | ${node} | ${interface} | ${table_name} -| | Enable ACL on interface -| | ... | ${node} | ${interface} | ${table_name} - -| Honeycomb disables ACL on interface -| | [Documentation] | Uses Honeycomb API to disable ACL on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb disables ACL on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabithEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | Disable ACL on interface | ${node} | ${interface} - -| ACL table from Honeycomb should be -| | [Documentation] | Retrieves ACL table information from Honeycomb\ -| | ... | and compares with expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - settings - expected ACL table settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ACL table from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| ${settings} \| -| | [Arguments] | ${node} | ${settings} -| | ${data}= | Get classify table oper data | ${node} | ${settings['name']} -| | Compare data structures | ${data} | ${settings} - -| ACL table from VAT should be -| | [Documentation] | Retrieves ACL table information from VAT\ -| | ... | and compares with expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_index - VPP internal index of an ACL table. Type: integer -| | ... | - settings - expected ACL table settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ACL session from PAPI should be \| ${nodes['DUT1']} \ -| | ... | \| ${0} \| ${settings} \| -| | [Arguments] | ${node} | ${table_index} | ${settings} -| | ${data}= | Get classify table data | ${node} | ${table_index} -| | Compare data structures | ${data} | ${settings} - -| ACL table from Honeycomb should not exist -| | [Documentation] | Retrieves ACL table information from Honeycomb\ -| | ... | and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_name - name of an ACL table. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ACL table from Honeycomb should not exist \| ${nodes['DUT1']} \ -| | ... | \| table0 \| -| | [Arguments] | ${node} | ${table_name} -| | Run keyword and expect error | * -| | ... | Get classify table oper data | ${node} | ${table_name} - -| ACL table from VAT should not exist -| | [Documentation] | Retrieves ACL table information from VAT\ -| | ... | and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_index - VPP internal index of an ACL table. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ACL table from VAT should not exist \| ${nodes['DUT1']} \ -| | ... | \| ${0} \| -| | [Arguments] | ${node} | ${table_index} -| | Run keyword and expect error | * -| | ... | Get classify table data | ${node} | ${table_index} - -| ACL session from Honeycomb should be -| | [Documentation] | Retrieves ACL session information from Honeycomb\ -| | ... | and compares with expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_name - name of an ACL table. Type: string -| | ... | - settings - expected ACL session settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ACL session from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| table0 \| ${settings} \| -| | [Arguments] | ${node} | ${table_name} | ${settings} -| | ${data}= | Get classify session oper data -| | ... | ${node} | ${table_name} | ${settings['match']} -| | Compare data structures | ${data} | ${settings} - -| ACL session from PAPI should be -| | [Documentation] | Retrieves ACL session information from PAPI\ -| | ... | and compares with expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_index - VPP internal index of an ACL table. Type: integer -| | ... | - settings - expected ACL session settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ACL session from PAPI should be \| ${nodes['DUT1']} \ -| | ... | \| ${0} \| ${settings} \| -| | [Arguments] | ${node} | ${table_index} | ${session_index} | ${settings} -| | ${data}= | Get classify session data | ${node} | ${table_index} -| | Compare data structures | ${data} | ${settings} - -| ACL session from Honeycomb should not exist -| | [Documentation] | Retrieves ACL session information from Honeycomb\ -| | ... | and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_name - name of an ACL table. Type: string -| | ... | - session_match - ACL session match setting. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ACL session from Honeycomb should not exist \| ${nodes['DUT1']} \ -| | ... | \| table0 \| 00:00:00:00:00:00:01:02:03:04:05:06:00:00:00:00 \| -| | [Arguments] | ${node} | ${table_name} | ${session_match} -| | Run keyword and expect error | *KeyError:* -| | ... | Get classify session oper data -| | ... | ${node} | ${table_name} | ${session_match} - -| ACL session from PAPI should not exist -| | [Documentation] | Retrieves ACL session information from PAPI\ -| | ... | and compares with expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - table_index - VPP internal index of an ACL table. Type: integer -| | ... | - session_index - VPP internal index of an ACL session. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ACL session from PAPI should not exist \| ${nodes['DUT1']} \ -| | ... | \| ${0} \| -| | [Arguments] | ${node} | ${table_index} -| | Run keyword if | ${session_index} == 0 -| | ... | Run keyword and expect error -| | ... | ValueError: No JSON object could be decoded -| | ... | Get classify session data | ${node} | ${table_index} -| | Run keyword if | ${session_index} > 0 -| | ... | Run keyword and expect error -| | ... | IndexError: list index out of range -| | ... | Get classify session data | ${node} | ${table_index} - -| Interface ACL configuration from Honeycomb should be -| | [Documentation] | Retrieves ACL interface settings from Honeycomb\ -| | ... | and compares with expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - table_name - expected ACL table name. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface ACL configuration from Honeycomb should be \ -| | ... | \| ${nodes['DUT1']} \| GigabithEthernet0/8/0 \| table0 \| -| | [Arguments] | ${node} | ${interface} | ${table_name} -| | ${data}= | Get interface oper data | ${node} | ${interface} -| | Should be equal -| | ... | ${table_name} -| | ... | ${data['vpp-interface-acl:acl']['ingress']['l2-acl']['classify-table']} -| | ... | ${data['vpp-interface-acl:acl']['ingress']['ip4-acl']['classify-table']} - -| Interface ACL configuration from VAT should be -| | [Documentation] | Retrieves ACL interface settings from VAT\ -| | ... | and compares with expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - table_index - VPP internal index of an ACL table. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface ACL configuration from VAT should be \ -| | ... | \| ${nodes['DUT1']} \| GigabithEthernet0/8/0 \| ${0} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${table_index} -| | ${data}= | Get interface classify table | ${node} | ${interface} -| | Should be equal | ${table_index} | ${data['l2_table_id']} -| | Should be equal | ${table_index} | ${data['ip4_table_id']} - -| Interface ACL configuration from Honeycomb should be empty -| | [Documentation] | Retrieves ACL interface settings from Honeycomb\ -| | ... | and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface ACL configuration from Honeycomb should be empty \ -| | ... | \| ${nodes['DUT1']} \| GigabithEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | ${data}= | Get interface oper data | ${node} | ${interface} -| | Run keyword and expect error | *KeyError: 'vpp-interface-acl:acl' -| | ... | Set Variable -| | ... | ${data['vpp-interface-acl:acl']['l2-acl']['classify-table']} - -| Interface ACL configuration from VAT should be empty -| | [Documentation] | Retrieves ACL interface settings from VAT\ -| | ... | and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface ACL configuration from Honeycomb should be empty \ -| | ... | \| ${nodes['DUT1']} \| GigabithEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | ${data}= | Get interface classify table | ${node} | ${interface} -| | ${bitwise_non_zero}= | Convert To Integer | ${0xFFFFFFFF} -| | Should be equal | ${data['l2_table_id']} | ${bitwise_non_zero} -| | Should be equal | ${data['ip4_table_id']} | ${bitwise_non_zero} - -| Clear all ACL settings -| | [Documentation] | Removes all ACL sessions and tables from Honeycomb\ -| | ... | configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Clear all ACL settings \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Remove all classify tables | ${node} - -| Honeycomb creates ACL chain through ACL plugin -| | [Documentation] | Creates classify chain using the ACL plugin. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - acl_list_name - Name for the classify chain. Type: string -| | ... | - acl_list_settings - classify rules. Type: dictionary -| | ... | - macip - Use MAC+IP classifier. Optional. Type: boolean -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb creates ACL chain through ACL plugin \ -| | ... | \| ${nodes['DUT1']} \| acl_test \| ${settings} \| -| | [Arguments] | ${node} | ${acl_list_name} | ${acl_list_settings} -| | ... | ${macip}=${False} -| | Create ACL plugin classify chain -| | ... | ${node} | ${acl_list_name} | ${acl_list_settings} - -| Honeycomb assigns plugin-ACL chain to interface -| | [Documentation] | Applies classification through the high-level\ -| | ... | IETF-ACL node to an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - Interface to assign classifier to. Type: string -| | ... | - acl_list_name - Name of the clasify chain. Type: string -| | ... | - direction - Classifier direction, ingress or egress. Type: string -| | ... | - macip - Use MAC+IP classifier. Optional. Type: boolean -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb assigns plugin-ACL chain to interface \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| acl_test \| ingress \| -| | [Arguments] -| | ... | ${node} | ${interface} | ${acl_list_name} | ${direction} -| | ... | ${macip}=${False} -| | Set ACL plugin interface -| | ... | ${node} | ${interface} | ${acl_list_name} | ${direction} - -| Clear plugin-ACL configuration -| | [Documentation] | Removes ACl assignment from interface, then deletes\ -| | ... | IETF-ACL chain. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - Interface to clean classifiers from. | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Clear plugin-ACL configuration | ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | Delete interface plugin ACLs | ${node} | ${interface} -| | Delete ACL plugin classify chains | ${node} - -| Read plugin-ACL configuration from VAT -| | [Documentation] | Obtains ACL-plugin configuration through VAT and logs\ -| | ... | the reply. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Read plugin-ACL configuration from VAT \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | VPP log plugin acl settings | ${node} -| | VPP log plugin acl interface assignment | ${node} - -| Send ICMP packet with type and code and verify received packet -| | [Documentation] | Sends an ICMP packet with specified code and type. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | _NOTE:_ Arguments are based on topology: -| | ... | TG(if1)->(if1)DUT(if2)->TG(if2) -| | ... -| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary -| | ... | - src_ip - IP of source interface (TG-if1). Type: integer -| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer -| | ... | - tx_port - Source interface (TG-if1). Type: string -| | ... | - tx_mac - MAC address of source interface (TG-if1). Type: string -| | ... | - rx_port - Destionation interface (TG-if1). Type: string -| | ... | - rx_mac - MAC address of destination interface (TG-if1). Type: string -| | ... | - icmp_type - ICMP type to use. Type: int -| | ... | - icmp_code - ICMP code to use. Type: int -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Send ICMP packet with type and code and verify received packet \| ${nodes['TG']} \ -| | ... | \| 16.0.0.1 \| 32.0.0.1 \| eth2 \| 08:00:27:cc:4f:54 \ -| | ... | \| eth4 \| 08:00:27:c9:6a:d5 \| ${1} \| ${1} \| -| | ... -| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} | -| | ... | ${tx_mac} | ${rx_port} | ${rx_mac} | ${icmp_type} | ${icmp_code} -| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port} -| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port} -| | ${args}= | Catenate | --src_mac | ${tx_mac} -| | ... | --dst_mac | ${rx_mac} -| | ... | --src_ip | ${src_ip} -| | ... | --dst_ip | ${dst_ip} -| | ... | --tx_if | ${tx_port_name} -| | ... | --rx_if | ${rx_port_name} -| | ... | --icmp_type | ${icmp_type} -| | ... | --icmp_code | ${icmp_code} -| | Run Traffic Script On Node | send_icmp_type_code.py -| | ... | ${tg_node} | ${args} diff --git a/resources/libraries/robot/honeycomb/bgp.robot b/resources/libraries/robot/honeycomb/bgp.robot deleted file mode 100644 index b39055196a..0000000000 --- a/resources/libraries/robot/honeycomb/bgp.robot +++ /dev/null @@ -1,277 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.BGP.BGPKeywords -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords - -*** Keywords *** -| Configure BGP module -| | [Documentation] | Edit Honeycomb's configuration file for the BGP feature.\ -| | ... | Honeycomb needs to be restarted for the changes to take effect. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - ip_address - IP address to bind BGP listener to. Type: string -| | ... | - port - Port number to bind BGP listener to. Type: integer -| | ... | - as_number - Autonomous System (AS) ID number. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Configure BGP module \| ${nodes['DUT1']} \| 192.168.0.1 \| ${179} \ -| | ... | \| ${65000} \| -| | ... -| | [Arguments] | ${node} | ${ip_address} | ${port} | ${as_number} -| | Configure BGP base | ${node} | ${ip_address} | ${port} | ${as_number} - -| No BGP peers should be configured -| | [Documentation] | Uses Honeycomb API to read BGP configuration and checks -| | ... | if there ary BGP peers conffigured. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| No BGP peers should be configured \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | ${oper_data}= | Get Full BGP Configuration | ${node} -| | Should be Empty | ${oper_data['bgp-openconfig-extensions:bgp']} - -| Honeycomb adds BGP peer -| | [Documentation] | Uses Honeycomb API to add a BGP peer. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - address - IP address of the peer. Type: string -| | ... | - data - Peer configuration data. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds BGP peer \| ${nodes['DUT1']} \| 192.168.0.1 \ -| | ... | \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${address} | ${data} -| | ... -| | Add BGP Peer | ${node} | ${address} | ${data} - -| BGP Peer From Honeycomb Should be -| | [Documentation] | Uses Honeycomb API to verify BGP peer config data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - address - IP address of the peer. Type: string -| | ... | - data - Peer configuration data. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| BGP Peer From Honeycomb Should be \ -| | ... | \| ${nodes['DUT1']} \| 192.168.0.1 \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${address} | ${data} -| | ... -| | ${oper_data}= | Get BGP Peer | ${node} | ${address} -| | Compare Data Structures | ${oper_data} | ${data} - -| Peer Operational Data From Honeycomb Should be -| | [Documentation] | Uses Honeycomb API to verify BGP peer operational data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - address - IP address of the peer. Type: string -| | ... | - data - Peer configuration data. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| BGP Peer From Honeycomb Should be \ -| | ... | \| ${nodes['DUT1']} \| 192.168.0.1 \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${address} -| | ... -| | ${oper_data}= | Get BGP Peer | ${node} | ${address} | operational -| | Should be Equal | ${oper_data['peer'][0]['peer-id']} | bgp://${address} - -| Honeycomb removes BGP peer -| | [Documentation] | Uses Honeycomb API to add a BGP peer. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - address - IP address of the peer. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds BGP peer \| ${nodes['DUT1']} \| 192.168.0.1 \| -| | ... -| | [Arguments] | ${node} | ${address} -| | ... -| | Remove BGP Peer | ${node} | ${address} - -| Honeycomb configures BGP route -| | [Documentation] | Uses Honeycomb API to add a BGP route\ -| | ... | to the specified peer. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - peer_address - IP address of the peer. Type: string -| | ... | - data - Peer configuration data. Type: dictionary -| | ... | - route_address - IP address of the route. Type: string -| | ... | - route_index - Numeric index of the route under the peer.\ -| | ... | Type: integer -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds BGP peer \| ${nodes['DUT1']} \| 192.168.0.1 \ -| | ... | \| ${data} \| 192.168.0.2 \| ${0} \| ipv4 \| -| | ... -| | [Arguments] | ${node} | ${peer_address} | ${data} -| | ... | ${route_address} | ${route_index} | ${ip_version} -| | ... -| | Configure BGP Route | ${node} | ${peer_address} | ${data} -| | ... | ${route_address} | ${route_index} | ${ip_version} - -| BGP Route From Honeycomb Should be -| | [Documentation] | Uses Honeycomb API to verify BGP route operational data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - peer_address - IP address of the peer. Type: string -| | ... | - data - Peer configuration data. Type: dictionary -| | ... | - route_address - IP address of the route. Type: string -| | ... | - route_index - Numeric index of the route under the peer.\ -| | ... | Type: integer -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| BGP Peers From Honeycomb Should Include \ -| | ... | \| ${nodes['DUT1']} \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${peer_address} | ${data} -| | ... | ${route_address} | ${route_index} | ${ip_version} -| | ... -| | ${oper_data}= | Get BGP Route | ${node} | ${peer_address} -| | ... | ${route_address} | ${route_index} | ${ip_version} -| | Compare Data Structures | ${oper_data} | ${data} - -| Honeycomb removes BGP route -| | [Documentation] | Uses Honeycomb API to remove a BGP route. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - peer_address - IP address of the peer. Type: string -| | ... | - route_address - IP address of the route. Type: string -| | ... | - route_index - Numeric index of the route under the peer.\ -| | ... | Type: integer -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes BGP route \| ${nodes['DUT1']} \| 192.168.0.1 \ -| | ... | \| 192.168.0.2 \| ${0} \| ipv4 \| -| | ... -| | [Arguments] | ${node} | ${peer_address} | ${route_address} -| | ... | ${route_index} | ${ip_version} -| | ... -| | Remove BGP Route | ${node} | ${peer_address} | ${route_address} -| | ... | ${route_index} | ${ip_version} - -| No BGP routes should be configured -| | [Documentation] | Uses Honeycomb API to verify that no BGP routes\ -| | ... | are configured under the specified peer. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - peer_address - IP address of the peer. Type: string -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| No BGP routes should be configured \| ${nodes['DUT1']} \ -| | ... | \| 192.168.0.1 \| ipv4 \| -| | ... -| | [Arguments] | ${node} | ${peer_address} | ${ip_version} -| | ... -| | ${oper_data}= | Get All Peer Routes -| | ... | ${node} | ${peer_address} | ${ip_version} -| | Should be Empty | ${oper_data['bgp-inet:${ip_version}-routes']} - -| No BGP routes should exist -| | [Documentation] | Uses Honeycomb API to verify that no BGP routes\ -| | ... | exist under the specified peer. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - peer_address - IP address of the peer. Type: string -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| No BGP routes should be configured \| ${nodes['DUT1']} \ -| | ... | \| 192.168.0.1 \| ipv4 \| -| | ... -| | [Arguments] | ${node} | ${peer_address} | ${ip_version} -| | ... -| | Run keyword and expect error | *Status code: 404* -| | ... | Get All Peer Routes -| | ... | ${node} | ${peer_address} | ${ip_version} - -| BGP Loc-RIB table should include -| | [Documentation] | Uses Honeycomb API to retrieve local BGP RIB table\ -| | ... | And verifies that it contains the specified entry. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - data - RIB that should be present in operational data.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| BGP Loc-RIB table should include \| ${nodes['DUT1']} \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${data} -| | ... -| | ${oper_data}= | Get BGP Local RIB | ${node} -| | ${oper_data}= | Set Variable | ${oper_data['loc-rib']['tables']} -| | ${data}= | Set Variable | ${data['loc-rib']['tables']} -| | Compare RIB Tables | ${oper_data} | ${data} - -| Receive BGP OPEN message -| | [Documentation] | Open a TCP listener on BGP port(179) and listen\ -| | ... | for BGP OPEN message. Verify ID and holdtime fields. -| | ... -| | ... | *Arguments:* -| | ... | - tg_node - Information about the TG node. Type: dictionary -| | ... | - rx_ip - IP address to listen on. Type: string -| | ... | - src_ip - IP address of the BGP speaker. Also acts as BGP peer ID.\ -| | ... | Type: string -| | ... | - holdtime - Expected value of HOLD_TIME field in received message.\ -| | ... | Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Receive BGP OPEN message \| ${node['TG']} \ -| | ... | \| 192.168.0.1 \| 192.168.0.2 \| ${0} -| | ... -| | [Arguments] | ${tg_node} | ${rx_ip} | ${src_ip} | ${port} | ${as_number} -| | ... | ${holdtime} -| | ... -| | ${args}= | Catenate | --rx_ip | ${rx_ip} -| | ... | --src_ip | ${src_ip} -| | ... | --rx_port | ${port} -| | ... | --as_number | ${as_number} -| | ... | --holdtime | ${holdtime} -| | Run Traffic Script On Node | honeycomb/bgp_open.py -| | ... | ${tg_node} | ${args} diff --git a/resources/libraries/robot/honeycomb/bridge_domain.robot b/resources/libraries/robot/honeycomb/bridge_domain.robot deleted file mode 100644 index 44dd450944..0000000000 --- a/resources/libraries/robot/honeycomb/bridge_domain.robot +++ /dev/null @@ -1,284 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.L2Util -| Library | resources.libraries.python.honeycomb.HcAPIKwBridgeDomain.BridgeDomainKeywords -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Library | resources.libraries.python.InterfaceUtil - -*** Keywords *** -| Honeycomb creates first L2 bridge domain -| | [Documentation] | Uses Honeycomb API to create a bridge domain on the \ -| | ... | VPP node. Any other bridge domains will be removed in the process. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the created bridge domain. Type: string -| | ... | - settings - Settings for the created bridge domain. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb creates first L2 bridge domain \| ${nodes['DUT1']} \ -| | ... | \| bd-04 \| ${{flood:True, learn:False}} \| -| | [Arguments] | ${node} | ${bd_name} | ${settings} -| | Add first BD | ${node} | ${bd_name} | &{settings} - -| Honeycomb creates L2 bridge domain -| | [Documentation] | Uses Honeycomb API to create a bridge domain on the \ -| | ... | VPP node. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the created bridge domain. Type: string -| | ... | - settings - Settings for the created bridge domain. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb creates L2 bridge domain \| ${nodes['DUT1']} \ -| | ... | \| bd-04 \| ${{flood:True, learn:False}} \| -| | [Arguments] | ${node} | ${bd_name} | ${settings} -| | Add BD | ${node} | ${bd_name} | &{settings} - -| Bridge domain Operational Data From Honeycomb Should Be -| | [Documentation] | Uses Honeycomb API to verify bridge domain settings\ -| | ... | against provided values. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... | - settings - Expected settings for the bridge domain. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Bridge domain Operational Data From Honeycomb Should Be \ -| | ... | \| ${nodes['DUT1']} \| bd-04 \| ${{flood:True,learn:False}} \| -| | [Arguments] | ${node} | ${bd_name} | ${settings} -| | ${api_data}= | Get bd oper data | ${node} | ${bd_name} -| | :FOR | ${key} | IN | @{settings.keys()} -| | | Should be equal | ${settings['${key}']} | ${api_data['${key}']} - -| Bridge domain Operational Data From VAT Should Be -| | [Documentation] | Uses VAT to verify bridge domain settings\ -| | ... | against provided values. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... | - settings - Expected settings for the bridge domain. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Bridge domain Operational Data From VAT Should Be \ -| | ... | \| ${nodes['DUT1']} \| bd-04 \| ${{flood:True,learn:False}} \| -| | [Arguments] | ${node} | ${bd_index} | ${settings} -| | ${vat_data}= | VPP get bridge domain data | ${node} -| | ${vat_data}= | Set Variable | ${vat_data[${bd_index}]} -| | :FOR | ${key} | IN | @{settings.keys()} -| | | Run keyword if | $key in $vat_data.keys() -| | | ... | Should be equal | ${settings['${key}']} | ${vat_data['${key}']} - -| Honeycomb adds 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 adds interfaces 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} -| | Add bridge domain to interface -| | ... | ${node} | ${interface1} | ${bd_name} | &{settings} -| | Add bridge domain to interface -| | ... | ${node} | ${interface2} | ${bd_name} | &{settings} - -| Honeycomb should 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 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 should 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} -| | ${if1_data}= | Get interface oper data -| | ... | ${node} | ${interface1} -| | ${if2_data}= | Get interface oper data -| | ... | ${node} | ${interface2} -| | Should be equal | ${if1_data['v3po:l2']['bridge-domain']} -| | ... | ${if2_data['v3po:l2']['bridge-domain']} | ${bd_name} -| | Should be equal | ${if1_data['v3po:l2']['split-horizon-group']} -| | ... | ${if2_data['v3po:l2']['split-horizon-group']} -| | ... | ${settings['split_horizon_group']} -| | Should be equal | ${if1_data['v3po:l2']['bridged-virtual-interface']} -| | ... | ${if2_data['v3po:l2']['bridged-virtual-interface']} -| | ... | ${settings['bvi']} - -| PAPI should show interfaces assigned to bridge domain -| | [Documentation] | Uses VAT to verify interface assignment to\ -| | ... | bridge domain. -| | ... -| | ... | *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: int -| | ... | - interface1, interface2 - names of interfaces to check bridge domain\ -| | ... | assignment on. Type: string -| | ... | - settings - bridge domain specific interface settings.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| PAPI should 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} -| | ${if1_link}= | Get interface by name | ${node} | ${interface1} -| | ${if2_link}= | Get interface by name | ${node} | ${interface2} -| | ${if_indices}= | Create list -| | ... | ${node['interfaces']['${if1_link}']['vpp_sw_index']} -| | ... | ${node['interfaces']['${if2_link}']['vpp_sw_index']} -| | ${bd_data}= | VPP get bridge domain data | ${node} -| | ${bd_interfaces}= | Set Variable | ${bd_data[${index}]['sw_if_details']} -| | @{bd_interfaces}= | Create List | ${bd_interfaces[0]} | ${bd_interfaces[1]} -| | :FOR | ${interface} | IN | @{bd_interfaces} -# interface[1] = sw_if_index, interface[2] = shg -| | | Should contain | ${if_indices} | ${interface[1]} -| | | Should be equal | ${interface[2]} | ${settings['split_horizon_group']} - -| Honeycomb removes all bridge domains -| | [Documentation] | Uses Honeycomb API to remove all bridge domains from the \ -| | ... | VPP node. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes all bridge domains \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} | @{interfaces} -| | :FOR | ${interface} | IN | @{interfaces} -| | | Remove bridge domain from interface | ${node} | ${interface} -| | Remove all bridge domains | ${node} - -| Honeycomb should show no bridge domains -| | [Documentation] | Uses Honeycomb API to verify the removal of all\ -| | ... | bridge domains. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb should show no bridge domains \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Run keyword and expect error | *Not possible*Status code: 404* -| | ... | Get all BDs oper data | ${node} - -| PAPI should show no bridge domains -| | [Documentation] | Uses VAT to verify the removal of all bridge domains. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| PAPI should show no bridge domains \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | ${data}= | VPP get bridge domain data | ${node} -| | Should be empty | ${data} - -| Honeycomb adds interface to bridge domain -| | [Documentation] | Uses Honeycomb API to assign interface to a bridge\ -| | ... | domain. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - Name of interface 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 adds interfaces to bridge domain \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| bd-04 \ -| | ... | \| ${{split_horizon_group:2, bvi:False}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${bd_name} | ${settings} -| | ... -| | Add bridge domain to interface -| | ... | ${node} | ${interface} | ${bd_name} -| | ... | ${settings['split-horizon-group']} -| | ... | ${settings['bridged-virtual-interface']} - -| Bridge domain Operational Interface Assignment should be empty -| | [Documentation] | Get interface operational data and retrieve bridge -| | ... | domain configuration from it. It should be empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - Name of interface where the bridge domain parameters \ -| | ... | will be checked.Type: string -| | ... -| | ... | *Example:* -| | ... | \| Bridge domain Operational Interface Assignment should \ -| | ... | be empty \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ... -| | ${if_data}= | Get BD Oper Data From Interface -| | ... | ${node} | ${interface} -| | Should be empty | ${if_data} - -| Bridge domain Operational Interface Assignment should be -| | [Documentation] | Get interface operational data and retrieve bridge -| | ... | domain configuration from it. Compare the data to the expected one. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - Name of interface where the bridge domain parameters \ -| | ... | will be checked. Type: string -| | ... | - bd_settings - The referential bridge domain data. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Bridge domain Operational Interface Assignment should \ -| | ... | be \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${if_bd_settings} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${bd_settings} -| | ... -| | ${if_data}= | Get BD Oper Data From Interface -| | ... | ${node} | ${interface} -| | Compare Data Structures | ${if_data} | ${bd_settings} diff --git a/resources/libraries/robot/honeycomb/dhcp.robot b/resources/libraries/robot/honeycomb/dhcp.robot deleted file mode 100644 index 966c73f85c..0000000000 --- a/resources/libraries/robot/honeycomb/dhcp.robot +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.DHCP.DHCPRelayKeywords -| Library | resources.libraries.python.Dhcp.DhcpProxy -| Documentation | Keywords used to test Honeycomb DHCP features. - -*** Keywords *** -| DHCP relay Operational Data From Honeycomb Should Be empty -| | [Documentation] | Uses Honeycomb API to retrieve DHCP relay configuration\ -| | ... | and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| DHCP relay Operational Data From Honeycomb Should Be empty \ -| | ... | \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Run keyword and expect error | *Status code: 404* -| | ... | Get DHCP relay oper data | ${node} - -| Log DHCP relay configuration from VAT -| | [Documentation] | Uses VAT to retrieve DHCP relay configuration from VPP. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Log DHCP relay configuration from VAT \ -| | ... | \| ${nodes['DUT1']} \| ipv4 \| -| | [Arguments] | ${node} | ${ip_version} -| | VPP get DHCP proxy | ${node} | ${ip_version} - -| Honeycomb configures DHCP relay -| | [Documentation] | Uses Honeycomb API to configure DHCP relay. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - data - settings for the DHCP relay. Type: dictionary -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type: string -| | ... | - vrf - vrf ID to configure DHCP on. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures DHCP relay \| ${nodes['DUT1']} \| ${data} \ -| | ... | \| ipv4 \| ${0} \| -| | [Arguments] | ${node} | ${data} | ${ip_version} | ${vrf} -| | Add DHCP relay | ${node} | ${data} | ${ip_version} | ${vrf} - -| Honeycomb clears DHCP relay configuration -| | [Documentation] | Uses Honeycomb API to delete all configured DHCP relays. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb clears DHCP relay configuration \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Clear DHCP relay configuration | ${node} - -| DHCP relay configuration from Honeycomb should contain -| | [Documentation] | Retrieves oper data for DHCP relay and compares\ -| | ... | with provided values. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - data - expected DHCP relay settings. Type dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| DHCP relay configuration from Honeycomb should contain \ -| | ... | \| ${nodes['DUT1']} \| ${data} \| -| | [Arguments] | ${node} | ${data} -| | ${oper_data}= | Get DHCP relay oper data | ${node} -| | ${oper_data}= | Set Variable | ${oper_data['relays']['relay'][0]} -| | Sort List | ${oper_data['server']} -| | Sort List | ${data['server']} -| | Should be equal | ${oper_data} | ${data} diff --git a/resources/libraries/robot/honeycomb/fib.robot b/resources/libraries/robot/honeycomb/fib.robot deleted file mode 100644 index 8209db7512..0000000000 --- a/resources/libraries/robot/honeycomb/fib.robot +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright (c) 2018 Bell Canada, Pantheon Technologies 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 *** -| Library | resources.libraries.python.honeycomb.FIB.FibKeywords -| Documentation | Keywords used to test Honeycomb FIB tables. - -*** Keywords *** -| Honeycomb configures FIB table -| | [Documentation] | Uses Honeycomb API to configure a FIB table. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type:string -| | ... | - vrf - vrf-id the new table will belong to. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures FIB table \| ${nodes['DUT1']} \ -| | ... | \| ipv4 \| ${vrf} \| -| | [Arguments] | ${node} | ${ip_version} | ${vrf} -| | Configure FIB table | ${node} | ${ip_version} | ${vrf} - -| FIB table data from Honeycomb should contain -| | [Documentation] | Uses Honeycomb API to retrieve operational data about\ -| | ... | a FIB table, and compares with the data provided. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type:string -| | ... | - vrf - vrf-id the new table will belong to. Type: integer -| | ... | - expected_data - Data to compare against. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| FIB table data from Honeycomb should contain \| ${nodes['DUT1']} \ -| | ... | \| ipv4 \| ${data} \| -| | [Arguments] | ${node} | ${ip_version} | ${vrf} | ${expected_data} -| | ${data}= | Get FIB Table Oper | ${node} | ${ip_version} | ${vrf} -| | Should Contain | ${data} | ${expected_data} - -| Honeycomb removes FIB configuration -| | [Documentation] | Uses Honeycomb API to remove Honeycomb-created\ -| | ... | FIB configuration from the node. Entries configured automatically\ -| | ... | by VPP will not be removed. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type:string -| | ... | - vrf - vrf-id the new table will belong to. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes FIB configuration \| ${nodes['DUT1']} \ -| | ... | \| ${ip_version} \| ${vrf} \| -| | [Arguments] | ${node} | ${ip_version} | ${vrf} -| | Delete FIB table | ${node} | ${ip_version} | ${vrf} diff --git a/resources/libraries/robot/honeycomb/honeycomb.robot b/resources/libraries/robot/honeycomb/honeycomb.robot deleted file mode 100644 index cf89229dfd..0000000000 --- a/resources/libraries/robot/honeycomb/honeycomb.robot +++ /dev/null @@ -1,375 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.HoneycombSetup -| Library | resources.libraries.python.honeycomb.HoneycombUtil -| Library | resources.libraries.python.honeycomb.HcPersistence -| Library | resources.libraries.python.DUTSetup -| Library | resources.libraries.python.InterfaceUtil -| Resource | resources/libraries/robot/shared/default.robot - -*** Keywords *** -| Configure Honeycomb service on DUTs -| | [Documentation] | *Setup environment for honeycomb testing.* -| | ... -| | ... | _Setup steps:_ -| | ... | - 1. Login to each honeycomb node using ssh -| | ... | - 2. Startup honeycomb service -| | ... | - 3. Monitor service startup using HTTP GET request loop -| | ... | Expected sequence of HTTP replies: -| | ... | connection refused -> 404 -> 401 -> 503 or 500 -> 200 (pass) -| | ... | - 4. Configure honeycomb nodes using HTTP PUT request -| | ... -| | ... | _Arguments:_ -| | ... | - duts - list of nodes to setup Honeycomb on -| | ... -| | ... | _Used global constants and variables:_ -| | ... | - RESOURCES_TPL_HC - path to honeycomb templates directory -| | ... | - HTTPCodes - HTTP protocol status codes -| | ... -| | [Arguments] | @{duts} -| | Start honeycomb on DUTs | @{duts} -| | :FOR | ${dut} | IN | @{duts} -| | | Check honeycomb startup state | @{duts} -| | | Sleep | 5s | Make sure all modules are loaded and ready. - -| Stop Honeycomb service on DUTs -| | [Documentation] | *Cleanup environment after honeycomb testing.* -| | ... -| | ... | _Teardown steps:_ -| | ... | - 1. Login to each honeycomb node using ssh -| | ... | - 2. Stop honeycomb service -| | ... | - 3. Monitor service shutdown using HTTP GET request loop -| | ... | Expected sequence of HTTP replies: -| | ... | 200 -> 404 -> connection refused (pass) -| | ... -| | ... | _Arguments:_ -| | ... | - duts - list of nodes to stop Honeycomb on -| | ... -| | ... | _Used global constants and variables:_ -| | ... | - RESOURCES_TPL_HC - path to honeycomb templates directory -| | ... | - HTTPCodes - HTTP protocol status codes -| | ... -| | [Arguments] | @{duts} -| | Stop honeycomb on DUTs | @{duts} -| | :FOR | ${dut} | IN | @{duts} -| | | Wait until keyword succeeds | 60sec | 15sec -| | | ... | Check honeycomb shutdown state | @{duts} - -| Clear persisted Honeycomb configuration -| | [Documentation] | *Delete saved configuration.* -| | ... -| | ... | *Arguments:* -| | ... | - duts - one or more nodes to clear persistence on. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Clear persisted Honeycomb configuration \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | @{duts} -| | Clear persisted Honeycomb config | @{duts} - -| Restart Honeycomb and VPP and clear persisted configuration -| | [Documentation] | Restarts Honeycomb and VPP with default configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Restart Honeycomb and VPP and clear persisted configuration \ -| | ... | \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Stop Honeycomb service on DUTs | ${node} -| | Clear persisted Honeycomb configuration | ${node} -| | Restart Vpp Service | ${node} -| | Verify Vpp | ${node} -| | VPP Enable Traces On DUT | ${node} -| | Configure Honeycomb service on DUTs | ${node} - -| Restart Honeycomb and VPP -| | [Documentation] | Stops the Honeycomb service and verifies it is stopped. -| | ... | Then restarts VPP, starts Honeycomb again and verifies it is running. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Restart Honeycomb and VPP \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Stop Honeycomb service on DUTs | ${node} -| | Restart Vpp Service | ${node} -| | Verify Vpp | ${node} -| | VPP Enable Traces On DUT | ${node} -| | Configure Honeycomb service on DUTs | ${node} - -| Restart Honeycomb and VPP in performance test -| | [Documentation] | Stops Honeycomb and VPP and verifies HC is stopped. -| | ... | Then restarts VPP, starts Honeycomb again and verifies it is running. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Restart Honeycomb and VPP \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Stop Honeycomb service on DUTs | ${node} -| | Restart Vpp Service | ${node} -| | Verify Vpp | ${node} -| | VPP Enable Traces On DUT | ${node} -| | Configure Honeycomb service on DUTs | ${node} -| | Check honeycomb startup state | ${node} | timeout=120 - -| Archive Honeycomb logs -| | [Documentation] | Copies log files from Honeycomb node\ -| | ... | to test executor. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - perf - Running on performance testbed? Yes/no Type: boolean -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Archive Honeycomb logs \| ${nudes['DUT1']} \| -| | ... -| | [Arguments] | ${node} | ${perf}=${False} -| | Archive Honeycomb log | ${node} | ${perf} -| | Archive ODL log | ${node} - -| Configure ODL Client Service On DUT -| | [Documentation] | Configure and start ODL client, then repeatedly check if -| | ... | it is running. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - odl_name - Name of ODL client version. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Configure ODL Client Service on DUT \| ${nodes['DUT1']} \ -| | ... | \| carbon-SR1 \| -| | ... -| | [Arguments] | ${node} | ${odl_name} -| | Copy ODL Client | ${node} | ${odl_name} | /mnt/common | /tmp -| | Setup ODL Client | ${node} | /tmp -| | Wait until keyword succeeds | 3min | 30sec -| | ... | Install ODL Features | ${node} | /tmp -| | Wait until keyword succeeds | 4min | 15sec -| | ... | Mount Honeycomb on ODL | ${node} -| | Wait until keyword succeeds | 2min | 15sec -| | ... | Check ODL startup state | ${node} -| | Check honeycomb startup state | ${node} | timeout=120 - -| Configure Honeycomb for functional testing -| | [Documentation] | Configure Honeycomb with parameters for functional -| | ... | testing, then start Honeycomb and repeatedly check startup status. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Configure Honeycomb for functional testing \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Configure Restconf binding address | ${node} -| | Configure Log Level | ${node} | TRACE -| | Configure Persistence | ${node} | disable -| | Configure jVPP timeout | ${node} | ${10} -| | Generate Honeycomb startup configuration for ODL test | ${node} -| | Clear Persisted Honeycomb Configuration | ${node} -| | Configure Honeycomb service on DUTs | ${node} - -| Configure ODL Client for functional testing -| | [Documentation] | Read external variable HC_ODL. Depending on its -| | ... | value either: do nothing, or setup ODL client for testing and -| | ... | create a global variable that modifies Restconf requests to use ODL. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Configure ODL Client for functional testing \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ${use_odl_client}= | Get Variable Value | ${HC_ODL} -| | Run Keyword If | '${use_odl_client}' != '${NONE}' -| | ... | Run Keywords -| | ... | Set Global Variable | ${use_odl_client} | AND -| | ... | Configure ODL Client Service On DUT | ${node} | ${use_odl_client} -| | ... | ELSE | Log | Variable HC_ODL is not present. Not using ODL. -| | ... | level=INFO - -| Set Up Honeycomb Functional Test Suite -| | [Documentation] | Generic test suite setup for Honeycomb functional tests. -| | ... | Restarts VPP, then enables Honeycomb and optionally ODL, based -| | ... | on external variable. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Set Up Honeycomb Functional Test Suite \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Restart Vpp Service | ${node} -| | Verify Vpp | ${node} -| | VPP Enable Traces On DUT | ${node} -| | All TGs Set Interface Default Driver | ${nodes} -| | Configure Honeycomb for functional testing | ${node} -| | Configure ODL Client for functional testing | ${node} - -| Tear Down Honeycomb Functional Test Suite -| | [Documentation] | Generic test suite teardown for Honeycomb functional -| | ... | tests. Stops ODL client (if used), then stops Honeycomb and verifies -| | ... | that they are both stopped. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Tear Down Honeycomb Functional Test Suite \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Append suite to Honeycomb log file | ${node} -| | ${use_odl_client}= | Get Variable Value | ${HC_ODL} -| | Run Keyword If | '${use_odl_client}' != '${NONE}' -| | ... | Run Keywords -| | ... | Append suite to ODL log file | ${node} | ${use_odl_client} | AND -| | ... | Stop ODL Client | ${node} | /tmp | AND -| | ... | Wait until keyword succeeds | 3min | 15sec -| | ... | Check ODL shutdown state | ${node} | AND -| | ... | Set Global Variable | ${use_odl_client} | ${NONE} -| | Stop Honeycomb service on DUTs | ${node} -| | Clear Honeycomb Log | ${node} -| | Stop VPP Service | ${node} - -| Enable Honeycomb Feature -| | [Documentation] | Enable the specified feature in Honeycomb configuration. -| | ... | Requires a restart of Honeycomb to take effect. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Enable Honeycomb Feature \| ${nodes['DUT1']} \| NSH \| -| | ... -| | [arguments] | ${node} | ${feature} -| | Manage Honeycomb Features | ${node} | ${feature} - -| Disable Honeycomb Feature -| | [Documentation] | Disable the specified feature in Honeycomb configuration. -| | ... | Requires a restart of Honeycomb to take effect. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Disable Honeycomb Feature \| ${nodes['DUT1']} \| NSH \| -| | ... -| | [arguments] | ${node} | ${feature} -| | Manage Honeycomb Features | ${node} | ${feature} | disable=${True} - -| Honeycomb Performance Suite Setup Generic -| | [Documentation] | Generic test suite setup for Honeycomb performance tests. -| | ... | Performs multiple attempts to start Honeycomb+VPP stack. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb Performance Suite Setup Generic \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Wait until keyword succeeds | 8min | 2min -| | ... | Restart Honeycomb and VPP in Performance test | ${node} - -| Honeycomb Performance Suite Teardown Generic -| | [Documentation] | Generic test suite teardown for Honeycomb performance -| | ... | tests. Logs CPU usage before stopping Honeycomb. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb Performance Suite Teardown Generic \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Log Honeycomb and VPP process distribution on cores | ${node} -| | Append suite to Honeycomb log file | ${node} -| | Stop Honeycomb service on DUTs | ${node} -| | Clear Honeycomb Log | ${node} -| | Stop VPP Service | ${node} - -| Append suite to Honeycomb log file -| | [Documentation] | Add the contents of honeycomb.log for the current suite\ -| | ... | to the full log which will be archived. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Append suite to Honeycomb log file \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Append Honeycomb log | ${node} | ${SUITE_NAME} - -| Append suite to ODL log file -| | [Documentation] | Add the contents of ODL karaf.log for the current suite\ -| | ... | to the full log which will be archived. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - odl_name - name of ODL client version. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Append suite to ODL karaf log file \| ${nodes['DUT1']} \ -| | ... | \| Oxygen \| -| | ... -| | [Arguments] | ${node} | ${odl_name} -| | Append ODL log | ${node} | ${odl_name} | ${SUITE_NAME} - -| Generate Honeycomb startup configuration for ODL test -| | [Documentation] | Create HC startup configuration and apply to config -| | ... | file on DUT. Requires Honeycomb restart to take effect. -| | ... -| | ... | *Arguments:* -| | ... | - node - Honeycomb node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Generate Honeycomb startup configuration for ODL test \ -| | ... | \| ${nodes[DUT1]} \| -| | ... -| | [Arguments] | ${node} -| | Import Library | resources.libraries.python.honeycomb.HoneycombSetup.HoneycombStartupConfig -| | ... | WITH NAME | HC_config -| | Run Keyword | HC_config.Set SSH Security provider -| | Run Keyword | HC_config.Set Memory Size | ${32} -| | Run Keyword | HC_config.Set Metaspace Size | ${32} -| | Run Keyword | HC_config.Apply config | ${node} diff --git a/resources/libraries/robot/honeycomb/interfaces.robot b/resources/libraries/robot/honeycomb/interfaces.robot deleted file mode 100644 index 06428c0c96..0000000000 --- a/resources/libraries/robot/honeycomb/interfaces.robot +++ /dev/null @@ -1,813 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Library | resources.libraries.python.IPUtil -| Library | resources.libraries.python.TrafficScriptExecutor - -*** Keywords *** -| Honeycomb configures interface state -| | [Documentation] | Uses Honeycomb API to change the admin state\ -| | ... | of the specified interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - state - state to set on interface. Type:string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures interface state \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| up \| -| | [Arguments] | ${node} | ${interface} | ${state} -| | Honeycomb Set Interface State | ${node} | ${interface} | ${state} - -| Interface state from Honeycomb should be -| | [Documentation] | Retrieves interface admin state through Honeycomb and\ -| | ... | compares with state supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - state - expected interface state. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface state from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| up \| -| | [Arguments] | ${node} | ${interface} | ${state} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${api_state}= | Set Variable | ${api_data['admin-status']} -| | Should be equal | ${api_state} | ${state} - -| Interface state from VAT should be -| | [Documentation] | Retrieves interface admin state through VAT and compares\ -| | ... | with state supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - state - expected interface state. Type: string -| | ... -| | ... | _NOTE:_ Vat returns state as int (1/0) instead of string (up/down). -| | ... | This keyword also handles translation. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface state from VAT should be \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| up \| -| | [Arguments] | ${node} | ${interface} | ${state} -| | ${vat_data}= | VPP get interface data | ${node} | ${interface} -| | ${vat_state}= | Set Variable if -| | ... | ${vat_data['admin_up_down']} == 1 | up | down -| | Should be equal | ${vat_state} | ${state} - -| Honeycomb sets interface IPv4 address -| | [Documentation] | Uses Honeycomb API to change ipv4 address\ -| | ... | of the specified interface. Any existing addresses will be removed. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - 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 -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb sets interface IPv4 address \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 255.255.255.0 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${netmask} -| | Add first ipv4 address -| | ... | ${node} | ${interface} | ${address} | ${netmask} - -| Honeycomb sets interface IPv4 address with prefix -| | [Documentation] | Uses Honeycomb API to assign an ipv4 address to the\ -| | ... | specified interface. Any existing addresses will be removed. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - 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: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb sets interface IPv4 address with prefix \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 24 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | Add first ipv4 address -| | ... | ${node} | ${interface} | ${address} | ${prefix} - -| Honeycomb adds interface IPv4 address -| | [Documentation] | Uses Honeycomb API to add an ipv4 address to the\ -| | ... | specified interface, without removing existing addresses. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - 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: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds interface IPv4 address \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 24 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | Add ipv4 address -| | ... | ${node} | ${interface} | ${address} | ${prefix} - -| Honeycomb fails to add interface IPv4 address -| | [Documentation] | Uses Honeycomb API to add an ipv4 address to the\ -| | ... | specified interface, and expects to fail with code 500. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - 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: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb fails to add interface IPv4 address \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 24 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | Run Keyword and Expect Error | *not successful. Status code: 500. -| | ... | Honeycomb adds interface IPv4 address -| | ... | ${node} | ${interface} | ${address} | ${prefix} - -| IPv4 address from Honeycomb should be -| | [Documentation] | Retrieves interface ipv4 address through Honeycomb\ -| | ... | and compares with state supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - 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 -| | ... | - prefix - prefix length to expect. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv4 address from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| ${24} \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${settings}= | Create Dictionary -| | ... | ip=${address} | prefix-length=${prefix} -| | Should contain | ${api_data['ietf-ip:ipv4']['address']} | ${settings} - -| IPv4 address from VAT should be -| | [Documentation] | Retrieves interface ipv4 address through VAT and\ -| | ... | compares with state supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - 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 -| | ... | - prefix - prefix length to expect. Type: string -| | ... | - netmask - subnet mask to expect. Type: string -| | ... | - sw_if_index - Index of interface. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv4 address from VAT should be \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| ${24} \| 255.255.255.0 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} | ${netmask} -| | ${sw_if_index}= | Vpp Get Interface Sw Index | ${node} | ${interface} -| | ${vpp_data}= | VPP get interface ip addresses -| | ... | ${node} | ${interface} | ipv4 -| | ${settings}= | Create Dictionary -| | ... | ip=${address} | netmask=${netmask} | sw_if_index=${sw_if_index} -| | ... | prefix_length=${prefix} | is_ipv6=${0} -| | Should contain | ${vpp_data} | ${settings} - -| 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}= | Get interface oper data | ${node} | ${interface} -| | Run keyword and expect error | *KeyError:* -| | ... | Set Variable | ${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} -| | ${data}= | VPP get interface ip addresses | ${node} | ${interface} | ipv4 -| | Should be empty | ${data} - -| 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 \ -| | [Arguments] | ${node} | ${interface} | ${fib_address} | ${fib_mac} -| | Add ipv4 neighbor -| | ... | ${node} | ${interface} | ${fib_address} | ${fib_mac} - -| IPv4 neighbor from Honeycomb should be -| | [Documentation] | Retrieves ipv4 neighbor list through Honeycomb\ -| | ... | and checks if it contains address supplied in arguments. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - ip_address - ipv4 address of expected neighbor entry. Type: string -| | ... | - mac_address - MAC address of expected neighbor entry. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv4 neighbor from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.4 \| 08:00:27:60:26:ab \| -| | [Arguments] | ${node} | ${interface} | ${ip_address} | ${mac_address} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${settings}= | Create Dictionary -| | ... | ip=${ip_address} | link-layer-address=${mac_address} | origin=static -| | Should contain | ${api_data['ietf-ip:ipv4']['neighbor']} | ${settings} - -| Honeycomb clears all interface IPv4 neighbors -| | [Documentation] | Uses Honeycomb API to remove all ipv4 neighbors 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 clears all interface IPv4 neighbors \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | Remove all ipv4 neighbors | ${node} | ${interface} - -| IPv4 neighbor from Honeycomb should be empty -| | [Documentation] | Retrieves ipv4 neighbor list through Honeycomb\ -| | ... | and expects to find no ipv4 neighbors. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv4 neighbor from Honeycomb should be empty \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Run keyword and expect error | *KeyError:* -| | ... | Set Variable | ${api_data['ietf-ip:ipv4']['neighbor'][0]['ip']} - -| Honeycomb sets interface IPv6 address -| | [Documentation] | Uses Honeycomb API to change ipv6 address\ -| | ... | of the specified interface. Existing IPv6 addresses will be removed,\ -| | ... | with the exception of self-configured link-layer IPv6. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - address - IP address to set. Type: string -| | ... | - prefix - length of subnet prefix to set. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb sets interface IPv6 address \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | Add first ipv6 address -| | ... | ${node} | ${interface} | ${address} | ${prefix} - -| Honeycomb adds interface IPv6 address -| | [Documentation] | Uses Honeycomb API to add an ipv6 address\ -| | ... | to the specified interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - address - IP address to set. Type: string -| | ... | - prefix - length of subnet prefix to set. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds interface IPv6 address \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | Add ipv6 address -| | ... | ${node} | ${interface} | ${address} | ${prefix} - -| Honeycomb fails to add interface IPv6 address -| | [Documentation] | Uses Honeycomb API to add an ipv6 address to the\ -| | ... | specified interface, and expects to fail with code 500. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - 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:integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb fails to add interface IPv6 address \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | Run Keyword and Expect Error | *not successful. Status code: 500. -| | ... | Honeycomb adds interface IPv6 address -| | ... | ${node} | ${interface} | ${address} | ${prefix} - -| IPv6 address from Honeycomb should contain -| | [Documentation] | Retrieves interface ipv6 address through Honeycomb\ -| | ... | and compares with state supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - 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 -| | ... | - prefix - length of subnet prefix to expect. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv6 address from Honeycomb should contain \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${settings}= | Create Dictionary -| | ... | ip=${address} | prefix-length=${prefix} -| | Should contain | ${api_data['ietf-ip:ipv6']['address']} | ${settings} - -| IPv6 address from VAT should contain -| | [Documentation] | Retrieves interface ipv6 address through VAT and\ -| | ... | compares with state supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - 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 -| | ... | - prefix - length of subnet prefix to expect. Type: string -| | ... | - sw_if_index - index of interface. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv6 address from VAT should contain \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| -| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} | ${netmask} -| | ${sw_if_index}= | Vpp Get Interface Sw Index | ${node} | ${interface} -| | ${vpp_data}= | VPP get interface ip addresses -| | ... | ${node} | ${interface} | ipv6 -| | ${settings}= | Create Dictionary -| | ... | ip=${address} | netmask=${netmask} | sw_if_index=${sw_if_index} -| | ... | prefix_length=${prefix} | is_ipv6=${1} -| | Should contain | ${vpp_data} | ${settings} - -| Honeycomb removes interface IPv6 addresses -| | [Documentation] | Removes all configured ipv6 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 IPv6 addresses \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | Remove all ipv6 addresses | ${node} | ${interface} - -| IPv6 address from Honeycomb should be empty -| | [Documentation] | Retrieves interface ipv6 configuration through Honeycomb\ -| | ... | and expects to find no IPv6 addresses. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv6 address from Honeycomb should be empty\| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Run keyword and expect error | *KeyError:* -| | ... | Set Variable | ${api_data['ietf-ip:ipv6']['address']} - -| IPv6 address from VAT should be empty -| | [Documentation] | Retrieves interface ipv6 configuration through VAT and\ -| | ... | expects to find no ipv6 addresses. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv6 config from VAT should be empty \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | ${data}= | VPP get interface ip addresses | ${node} | ${interface} | ipv6 -| | Should be empty | ${data} - -| Honeycomb adds interface IPv6 neighbor -| | [Documentation] | Uses Honeycomb API to assign an ipv6 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 IPv6 neighbor \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.3 \| 08:00:27:c0:5d:37 \| -| | [Arguments] | ${node} | ${interface} | ${fib_address} | ${fib_mac} -| | Add ipv6 neighbor -| | ... | ${node} | ${interface} | ${fib_address} | ${fib_mac} - -| IPv6 neighbor from Honeycomb should be -| | [Documentation] | Retrieves ipv6 neighbor list through Honeycomb\ -| | ... | and checks if it contains address supplied in arguments. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - ip_address - ipv6 address of expected neighbor entry. Type: string -| | ... | - mac_address - MAC address of expected neighbor entry. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv6 neighbor from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.4 \| 08:00:27:60:26:ab \| -| | [Arguments] | ${node} | ${interface} | ${ip_address} | ${mac_address} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${settings}= | Create Dictionary -| | ... | ip=${ip_address} | link-layer-address=${mac_address} | origin=static -| | Should contain | ${api_data['ietf-ip:ipv6']['neighbor']} | ${settings} - -| Honeycomb clears all interface IPv6 neighbors -| | [Documentation] | Uses Honeycomb API to remove all ipv6 neighbors 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 clears all interface IPv6 neighbors \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | Remove all ipv6 neighbors | ${node} | ${interface} - -| IPv6 neighbor from Honeycomb should be empty -| | [Documentation] | Retrieves ipv6 neighbor list through Honeycomb\ -| | ... | and expects to find no ipv6 neighbors. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv6 neighbor from Honeycomb should be empty \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Run keyword and expect error | *KeyError:* -| | ... | Set Variable | ${api_data['ietf-ip:ipv6']['neighbor'][0]['ip']} - -| Honeycomb sets interface ethernet configuration -| | [Documentation] | Uses Honeycomb API to change interface ethernet\ -| | ... | configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - ethernet - interface ethernet settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb sets interface ethernet configuration \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${{'mtu': 1500}} \ -| | [Arguments] | ${node} | ${interface} | ${ethernet} -| | :FOR | ${key} | IN | @{ethernet.keys()} -| | | Configure interface ethernet -| | | ... | ${node} | ${interface} | ${key} | ${ethernet['${key}']} - -| Interface ethernet Operational Data From Honeycomb Should Be -| | [Documentation] | Retrieves interface ethernet configuration\ -| | ... | through Honeycomb and compares with settings supplied in arguments. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - ethernet - interface ethernet settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface ethernet Operational Data From Honeycomb Should Be \ -| | ... | should be \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \ -| | ... | \| ${{'mtu': 1500}} \| -| | [Arguments] | ${node} | ${interface} | ${ethernet} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | :FOR | ${key} | IN | @{ethernet.keys()} -| | | Should be equal -| | | ... | ${api_data['v3po:ethernet']['${key}']} | ${ethernet['${key}']} - -| Interface ethernet Operational Data From VAT Should Be -| | [Documentation] | Retrieves interface ethernet configuration\ -| | ... | through VAT and compares with settings supplied in arguments. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - mtu - value of maximum transmission unit expected. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface ethernet Operational Data From VAT Should Be \ -| | ... | should be \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1500} \| -| | [Arguments] | ${node} | ${interface} | ${mtu} -| | ${vat_data}= | VPP get interface data | ${node} | ${interface} -| | Should be equal | ${vat_data['mtu']} | ${mtu} - -| Honeycomb sets interface VRF ID -| | [Documentation] | Uses Honeycomb API to change interface vrf\ -| | ... | configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - vrf_id - vrf ID to configure. Type:integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb sets interface VRF ID \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| ipv4 \| -| | [Arguments] | ${node} | ${interface} | ${vrf_id} | ${ip_version} -| | Configure interface routing -| | ... | ${node} | ${interface} | ${ip_version}-vrf-id | ${vrf_id} - -| Interface VRF ID from Honeycomb should be -| | [Documentation] | Retrieves interface ethernet configuration\ -| | ... | through Honeycomb and compares with settings supplied in arguments. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - vrf_id - vrf ID to expect. Type:integer -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface VRF ID from Honeycomb should be \ -| | ... | should be \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \ -| | ... | \| ipv4 \| -| | [Arguments] | ${node} | ${interface} | ${vrf_id} | ${ip_version} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} | -| | Should be equal -| | ... | ${api_data['v3po:routing']['${ip_version}-vrf-id']} | ${vrf_id} - -| Interface VRF ID from VAT should be -| | [Documentation] | Retrieves interface ethernet configuration\ -| | ... | through VAT and compares with settings supplied in arguments. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - vrf_id - vrf ID to expect. Type:integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface VRF ID from VAT should be \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| -| | [Arguments] | ${node} | ${interface} | ${vrf_id} -| | ${vat_data}= | get interface vrf table -| | ... | ${node} | ${interface} -| | Should be equal | ${vat_data} | ${vrf_id} - -| Interface Operational Data From Honeycomb Should Be empty -| | [Documentation] | Attempts to retrieve interface configuration through\ -| | ... | Honeycomb and expects to get empty dictionary. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of a interface on the specified node. Type:\ -| | ... | string -| | ... -| | ... | *Example:* -| | ... | \| Interface Operational Data From Honeycomb Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Should be empty | ${api_data} - -| Interface Operational Data From VAT Should Be empty -| | [Documentation] | Attempts to retrieve Interface configuration through\ -| | ... | VAT and expects to get empty dictionary. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of a Interface on the specified node. Type:\ -| | ... | string -| | ... -| | ... | *Example:* -| | ... | \| Interface Operational Data From VAT Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} | -| | ${vat_data}= | VPP get interface data | ${node} | ${interface} -| | Should be empty | ${vat_data} - -| Interface indices from Honeycomb and VAT should correspond -| | [Documentation] | Uses VAT and Honeycomb to get operational data about the\ -| | ... | given interface and compares the interface indexes. The interface -| | ... | index from Honeycomb should be greater than index from VAT by one. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of the interface to be checked. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface indices from Honeycomb and VAT should correspond \ -| | ... | \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ... -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${vat_data}= | VPP get interface data | ${node} | ${interface} -| | ${sw_if_index}= | EVALUATE | ${vat_data['sw_if_index']} + 1 -| | Should be equal as strings -| | ... | ${api_data['if-index']} | ${sw_if_index} - -| Get interface index from oper data -| | [Documentation] | Retrieves interface operational data and returns\ -| | ... | if-index of the specified interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of the interface. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Get interface index from oper data \| ${nodes['DUT1']} \| local0 \| -| | [Arguments] | ${node} | ${interface} -| | ${data}= | Get interface oper data | ${node} | ${interface} -| | Return from keyword | ${data['if-index']} - -| Honeycomb should show disabled interface in oper data -| | [Documentation] | Retrieves list of disabled interfaces\ -| | ... | and verifies that there is at least one. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - index - index of the interface to be checked. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb should show disabled interface in oper data \ -| | ... | \| ${nodes['DUT1']} \| ${vx_interface} \| -| | [Arguments] | ${node} | ${index} -| | check disabled interface | ${node} | ${index} - -| Honeycomb should not show disabled interface in oper data -| | [Documentation] | Retrieves list of disabled interfaces\ -| | ... | and expects to fail with a 404 - not found. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - index - index of the interface to be checked. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb should not show disabled interface in oper data \ -| | ... | \| ${nodes['DUT1']} \| ${vx_interface} \| -| | [Arguments] | ${node} | ${index} -| | Run keyword and expect error | * -| | ... | Honeycomb should show disabled interface in oper data -| | ... | ${node} | ${index} - -| Ping and verify IP address -| | [Documentation] | Sends ICMP packet from IP (with source mac) to IP -| | ... | (with dest mac), then waits for ICMP reply. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | _NOTE:_ Arguments are based on topology: -| | ... | TG(if1)->(if1)DUT(if2)->TG(if2) -| | ... -| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary -| | ... | - src_ip - IP of source interface (TG-if1). Type: integer -| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer -| | ... | - tx_port - Source interface (TG-if1). Type: string -| | ... | - tx_mac - MAC address of source interface (TG-if1). Type: string -| | ... | - rx_port - Destionation interface (TG-if1). Type: string -| | ... | - rx_mac - MAC address of destination interface (TG-if1). Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Ping verify IP address \| ${nodes['TG']} \ -| | ... | \| 16.0.0.1 \| 32.0.0.1 \| eth2 \| 08:00:27:cc:4f:54 \ -| | ... | \| eth4 \| 08:00:27:c9:6a:d5 \| -| | ... -| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} | -| | ... | ${tx_mac} | ${rx_port} | ${rx_mac} -| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port} -| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port} -| | ${args}= | Catenate | --src_mac | ${tx_mac} -| | ... | --dst_mac | ${rx_mac} -| | ... | --src_ip | ${src_ip} -| | ... | --dst_ip | ${dst_ip} -| | ... | --tx_if | ${tx_port_name} -| | ... | --rx_if | ${rx_port_name} -| | ... | --timeout | ${5} -| | Run Traffic Script On Node | send_icmp_wait_for_reply.py -| | ... | ${tg_node} | ${args} - -| Honeycomb adds unnumbered configuration to interface -| | [Documentation] | Adds unnumbered configuration to interface, borrowing IP -| | ... | address from the other specified interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - Name of the interface to be configured. Type: string -| | ... | - interface_src - Name of the interface to borrow IP address from.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds unnumbered configuration to interface \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \| -| | ... -| | [Arguments] | ${node} | ${Interface} | ${interface_src} -| | Configure interface unnumbered | ${node} | ${interface} | ${interface_src} - -| Honeycomb removes unnumbered configuration from interface -| | [Documentation] | Removes unnumbered configuration from the specified -| | ... | interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - Name of the interface to be configured. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds unnumbered configuration to interface \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${Interface} -| | Configure interface unnumbered | ${node} | ${interface} diff --git a/resources/libraries/robot/honeycomb/ipv6_control.robot b/resources/libraries/robot/honeycomb/ipv6_control.robot deleted file mode 100644 index 8e50a31927..0000000000 --- a/resources/libraries/robot/honeycomb/ipv6_control.robot +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.DHCP.DHCPRelayKeywords -| Library | resources.libraries.python.Dhcp.DhcpProxy -| Library | resources.libraries.python.DUTSetup -| Documentation | Keywords used to test Honeycomb DHCP features. - -*** Keywords *** -| Convert data-plane interface to control-plane -| | [Documentation] | Unbinds an interface from VPP and binds it to kernel\ -| | ... | driver specified in topology. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the interface in topology. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Convert data-plane interface to control-plane \| ${nodes['DUT1']} \ -| | ... | \| port3 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ${new_driver}= | Get Variable Value -| | ... | ${node['interfaces']['${interface}']['driver']} -| | PCI Driver Unbind | ${node} -| | ... | ${node['interfaces']['${interface}']['pci_address']} -| | Run Keyword If | '${new_driver}' == 'None' -| | ... | PCI Driver Bind | ${node} -| | ... | ${node['interfaces']['${interface}']['pci_address']} | virtio-pci -| | ... | ELSE -| | ... | PCI Driver Bind | ${node} -| | ... | ${node['interfaces']['${interface}']['pci_address']} | ${new_driver} diff --git a/resources/libraries/robot/honeycomb/l2_fib.robot b/resources/libraries/robot/honeycomb/l2_fib.robot deleted file mode 100644 index d103d41de6..0000000000 --- a/resources/libraries/robot/honeycomb/l2_fib.robot +++ /dev/null @@ -1,186 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.honeycomb.HcAPIKwBridgeDomain.BridgeDomainKeywords -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Resource | resources/libraries/robot/honeycomb/papi.robot - -*** Keywords *** -| Honeycomb adds L2 FIB entry to bridge domain -| | [Documentation] | Add L2 FIB entry to the specified bridge domain using \ -| | ... | Honyecomb API. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... | - l2_fib_settings - The parameters of the new L2 FIB entry. \ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb adds L2 FIB entry to bridge domain \ -| | ... | \| ${nodes['DUT1']} \| test_bd \| ${l2_fib_forward_cfg} \| -| | ... -| | [Arguments] | ${node} | ${bd_name} | ${l2_fib_settings} -| | ... -| | Add L2 FIB Entry | ${node} | ${bd_name} | ${l2_fib_settings} - -| L2 FIB Table from Honeycomb should be empty -| | [Documentation] | Check if the L2 FIB table in the specified bridge domain \ -| | ... | is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... -| | ... | *Example:* -| | ... | \| L2 FIB Table from Honeycomb should be empty \ -| | ... | \| ${nodes['DUT1']} \| test_bd \| -| | ... -| | [Arguments] | ${node} | ${bd_name} -| | ... -| | ${l2_fib_data}= | Get All L2 FIB Entries | ${node} | ${bd_name} -| | Should be empty | ${l2_fib_data} - -| L2 FIB Entry from Honeycomb should be -| | [Documentation] | Retrieves the operational data about the specified L2 \ -| | ... | FIB entry and checks if they are as expected. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... | - l2_fib_ref_data - L2 FIB entry referential data. Type: dictionay -| | ... -| | ... | *Example:* -| | ... | \| L2 FIB Entry from Honeycomb should be \ -| | ... | \| ${nodes['DUT1']} \| test_bd \| ${l2_fib_forward_oper} \| -| | ... -| | [Arguments] | ${node} | ${bd_name} | ${l2_fib_ref_data} -| | ... -| | ${l2_fib_data}= | Get L2 FIB Entry | ${node} | ${bd_name} -| | ... | ${l2_fib_ref_data['phys-address']} -| | Compare Data Structures | ${l2_fib_data} | ${l2_fib_ref_data} - -| Honeycomb removes L2 FIB entry -| | [Documentation] | Remove the specified L2 FIB entry from the bridge \ -| | ... | domain's L2 FIB table. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... | - mac - MAC address used as the key in L2 FIB data structure. \ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb removes L2 FIB entry \ -| | ... | \| ${nodes['DUT1']} \| test_bd \ -| | ... | \| ${l2_fib_forward_oper['phys-address']} \| -| | ... -| | [Arguments] | ${node} | ${bd_name} | ${mac} -| | ... -| | Remove L2 FIB Entry | ${node} | ${bd_name} | ${mac} - -| Honeycomb removes all L2 FIB entries -| | [Documentation] | Remove all L2 FIB enties from the bridge domain's L2 FIB \ -| | ... | table. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb removes all L2 FIB entries \ -| | ... | \| ${nodes['DUT1']} \| test_bd \| -| | ... -| | [Arguments] | ${node} | ${bd_name} -| | ... -| | Remove all L2 FIB entries | ${node} | ${bd_name} - -| Honeycomb fails to add wrong L2 FIB entry -| | [Documentation] | Honeycomb tries to add a wrong L2 FIB entry and expects \ -| | ... | that it fails. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... | - l2_fib_settings - The wrong parameters of the new L2 FIB entry. \ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails to add wrong L2 FIB entry \ -| | ... | \| ${nodes['DUT1']} \| test_bd \| ${l2_fib_wrong_cfg} \| -| | ... -| | [Arguments] | ${node} | ${bd_name} | ${l2_fib_settings} -| | ... -| | Run keyword and expect error | *HoneycombError: * was not successful. *00. -| | ... | Add L2 FIB Entry | ${node} | ${bd_name} | ${l2_fib_settings} - -| Honeycomb fails to modify L2 FIB entry -| | [Documentation] | Honeycomb tries to modify an existing L2 FIB entry and \ -| | ... | expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_name - Name of the bridge domain. Type: string -| | ... | - mac - MAC address used as the key in L2 FIB data structure. \ -| | ... | Type: string -| | ... | - param - The parameter to be modified. Type: string -| | ... | - value - The new value of the parameter. Type: string or integer -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails to modify L2 FIB entry \ -| | ... | \| ${nodes['DUT1']} \| test_bd \ -| | ... | \| ${l2_fib_forward_oper['phys-address']} \| action \ -| | ... | \| l2-fib-forward \| -| | ... -| | [Arguments] | ${node} | ${bd_name} | ${mac} | ${param} | ${value} -| | ... -| | Run keyword and expect error | *HoneycombError: * was not successful. *00. -| | ... | Modify L2 FIB Entry -| | ... | ${node} | ${bd_name} | ${mac} | ${param} | ${value} - -| L2 FIB entry from PAPI should be -| | [Documentation] | Retrieves the operational data about the specified L2 \ -| | ... | FIB entry using Python API and checks if it is as expected. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_index - Index of the bridge domain. Type: integer -| | ... | - l2_fib_ref_data - L2 FIB entry referential data. Type: dictionay -| | ... -| | ... | *Example:* -| | ... | \| L2 FIB entry from PAPI should be \ -| | ... | \| ${nodes['DUT1']} \| test_bd \| ${l2_fib_forward_oper} \| -| | ... -| | [Arguments] | ${node} | ${bd_index} | ${l2_fib_ref_data} -| | ... -| | ${l2_fib_data}= | Get L2 FIB entry PAPI | ${node} | ${bd_index} -| | ... | ${l2_fib_ref_data['mac']} -| | Compare Data Structures | ${l2_fib_data} | ${l2_fib_ref_data} - -| L2 FIB Table from PAPI should be empty -| | [Documentation] | Check if the L2 FIB table in the specified bridge domain \ -| | ... | is empty. Python API is used to get operational data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_index - Index of the bridge domain. Type: integer -| | ... -| | ... | *Example:* -| | ... | \| L2 FIB Table from PAPI should be empty \ -| | ... | \| ${nodes['DUT1']} \| test_bd \| -| | ... -| | [Arguments] | ${node} | ${bd_index} -| | ... -| | ${l2_fib_data}= | Get L2 FIB table PAPI | ${node} | ${bd_index} -| | Should be empty | ${l2_fib_data} diff --git a/resources/libraries/robot/honeycomb/lisp.robot b/resources/libraries/robot/honeycomb/lisp.robot deleted file mode 100644 index 5decf6b6e8..0000000000 --- a/resources/libraries/robot/honeycomb/lisp.robot +++ /dev/null @@ -1,718 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.Lisp.LispKeywords -| Library | resources.libraries.python.LispUtil -| Documentation | Keywords used to test Honeycomb Lisp features. - -*** Keywords *** -| Honeycomb enables LISP -| | [Documentation] | Uses Honeycomb API to enable LISP. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb enables LISP \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Set LISP state | ${node} | ${TRUE} - -| Honeycomb disables LISP -| | [Documentation] | Uses Honeycomb API to disable LISP. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb disables LISP \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Set LISP state | ${node} | ${FALSE} - -| Honeycomb adds locator set -| | [Documentation] | Uses Honeycomb API to enable LISP. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - Name of an interface on the node. Type: string -| | ... | - locator_set - Name for the new locator set. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds locator set \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| loc_01 \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${locator_set} -| | ... -| | Add locator | ${node} | ${interface} | ${locator_set} - -| Honeycomb adds LISP Mapping -| | [Documentation] | Uses Honeycomb API to configure a LISP mapping. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - data - LISP settings to use. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds LISP Mapping \| ${nodes['DUT1']} \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${data} -| | ... -| | Configure LISP Mapping | ${node} | ${data} - -| Honeycomb removes all LISP mappings -| | [Documentation] | Uses Honeycomb API to clear the eid-table. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes all LISP mappings \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Configure LISP mapping | ${node} | ${NONE} - -| LISP should not be configured -| | [Documentation] | Retrieves LISP configuration from Honeycomb operational\ -| | ... | data, and expects an empty dictionary. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP should not be configured \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Run keyword and Expect Error | KeyError: 'lisp-feature-data' -| | ... | Get LISP operational data | ${node} - -| LISP state from Honeycomb should be -| | [Documentation] | Retrieves LISP state from Honeycomb operational\ -| | ... | data, and compares LISP state with expected value. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - Expected LISP state. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP state from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| enabled \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ${data}= | Get LISP operational data | ${node} -| | ... -| | Run keyword if | $state == 'enabled' -| | ... | Should be equal as strings -| | ... | ${data['lisp-state']['enable']} | ${True} -| | Run keyword if | $state == 'disabled' -| | ... | Should be equal as strings -| | ... | ${data['lisp-state']['enable']} | ${False} - -| LISP state from VAT should be -| | [Documentation] | Retrieves LISP state from VAT,\ -| | ... | and compares LISP state with expected value. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - Expected LISP state. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP state from VAT should be \| ${nodes['DUT1']} \| enabled \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ... -| | ${status}= | VPP show LISP State | ${node} -| | Should match | ${status['feature_status']} | ${state} - -| LISP mapping from Honeycomb should be -| | [Documentation] | Retrieves LISP mapping from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - settings - Expected LISP mapping data. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP mapping from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| ${settings} \| -| | ... -| | [Arguments] | ${node} | ${settings} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']} -| | ${data}= | Set Variable | ${data['eid-table']['vni-table'][0]} -| | Compare data structures | ${data} | ${settings} - -| LISP mapping from VAT should be -| | [Documentation] | Retrieves LISP mapping from VAT,\ -| | ... | and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - settings - Expected LISP mapping data. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP mapping from VAT should be \| ${nodes['DUT1']} \ -| | ... | \| ${settings} \| -| | ... -| | [Arguments] | ${node} | ${settings} -| | ... -| | ${data}= | VPP show LISP eid table | ${node} -| | Compare data structures | ${data[0]} | ${settings} - -| LISP mappings from Honeycomb should not exist -| | [Documentation] | Retrieves LISP mappings from operational\ -| | ... | data, and expects to find none. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP mappings from Honeycomb should not exist \ -| | ... | \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']} -| | Should be empty | ${data['eid-table']['vni-table']} - -| LISP mappings from VAT should not exist -| | [Documentation] | Retrieves LISP mappings from VAT,\ -| | ... | and expects to receive an empty list. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP mappings from VAT should not exist \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | ${data}= | VPP show LISP eid table | ${node} -| | Should be empty | ${data} - -| Locator set from Honeycomb should be -| | [Documentation] | Retrieves LISP locator set from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - Interface that should be referenced by locator.\ -| | ... | Type: dictionary -| | ... | - locator_set - Expected locator set name. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Locator set From Honeycomb Should Be \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| loc01 \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${locator_set} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${loc_data}= | Set Variable -| | ... | ${data['lisp-state']['lisp-feature-data']['locator-sets']} -| | Should be equal -| | ... | ${loc_data['locator-set'][0]['name']} -| | ... | ${locator_set} -| | Should be equal -| | ... | ${loc_data['locator-set'][0]['interface'][0]['interface-ref']} -| | ... | ${interface} - -| Honeycomb adds LISP adjacency -| | [Documentation] | Uses Honeycomb API to configure LISP adjacency. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - vni - Virtual network identifier number. Type: integer -| | ... | - map - Name of an existing remote mapping. Type: string -| | ... | - adjacency - Name for the new adjacency. Type: string -| | ... | - data - LISP adjacency settings to use. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds LISP adjacency \| ${nodes['DUT1']} \| ${1} \| map1\ -| | ... | \| adj1 \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${vni} | ${map} | ${adjacency} | ${data} -| | ... -| | Add LISP adjacency -| | ... | ${node} | ${vni} | ${map} | ${adjacency} | ${data} - -| Honeycomb adds LISP map resolver -| | [Documentation] | Uses Honeycomb API to configure LISP map resolver. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - ip_address - IP address for the map resolver. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds LISP map resolver \| ${nodes['DUT1']} \ -| | ... | \| 192.168.0.2 \| -| | ... -| | [Arguments] | ${node} | ${ip_address} -| | ... -| | Add map resolver | ${node} | ${ip_address} - -| Honeycomb adds LISP Map register -| | [Documentation] | Uses Honeycomb API to configure LISP map register. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - add_map_register - Set boolean value of map register. Type: bool -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds LISP Map register \| ${nodes['DUT1']} \ -| | ... | \| ${True} \| -| | ... -| | [Arguments] | ${node} | ${add_map_register} -| | ... -| | Set Map Register | ${node} | ${add_map_register} - -| Honeycomb sets LISP Map request Mode -| | [Documentation] | Uses Honeycomb API to configure LISP map request mode. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - set_map_request - Set boolean value of map request mode. Type: bool -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds LISP Map Request Mode \| ${nodes['DUT1']} \ -| | ... | \| ${True} \| -| | ... -| | [Arguments] | ${node} | ${set_map_request} -| | ... -| | Set Map Request Mode | ${node} | ${set_map_request} - -| Map resolver from Honeycomb should be -| | [Documentation] | Retrieves LISP map resolver from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - ip_address - IP address that should be referenced in map resolver.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Map resolver From Honeycomb Should Be \| ${nodes['DUT1']} \ -| | ... | \| 192.168.1.2 \| -| | ... -| | [Arguments] | ${node} | ${ip_address} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']} -| | ${data}= | Set Variable | ${data['map-resolvers']['map-resolver'][0]} -| | Should be equal | ${data['ip-address']} | ${ip_address} - -| Map resolver from VAT should be -| | [Documentation] | Retrieves LISP mapping from VAT,\ -| | ... | and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - ip_address - IP address that should be referenced in map resolver.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Map resolver From VAT Should Be \| ${nodes['DUT1']} \ -| | ... | \| 192.168.1.2 \| -| | ... -| | [Arguments] | ${node} | ${ip_address} -| | ... -| | ${data}= | Vpp show LISP map resolver | ${node} -| | Should be equal | ${data[0]['map resolver']} | ${ip_address} - -| Honeycomb adds LISP Map Server -| | [Documentation] | Uses Honeycomb API to configure LISP Map Server. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - ip_addresses - IP addresses for the Map Server.\ -| | ... | Type: any number of strings -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds LISP Map Server \| ${nodes['DUT1']} \ -| | ... | \| 192.168.0.2 \| 192.168.0.3 \| -| | ... -| | [Arguments] | ${node} | @{ip_addresses} -| | ... -| | Add Map Server | ${node} | @{ip_addresses} - -| Map Register from Honeycomb should be -| | [Documentation] | Retrieves LISP Map Register from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - Desired state - True. Type: bool -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Map Register From Honeycomb Should Be \| ${nodes['DUT1']} \ -| | ... | \| ${True} \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']} -| | ${data}= | Set Variable | ${data['map-register']} -| | Should be equal | ${data['enabled']} | ${state} - -| Map Server from Honeycomb should be -| | [Documentation] | Retrieves LISP Map Server from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - ip_addresses - IP addresses that should be referenced\ -| | ... | in Map Server. Type: any number of strings -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Map Server From Honeycomb Should Be \| ${nodes['DUT1']} \ -| | ... | \| 192.168.1.2 \| 192.168.1.7 \| -| | ... -| | [Arguments] | ${node} | @{ip_addresses} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | Verify Map Server Data from Honeycomb | ${data} | ${ip_addresses} - - -| Map Server from VAT should be -| | [Documentation] | Retrieves LISP mapping from VAT,\ -| | ... | and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - ip_addresses - IP addresses that should be referenced\ -| | ... | in Map Server. Type: any number of strings -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Map Server From VAT Should Be \| ${nodes['DUT1']} \ -| | ... | \| 192.168.1.2 \| 192.168.1.7 \| -| | ... -| | [Arguments] | ${node} | @{ip_addresses} -| | ... -| | ${data}= | Vpp show LISP Map Server | ${node} -| | Verify Map Server Data from VAT | ${data} | ${ip_addresses} - -| Map Register from VAT should be -| | [Documentation] | Retrieves LISP mapping from VAT,\ -| | ... | and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - Desired state - "enabled". Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Map Register From VAT Should Be \| ${nodes['DUT1']} \ -| | ... | \| enabled \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ... -| | ${data}= | Vpp show LISP Map Register | ${node} -| | Should be equal | ${data['state']} | ${state} - -| Map Request Mode from VAT should be -| | [Documentation] | Retrieves LISP Request Mode from VAT,\ -| | ... | and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - destination - Source or Destination in Map\ -| | ... | Request Mode. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Map Request Mode From VAT Should Be \| ${nodes['DUT1']} \ -| | ... | \| src-dst \| -| | ... -| | [Arguments] | ${node} | ${destination} -| | ... -| | ${data}= | Vpp show LISP Map Request Mode | ${node} -| | Should be equal | ${data['map_request_mode']} | ${destination} - -| Honeycomb enables LISP PITR feature -| | [Documentation] | Uses Honeycomb API to configure LISP PITR feature. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - locator_set - Name of an existing locator set. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb enables LISP PITR feature \| ${nodes['DUT1']} \| loc1 \| -| | ... -| | [Arguments] | ${node} | ${locator_set} -| | ... -| | Configure PITR | ${node} | ${locator_set} - -| Honeycomb enables LISP PETR feature -| | [Documentation] | Uses Honeycomb API to configure LISP PETR feature. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - ip_address - IP address. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb enables LISP PETR feature \| ${nodes['DUT1']}\ -| | ... | \| 192.168.0.1 \| -| | ... -| | [Arguments] | ${node} | ${ip_address} -| | ... -| | Configure PETR | ${node} | ${ip_address} - -| Honeycomb enables LISP RLOC feature -| | [Documentation] | Uses Honeycomb API to enable the LISP RLOC feature. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb enables LISP RLOC feature\ -| | ... | \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Set RLOC probe state | ${node} | ${TRUE} - -| PITR config from Honeycomb should be -| | [Documentation] | Retrieves PITR config from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - locator_set - Name of locator set that should be referenced\ -| | ... | in PITR config. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| PITR config from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| loc01 \| -| | ... -| | [Arguments] | ${node} | ${locator_set} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']} -| | ${data}= | Set Variable | ${data['pitr-cfg']} -| | Should be equal | ${data['locator-set']} | ${locator_set} - -| PETR configuration from Honeycomb should be -| | [Documentation] | Retrieves PETR config from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - ip_address - IP address for PETR config. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| PETR config from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| 192.168.0.1 \| -| | ... -| | [Arguments] | ${node} | ${ip_address} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']} -| | ${data}= | Set Variable | ${data['petr-cfg']['petr-address']} -| | Should be equal | ${data} | ${ip_address} - -| Map Request Mode from Honeycomb should be -| | [Documentation] | Retrieves List Map Request Mode from Honeycomb\ -| | ... | operational data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - destination - source-destination. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| List Map Request Mode from Honeycomb should be \| ${nodes['DUT1']}\ -| | ... | \| 192.168.0.1 \| -| | ... -| | [Arguments] | ${node} | ${destination} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']} -| | ${data}= | Set Variable | ${data['map-request-mode']['mode']} -| | Should be equal | ${data} | ${destination} - -| RLOC probing from Honeycomb should be -| | [Documentation] | Retrieves RLOC config from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - desired state -True/False. Type: bool -| | ... -| | ... | *Example:* -| | ... -| | ... | \| RLOC probing from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| ${True} \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ... -| | ${data}= | Get LISP operational data | ${node} -| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']} -| | ${data}= | Set Variable | ${data['rloc-probe']['enabled']} -| | Should be equal | ${data} | ${state} - -| PETR configuration from VAT should be -| | [Documentation] | Retrieves LISP mapping from VAT,\ -| | ... | and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - state of PETR config - enabled/disabled.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| PETR configuration From VAT Should Be \| ${nodes['DUT1']} \ -| | ... | \| enabled \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ... -| | ${data}= | Vpp show LISP PETR config | ${node} -| | Should be equal | ${data['status']} | ${state} - -| RLOC probing from VAT should be -| | [Documentation] | Retrieves LISP mapping from VAT,\ -| | ... | and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - state of RLOC config - enabled/disabled.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| RLOC configuration From VAT Should Be \| ${nodes['DUT1']} \ -| | ... | \| enabled \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ... -| | ${data}= | Vpp show LISP RLOC config | ${node} -| | Should be equal | ${data['state']} | ${state} - -| PITR config from VAT should be -| | [Documentation] | Retrieves PITR config from VAT,\ -| | ... | and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - locator_set - Name of locator set that should be referenced\ -| | ... | in PITR config. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| PITR config from VAT should be \| ${nodes['DUT1']} \ -| | ... | \| loc01 \| -| | ... -| | [Arguments] | ${node} | ${locator_set} -| | ... -| | ${data}= | VPP show LISP PITR | ${node} -| | Should be equal | ${data['status']} | enabled -| | Should be equal | ${data['locator_set']} | ${locator_set} - -| Honeycomb disables all LISP features -| | [Documentation] | Uses Honeycomb API to remove all LISP configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb disables all LISP features \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Disable LISP | ${node} - -| Send packet and verify LISP encap -| | [Documentation] | Send ICMP packet to DUT out one interface and receive\ -| | ... | a LISP encapsulated packet on the other interface. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | _NOTE:_ Arguments are based on topology: -| | ... | TG(if1)->(if1)DUT(if2)->TG(if2) -| | ... -| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary -| | ... | - src_ip - IP of source interface (TG-if1). Type: string -| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string -| | ... | - tx_src_port - Interface of TG-if1. Type: string -| | ... | - tx_src_mac - MAC address of TG-if1. Type: string -| | ... | - tx_dst_mac - MAC address of DUT-if1. Type: string -| | ... | - rx_port - Interface of TG-if1. Type: string -| | ... | - rx_src_mac - MAC address of DUT1-if2. Type: string -| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string -| | ... | - src_rloc - configured RLOC source address. Type: string -| | ... | - dst_rloc - configured RLOC destination address. Type: string -| | ... -| | ... | *Return:* -| | ... | - No value returned -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Send packet and verify LISP encap \| ${nodes['TG']} \| 10.0.0.1 \ -| | ... | \| 32.0.0.1 \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \ -| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \| 10.0.1.1 \ -| | ... | \| 10.0.1.2 \| -| | ... -| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port} -| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac} -| | ... | ${rx_dst_mac} | ${src_rloc} | ${dst_rloc} -| | ... -| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port} -| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port} -| | ${args}= | Catenate | --tg_src_mac | ${tx_src_mac} | --tg_dst_mac -| | ... | ${rx_dst_mac} | --dut_if1_mac | ${tx_dst_mac} | --dut_if2_mac -| | ... | ${rx_src_mac} | --src_ip | ${src_ip} | --dst_ip | ${dst_ip} -| | ... | --tx_if | ${tx_port_name} | --rx_if | ${rx_port_name} -| | ... | --src_rloc | ${src_rloc} | --dst_rloc | ${dst_rloc} -| | Run Traffic Script On Node | lisp/lisp_check.py | ${tg_node} -| | ... | ${args} - -| LISP Functional Traffic Test Teardown -| | [Documentation] | Teardown for LISP functional traffic test. -| | Show Packet Trace on all DUTs | ${nodes} -| | VPP Show LISP EID Table | ${node} -| | Disable LISP | ${node} diff --git a/resources/libraries/robot/honeycomb/lisp_gpe.robot b/resources/libraries/robot/honeycomb/lisp_gpe.robot deleted file mode 100644 index 2b265c83c6..0000000000 --- a/resources/libraries/robot/honeycomb/lisp_gpe.robot +++ /dev/null @@ -1,252 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.Lisp.LispGPEKeywords -| Library | resources.libraries.python.LispUtil -| Documentation | Keywords used to test Honeycomb Lisp GPE features. - -*** Keywords *** -| Honeycomb enables LISP GPE -| | [Documentation] | Uses Honeycomb API to enable LISP GPE. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb enables LISP GPE \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Set LISPGPE state | ${node} | ${TRUE} - -| Honeycomb disables LISP GPE -| | [Documentation] | Uses Honeycomb API to disable LISP GPE. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb disables LISP GPE \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Set LISPGPE state | ${node} | ${FALSE} - -| Honeycomb adds first LISP GPE Mapping -| | [Documentation] | Uses Honeycomb API to configure a LISP mapping. Removes -| | ... | any existing mappings. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - data - LISP settings to use. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds first LISP GPE Mapping \| ${nodes['DUT1']} \ -| | ... | \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${data} -| | ... -| | Configure LISPGPE Mapping | ${node} | ${data} - -| Honeycomb adds LISP GPE Mapping -| | [Documentation] | Uses Honeycomb API to configure a LISP mapping. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - data - LISP settings to use. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb adds LISP GPE Mapping \| ${nodes['DUT1']} \| ${data} \| -| | ... -| | [Arguments] | ${node} | ${data} -| | ... -| | Add LISPGPE Mapping | ${node} | ${data['id']} | ${data} - -| Honeycomb removes LISP GPE mapping -| | [Documentation] | Uses Honeycomb API to remove the specified mapping. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes LISP GPE mapping \| ${nodes['DUT1']} \ -| | ... | \| map_name \| -| | ... -| | [Arguments] | ${node} | ${mapping} -| | ... -| | Delete LISPGPE mapping | ${node} | ${mapping} - -| LISP GPE should not be configured -| | [Documentation] | Retrieves LISP GPE configuration from Honeycomb operational\ -| | ... | data, and expects an empty dictionary. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP GPE should not be configured \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | ${data}= | Get LISP GPE operational data | ${node} -| | Should be Equal -| | ... | ${data['gpe-state']['gpe-feature-data']['enable']} | ${FALSE} - -| LISP GPE state from Honeycomb should be -| | [Documentation] | Retrieves LISP GPE state from Honeycomb operational\ -| | ... | data, and compares LISP state with expected value. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - Expected LISP state. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP GPE state from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| enabled \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ... -| | ${data}= | Get LISPGPE operational data | ${node} -| | Run keyword if | $state == 'enabled' -| | ... | Should be equal as strings -| | ... | ${data['gpe-state']['gpe-feature-data']['enable']} | ${True} -| | Run keyword if | $state == 'disabled' -| | ... | Should be equal as strings -| | ... | ${data['gpe-state']['gpe-feature-data']['enable']} | ${False} - -| LISP GPE state from VAT should be -| | [Documentation] | Retrieves LISP state from VAT,\ -| | ... | and compares LISP state with expected value. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - state - Expected LISP state. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP state from VAT should be \| ${nodes['DUT1']} \| enabled \| -| | ... -| | [Arguments] | ${node} | ${state} -| | ... -| | ${status}= | VPP show LISP State | ${node} -| | Should match | ${status['gpe_status']} | ${state} - -| LISP GPE mapping from Honeycomb should be -| | [Documentation] | Retrieves LISP GPE mapping from Honeycomb operational\ -| | ... | data, and compares with expected data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - settings - Expected LISP mapping data. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP GPE mapping from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| ${settings} \| -| | ... -| | [Arguments] | ${node} | ${settings} -| | ... -| | ${data}= | Get LISPGPE mapping | ${node} | ${settings['id']} -| | Compare data structures | ${data} | ${settings} - -| LISP GPE mappings from Honeycomb should not exist -| | [Documentation] | Retrieves LISP GPE mappings from operational\ -| | ... | data, and expects to find none. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| LISP GPE mappings from Honeycomb should not exist \ -| | ... | \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | ${data}= | Get LISPGPE operational data | ${node} -| | Variable Should Not Exist -| | ... | ${data['gpe-state']['gpe-feature-data']['gpe-entry']} - -| Honeycomb disables all LISP GPE features -| | [Documentation] | Uses Honeycomb API to remove all LISP GPE configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb disables all LISP GPE features \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ... -| | Disable LISPGPE | ${node} - -| Send packet and verify LISP GPE encap -| | [Documentation] | Send ICMP packet to DUT out one interface and receive\ -| | ... | a LISP-GPE encapsulated packet on the other interface. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | _NOTE:_ Arguments are based on topology: -| | ... | TG(if1)->(if1)DUT(if2)->TG(if2) -| | ... -| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary -| | ... | - src_ip - IP of source interface (TG-if1). Type: string -| | ... | - dst_ip - IP of destination interface (TG-if2). Type: string -| | ... | - tx_src_port - Interface of TG-if1. Type: string -| | ... | - tx_src_mac - MAC address of TG-if1. Type: string -| | ... | - tx_dst_mac - MAC address of DUT-if1. Type: string -| | ... | - rx_port - Interface of TG-if1. Type: string -| | ... | - rx_src_mac - MAC address of DUT1-if2. Type: string -| | ... | - rx_dst_mac - MAC address of TG-if2. Type: string -| | ... | - src_rloc - configured RLOC source address. Type: string -| | ... | - dst_rloc - configured RLOC destination address. Type: string -| | ... -| | ... | *Return:* -| | ... | - No value returned -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Send packet and verify LISP GPE encap \| ${nodes['TG']} \ -| | ... | \| 10.0.0.1 \| 32.0.0.1 \| -| | ... | \| eth2 \| 08:00:27:ee:fd:b3 \| 08:00:27:a2:52:5b \ -| | ... | \| eth3 \| 08:00:27:4d:ca:7a \| 08:00:27:7d:fd:10 \ -| | ... | \| 10.0.1.1 \| 10.0.1.2 \| -| | ... -| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_src_port} | -| | ... | ${tx_src_mac} | ${tx_dst_mac} | ${rx_port} | ${rx_src_mac} -| | ... | ${rx_dst_mac} | ${src_rloc} | ${dst_rloc} -| | ... -| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_src_port} -| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port} -| | ${args}= | Catenate | --tg_src_mac | ${tx_src_mac} | --tg_dst_mac -| | ... | ${rx_dst_mac} | --dut_if1_mac | ${tx_dst_mac} | --dut_if2_mac -| | ... | ${rx_src_mac} | --src_ip | ${src_ip} | --dst_ip | ${dst_ip} -| | ... | --tx_if | ${tx_port_name} | --rx_if | ${rx_port_name} -| | ... | --src_rloc | ${src_rloc} | --dst_rloc | ${dst_rloc} -| | Run Traffic Script On Node | lisp/lispgpe_check.py | ${tg_node} -| | ... | ${args} - -| LISPGPE Functional Traffic Test Teardown -| | [Documentation] | Teardown for LISP GPE functional traffic test. -| | Show Packet Trace on all DUTs | ${nodes} -| | VPP Show LISP EID Table | ${node} -| | Disable LISPGPE | ${node} diff --git a/resources/libraries/robot/honeycomb/nat.robot b/resources/libraries/robot/honeycomb/nat.robot deleted file mode 100644 index c02507f412..0000000000 --- a/resources/libraries/robot/honeycomb/nat.robot +++ /dev/null @@ -1,157 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Library | resources.libraries.python.honeycomb.NAT.NATKeywords -| Documentation | Keywords used to test Honeycomb NAT node. - -*** Keywords *** -| NAT Operational Data From Honeycomb Should Be empty -| | [Documentation] | Uses Honeycomb API to retrieve NAT operational data\ -| | ... | and expects to find only default values. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - default_settings - NAT default settings. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NAT Operational Data From Honeycomb Should Be empty \ -| | ... | \| ${nodes['DUT1']} \| ${default_settings} \| -| | [Arguments] | ${node} | ${default_settings} -| | ${data}= | Get NAT Oper data | ${node} -| | Compare data structures | ${data} | ${default_settings} - -| Honeycomb configures NAT entry -| | [Documentation] | Uses Honeycomb API to configure a static NAT entry. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - data - NAT entry to configure. Type: dictionary -| | ... | - instance - NAT instance on VPP node. Type: integer -| | ... | - index - Index of NAT entry. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures NAT entry \| ${nodes['DUT1']} \| ${data} \ -| | ... | \| ${0} \| ${1} \| -| | [Arguments] | ${node} | ${data} | ${instance}=0 | ${index}=1 -| | Configure NAT entries | ${node} | ${data} | ${instance} | ${index} - -| NAT entries from Honeycomb should be -| | [Documentation] | Uses Honeycomb API to retrieve NAT operational data\ -| | ... | and compares against expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - settings - NAT entry to expect. Type: dictionary -| | ... | - instance - NAT instance on VPP node. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NAT entries from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| ${settings} \| ${0} \| -| | [Arguments] | ${node} | ${settings} | ${instance}=0 -| | ${data}= | Get NAT Oper data | ${node} -| | ${data}= | Set Variable -| | ... | ${data['instances']['instance'][${instance}]['mapping-table']} -| | Compare data structures | ${data} | ${settings} - -| Honeycomb configures NAT on interface -| | [Documentation] | Uses Honeycomb API to configure NAT on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... | - direction - NAT direction parameter, inbound or outbound.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures NAT on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| outbound \| -| | [Arguments] | ${node} | ${interface} | ${direction} -| | Configure NAT on interface -| | ... | ${node} | ${interface} | ${direction} - -| Honeycomb removes NAT interface configuration -| | [Documentation] | Uses Honeycomb API to remove an existing NAT interface\ -| | ... | configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... | - direction - NAT direction parameter, inbound or outbound.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes NAT interface configuration \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| outbound \| -| | [Arguments] | ${node} | ${interface} | ${direction} -| | Configure NAT on interface -| | ... | ${node} | ${interface} | ${direction} | ${True} - -| NAT interface Operational Data From Honeycomb Should Be -| | [Documentation] | Uses Honeycomb API to retrieve interface operational data\ -| | ... | and compares the NAT section against expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... | - direction - NAT direction parameter, inbound or outbound.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NAT interface Operational Data From Honeycomb Should Be \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| outbound \| -| | [Arguments] | ${node} | ${interface} | ${direction} -| | ${data}= | Get interface oper data | ${node} | ${interface} -| | Variable should exist | ${data['interface-nat:nat']['${direction}']} - -| NAT interface Operational Data From Honeycomb Should Be empty -| | [Documentation] | Uses Honeycomb API to retrieve interface operational data\ -| | ... | and expects to find no data for the given direction. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... | - direction - NAT direction parameter, inbound or outbound.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NAT interface Operational Data From Honeycomb Should Be empty \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| outbound \| -| | [Arguments] | ${node} | ${interface} | ${direction} -| | ${data}= | Get interface oper data | ${node} | ${interface} -| | Variable should not exist | ${data['interface-nat:nat']['${direction}']} - -| NAT interface Operational Data From VAT Should Be -| | [Documentation] | Uses Honeycomb API to retrieve NAT configured interfaces\ -| | ... | and compares with expected settings. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - settings - settings to expect. Type: dictionary -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NAT interface Operational Data From VAT Should Be \ -| | ... | \| ${nodes['DUT1']} \| ${settings} \| -| | [Arguments] | ${node} | ${settings} -| | ${data}= | VPP get NAT interfaces | ${node} -| | Compare data structures | ${data} | ${settings} diff --git a/resources/libraries/robot/honeycomb/netconf.robot b/resources/libraries/robot/honeycomb/netconf.robot deleted file mode 100644 index 1fd287dcd4..0000000000 --- a/resources/libraries/robot/honeycomb/netconf.robot +++ /dev/null @@ -1,57 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.honeycomb.Netconf -| Variables | resources/test_data/honeycomb/netconf/hello.py -| Documentation | Keywords for managing Netconf communication. - -*** Keywords *** -| Netconf session should be established -| | [Documentation] | Open a communication channel on the Netconf session\ -| | ... | and exchange hello messages. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Netconf session should be established \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Create session | ${node} | ${hello} - -| Error trigger is sent -| | [Documentation] | Send the specified error trigger through the channel. -| | ... -| | ... | *Arguments:* -| | ... | - trigger - RPC sequence that triggers a specific error. Type: string -| | ... | - params - Parameters for the trigger template. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Error trigger is sent \| <rpc>_some data_</rpc>]]>]]> \| -| | [Arguments] | ${trigger} | &{params} -| | Send | ${trigger} | &{params} - -| Replies should not contain RPC errors -| | [Documentation] | Read response received through the channel, and check if\ -| | ... | it is an error report. -| | ... -| | ... | *Arguments:* -| | ... | none -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Replies should not contain RPC errors \| -| | ${resp}= | Get all responses -| | should not contain | ${resp} | rpc-error diff --git a/resources/libraries/robot/honeycomb/notifications.robot b/resources/libraries/robot/honeycomb/notifications.robot deleted file mode 100644 index c5a481739c..0000000000 --- a/resources/libraries/robot/honeycomb/notifications.robot +++ /dev/null @@ -1,66 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.honeycomb.Notifications -| Variables | resources/test_data/honeycomb/netconf/hello.py -| Variables | resources/test_data/honeycomb/netconf/subscription.py -| Documentation | Keywords used to test Honeycomb notifications over Netconf. - -*** Keywords *** -| Notification listener should be established -| | [Documentation] | Connects to Honeycomb notification service. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Notification listener should be established \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Create session | ${node} | ${hello} -| | Add notification listener | ${subscription} - -| Honeycomb should send interface state notification -| | [Documentation] | Reads notification from Honeycomb and verifies\ -| | ... | notification type, interface name and interface admin-state. -| | ... -| | ... | *Arguments:* -| | ... | - interface - name of the affected interface. Type: string -| | ... | - state - expected state of interface, 'up' or 'down'. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb should send interface state notification \ -| | ... | \| GigabitEthernet0/8/0 \| up \| -| | [Arguments] | ${interface} | ${state} -| | ${reply}= | Get notification -| | Should contain | ${reply} | <interface-change -| | Should contain | ${reply} | <name>${interface}</name> -| | Should contain | ${reply} | <admin-status>${state}</admin-status> - -| Honeycomb should send interface deleted notification -| | [Documentation] | Reads notification from Honeycomb and verifies\ -| | ... | notification type and interface name. -| | ... -| | ... | *Arguments:* -| | ... | - interface - name of the deleted interface. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb should send interface deleted notification \ -| | ... | \| temp_interface \| -| | [Arguments] | ${interface} -| | ${reply}= | Get notification -| | Should contain | ${reply} | <interface-deleted -| | Should contain | ${reply} | <name>${interface}</name> diff --git a/resources/libraries/robot/honeycomb/nsh.robot b/resources/libraries/robot/honeycomb/nsh.robot deleted file mode 100644 index dfb0c989f6..0000000000 --- a/resources/libraries/robot/honeycomb/nsh.robot +++ /dev/null @@ -1,145 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.honeycomb.HcAPIKwNSH.NSHKeywords -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Documentation | Keywords used to test Honeycomb NSH node. - -*** Keywords *** -| NSH Operational Data From Honeycomb Should Be empty -| | [Documentation] | Uses Honeycomb API to retrieve NSH configuration\ -| | ... | and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NSH Operational Data From Honeycomb Should Be empty \ -| | ... | \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Run keyword and expect error | *Status code: 404* -| | ... | Get NSH oper data | ${node} - -| Honeycomb adds NSH entry -| | [Documentation] | Uses Honeycomb API to configure an NSH entry. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... | - name - name for the NSH entry. Type: string -| | ... | - data - settings for the NSH entry. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures NSH entry \| ${nodes['DUT1']} \| nsh_1 \ -| | ... | \| ${data} \| -| | [Arguments] | ${node} | ${name} | ${data} -| | Add NSH entry | ${node} | ${name} | ${data} - -| Honeycomb removes NSH entry -| | [Documentation] | Uses Honeycomb API to delete the specified NSH entry. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... | - name - name of the NSH entry to be deleted. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes NSH entry \| ${nodes['DUT1']} \| nsh_1 \| -| | [Arguments] | ${node} | ${name} -| | Remove NSH entry | ${node} | ${name} - -| Honeycomb adds NSH map -| | [Documentation] | Uses Honeycomb API to configure an NSH map. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... | - name - name for the NSH map. Type: string -| | ... | - data - settings for the NSH map. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures NSH map \| ${nodes['DUT1']} \| nsh_1 \ -| | ... | \| ${data} \| -| | [Arguments] | ${node} | ${name} | ${data} -| | Add NSH map | ${node} | ${name} | ${data} - -| Honeycomb removes NSH map -| | [Documentation] | Uses Honeycomb API to delete an NSH map. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... | - name - name of the NSH map to be deleted. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes NSH map \| ${nodes['DUT1']} \| nsh_1 \| -| | [Arguments] | ${node} | ${name} -| | Remove NSH map | ${node} | ${name} - -| NSH entry from Honeycomb should be -| | [Documentation] | Retrieves oper data for NSH entry and compares\ -| | ... | with provided values. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... | - name - name of the NSH entry. Type: string -| | ... | - data - expected NSH entry settings. Type dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NSH entry from Honeycomb should be \| ${nodes['DUT1']} \| nsh_1 \ -| | ... | \| ${data} \| -| | [Arguments] | ${node} | ${name} | ${data} -| | ${oper_data}= | Get NSH oper data | ${node} | entry_name=${name} -| | Compare data structures | ${oper_data} | ${data} - -| NSH map from Honeycomb should be -| | [Documentation] | Retrieves oper data for NSH map and compares\ -| | ... | with provided values. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... | - name - name of the NSH map. Type: string -| | ... | - data - expected NSH map settings. Type dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NSH map from Honeycomb should be \| ${nodes['DUT1']} \| nsh_1 \ -| | ... | \| ${data} \| -| | [Arguments] | ${node} | ${name} | ${data} -| | ${oper_data}= | Get NSH oper data | ${node} | map_name=${name} -| | Compare data structures | ${oper_data} | ${data} - -| NSH map from Honeycomb should not exist -| | [Documentation] | Retrieves oper data for NSH map and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dict -| | ... | - name - name of the NSH map. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| NSH map from Honeycomb should not exist \| ${nodes['DUT1']} \ -| | ... | \| nsh_1 \| -| | [Arguments] | ${node} | ${name} -| | Run keyword and expect error | *Status code: 404* -| | ... | Get NSH oper data | ${node} | map_name=${name} - -| Honeycomb clears NSH configuration -| | [Documentation] | Uses Honeycomb API to remove all NSH settings. -| | ... -| | [Arguments] | ${node} -| | Clear NSH settings | ${node}
\ No newline at end of file diff --git a/resources/libraries/robot/honeycomb/papi.robot b/resources/libraries/robot/honeycomb/papi.robot deleted file mode 100644 index 33797f1aea..0000000000 --- a/resources/libraries/robot/honeycomb/papi.robot +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (c) 2019 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 *** -| Library | resources.libraries.python.L2Util - -*** Keywords *** -| Get L2 FIB entry PAPI -| | [Documentation] | Retrieve the operational data about the specified L2 \ -| | ... | FIB entry using Python API. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_index - Index of the bridge domain. Type: integer -| | ... | - mac - MAC address. Type: string -| | ... -| | ... | *Example:* -| | ... | \| Get L2 FIB entry PAPI \ -| | ... | \| ${nodes['DUT1']} \| test_bd \| 00:fe:c8:e5:46:d1 \| -| | ... -| | [Arguments] | ${node} | ${bd_index} | ${mac} -| | ... -| | [Return] | ${l2_fib_data} -| | ... -| | ${l2_fib_data}= | Get L2 FIB entry by MAC | ${node} | ${bd_index} -| | ... | ${mac} - -| Get L2 FIB table PAPI -| | [Documentation] | Retrieve L2 FIB table data of the specified bridge \ -| | ... | domain using Python API. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - bd_index - Index of the bridge domain. Type: integer -| | ... -| | ... | *Example:* -| | ... | \| Get L2 FIB table PAPI \| ${nodes['DUT1']} \| test_bd \| -| | ... -| | [Arguments] | ${node} | ${bd_index} -| | ... -| | [Return] | ${l2_fib_data} -| | ... -| | ${l2_fib_data}= | Get L2 FIB table | ${node} | ${bd_index} diff --git a/resources/libraries/robot/honeycomb/performance.robot b/resources/libraries/robot/honeycomb/performance.robot deleted file mode 100644 index a4d8d101e7..0000000000 --- a/resources/libraries/robot/honeycomb/performance.robot +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.Performance -| Library | resources.libraries.python.InterfaceUtil -| Resource | resources/libraries/robot/honeycomb/honeycomb.robot -| Documentation | Keywords used in Honeycomb performance testing. - -*** Keywords *** -| Configure Honeycomb Netconf threads -| | [Documentation] | Modify thread configuration of Honeycomb's Netconf server, -| | ... | Requires a restart of Honeycomb to take effect. -| | ... -| | ... | *Arguments:* -| | ... | - node - Node to change configuration on. Type: dictionary -| | ... | - threads - Number of threads to configure. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Configure Honeycomb Netconf Threads \| ${nodes[DUT1]} \| ${2} \| -| | ... -| | [Arguments] | ${node} | ${threads} -| | Configure Netconf Threads | ${node} | ${threads} - -| Run base operational read performance trial -| | [Documentation] | Send Netconf requests over plain TCP to obtain VPP version -| | ... | from Honeycomb operational data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Node to run test on. Type: dictionary -| | ... | - cores - Number of available processor cores. Type: integer -| | ... | - cycles - Number of test cycles to run. Final results will\ -| | ... | be averaged across all runs. Type: integer -| | ... | - threads - Number of threads to use for generating traffic.\ -| | ... | Type: integer -| | ... | - requests - Number of requests to send in each thread and cycle.\ -| | ... | Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Run base operational read performance trial \| ${nodes[DUT1]} \ -| | ... | \| ${36} \| ${1} \| ${4} \| ${10000} \| -| | ... -| | [Arguments] | ${node} | ${cores} | ${cycles} | ${threads} | ${requests} -| | ${result}= | Run traffic script on DUT | ${node} | read_vpp_version.py -| | ... | ${cores} | cycles=${cycles} | threads=${threads} -| | ... | requests=${requests} -| | Set Test Message | ${result} - -| Generate VPP Startup Configuration for Honeycomb Test on DUT -| | [Arguments] | ${node} -| | [Documentation] | Create VPP base startup configuration on DUT, then restart -| | ... | VPP to apply the configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - VPP node to configure. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Generate VPP Startup Configuration for Honeycomb Test on DUT \ -| | ... | \| ${nodes[DUT1]} \| -| | ... -| | Import Library | resources.libraries.python.VppConfigGenerator -| | ... | WITH NAME | VPP_config -| | Run keyword | VPP_config.Set Node | ${node} -| | Run keyword | VPP_config.Add Unix Log -| | Run keyword | VPP_config.Add Unix CLI Listen -| | Run keyword | VPP_config.Add Unix Nodaemon -| | Run keyword | VPP_config.Add Socksvr -| | Run keyword | VPP_config.Add CPU Main Core | ${1} -| | Run keyword | VPP_config.Apply Config - -| Log Honeycomb and VPP process distribution on cores -| | [Documentation] | Log the distribution of VPP and Honeycomb child processes -| | ... | over the CPU cores. -| | ... -| | ... | *Arguments:* -| | ... | - node - Honeycomb node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Log Honeycomb and VPP process distribution on cores \ -| | ... | \| ${nodes[DUT1]} \| -| | ... -| | [Arguments] | ${node} -| | Log Core Schedule | ${node} | vpp -| | Log Core Schedule | ${node} | java - -| Generate Honeycomb startup configuration for performance test -| | [Documentation] | Create HC startup configuration and apply to config -| | ... | file on DUT. Requires Honeycomb restart to take effect. -| | ... -| | ... | *Arguments:* -| | ... | - node - Honeycomb node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Generate Honeycomb startup configuration for performance test \ -| | ... | \| ${nodes[DUT1]} \| -| | ... -| | [Arguments] | ${node} | ${cores} -| | Import Library | resources.libraries.python.honeycomb.HoneycombSetup.HoneycombStartupConfig -| | ... | WITH NAME | HC_config -| | Run Keyword | HC_config.Set CPU Scheduler | FIFO -| | Run Keyword | HC_config.Set CPU Core Affinity | ${2} | ${cores} -| | Run Keyword | HC_config.Set JIT Compiler Mode | server -| | Run Keyword | HC_config.Set Memory Size | ${512} | ${2048} -| | Run Keyword | HC_config.Set Metaspace Size | ${128} | ${512} -| | Run Keyword | HC_config.Set NUMA Optimization -| | Run Keyword | HC_config.apply config | ${node} diff --git a/resources/libraries/robot/honeycomb/persistence.robot b/resources/libraries/robot/honeycomb/persistence.robot deleted file mode 100644 index bc2b167f28..0000000000 --- a/resources/libraries/robot/honeycomb/persistence.robot +++ /dev/null @@ -1,332 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Library | resources.libraries.python.honeycomb.HcPersistence -| Resource | resources/libraries/robot/honeycomb/honeycomb.robot -| Resource | resources/libraries/robot/honeycomb/interfaces.robot -| Resource | resources/libraries/robot/honeycomb/vxlan.robot -| Resource | resources/libraries/robot/honeycomb/bridge_domain.robot -| Resource | resources/libraries/robot/honeycomb/tap.robot -| Resource | resources/libraries/robot/honeycomb/vhost_user.robot -| Resource | resources/libraries/robot/honeycomb/sub_interface.robot -| Variables | resources/test_data/honeycomb/persistence.py | ${interface} -| Documentation | Keywords used to test Honeycomb persistence. - -*** Keywords *** -| Restart Honeycomb -| | [Documentation] | Restarts Honeycomb without clearing persistence data. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Restart Honeycomb \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Stop Honeycomb service on DUTs | ${node} -| | Log Persisted Configuration | ${node} -| | Configure Honeycomb service on DUTs | ${node} - -| Restart VPP -| | [Documentation] | Restarts VPP and waits until it reconnects with Honeycomb. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Restart VPP \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Restart Vpp Service | ${node} -| | Verify Vpp | ${node} -| | VPP Enable Traces On DUT | ${node} -| | Check VPP connection | ${node} - -| Check VPP connection -| | [Documentation] | Checks if Honeycomb is connected to VPP by reading VPP\ -| | ... | version number from Honeycomb operational data. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Check VPP connection \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Wait until keyword succeeds | 2min | 20sec -| | ... | Check Honeycomb startup state | ${node} - -| Restart Honeycomb and VPP in pesistence test -| | [Documentation] | Stops Honeycomb, restarts VPP and then starts Honeycomb\ -| | ... | again. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Restart Honeycomb and VPP \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Stop Honeycomb service on DUTs | ${node} -| | Log Persisted Configuration | ${node} -| | Restart Vpp Service | ${node} -| | Verify Vpp | ${node} -| | VPP Enable Traces On DUT | ${node} -| | Configure Honeycomb service on DUTs | ${node} - -| Multi-Feature Persistence Test Configuration -| | [Documentation] | Uses Honeycomb to set basic settings for VxLAN,\ -| | ... | bridge domains, TAP, vhost-user and VLAN. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Multi-Feature Persistence Test Configuration \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | Honeycomb sets interface VxLAN configuration -| | ... | ${node} | ${vx_interface} | ${vxlan_settings} -| | Honeycomb creates first l2 bridge domain -| | ... | ${node} | ${bd_name} | ${bd_settings} -| | Honeycomb creates TAP interface -| | ... | ${node} | ${tap_interface} | ${tap_settings} -| | Honeycomb creates vhost-user interface -| | ... | ${node} | ${vhost_interface} | ${vhost_user_client} -| | Honeycomb creates sub-interface | ${node} | ${interface} -| | ... | ${sub_if_1_match} | ${sub_if_1_tags} | ${sub_if_1_settings} -| | Honeycomb configures interface state | ${node} | ${interface} | up -| | Honeycomb sets the sub-interface up -| | ... | ${node} | ${interface} | ${sub_if_id} -| | Honeycomb adds sub-interface to bridge domain -| | ... | ${node} | ${interface} | ${sub_if_id} | ${sub_bd_settings} -| | Honeycomb configures tag rewrite -| | ... | ${node} | ${interface} | ${sub_if_id} | ${tag_rewrite_pop_1} - -| Multi-Feature persistence Test Verification -| | [Documentation] | Uses Honeycomb and VAT to verify settings for VxLAN,\ -| | ... | bridge domains, TAP, vhost-user and VLAN. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Multi-Feature persistence Test Verification \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | VxLAN Operational Data From Honeycomb Should Be -| | ... | ${node} | ${vx_interface} | ${vxlan_settings} -| | VxLAN Operational Data From VAT Should Be -| | ... | ${node} | ${vxlan_settings} -| | Bridge domain Operational Data From Honeycomb Should Be -| | ... | ${node} | ${bd_name} | ${bd_settings} -| | Bridge domain Operational Data From VAT Should Be -| | ... | ${node} | ${0} | ${bd_settings} -| | TAP Operational Data From Honeycomb Should Be -| | ... | ${node} | ${tap_interface} | ${tap_settings_oper} -| | TAP Operational Data From VAT Should Be -| | ... | ${node} | ${tap_interface_vat} | ${tap_settings_vat} -| | Vhost-user Operational Data From Honeycomb Should Be -| | ... | ${node} | ${vhost_interface} | ${vhost_user_client} -| | Vhost-user Operational Data From VAT Should Be -| | ... | ${node} | ${vhost_user_client} -| | Sub-interface Operational Data From Honeycomb Should Be -| | ... | ${node} | ${interface} | ${sub_if_id} | ${sub_if_1_oper} -| | Sub-interface Operational Data From VAT Should Be -| | ... | ${node} | ${sub_if_name} | ${sub_if_1_oper} -| | Interface state from Honeycomb should be | ${node} | ${interface} | up -| | Interface state from VAT should be | ${node} | ${interface} | up -| | Sub-interface bridge domain Operational Data From Honeycomb Should Be -| | ... | ${node} | ${interface} | ${sub_if_id} | ${sub_bd_settings} -| | Sub-interface bridge domain Operational Data From PAPI Should Be -| | ... | ${node} | ${sub_if_name} | ${sub_bd_settings} -| | Rewrite tag from Honeycomb should be -| | ... | ${node} | ${interface} | ${sub_if_id} | ${tag_rewrite_pop_1_oper} -| | Rewrite tag from VAT should be -| | ... | ${node} | ${sub_if_name} | ${tag_rewrite_pop_1_VAT} -| | ${data_conf}= | Get all interfaces cfg data | ${node} -| | ${data_oper}= | Get all interfaces oper data | ${node} -| | Compare interface lists | ${data_conf} | ${data_oper} - -| Honeycomb and VPP should have default configuration -| | [Documentation] | Uses Honeycomb and VAT to verify settings for VxLAN,\ -| | ... | bridge domains, TAP, vhost-user and VLAN. Expects default\ -| | ... | configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb and VPP should have default configuration \| -| | ... | ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | VxLAN Operational Data From Honeycomb Should Be empty -| | ... | ${node} | ${vx_interface} -| | VxLAN Operational Data From VAT Should Be empty | ${node} -| | Honeycomb should show no bridge domains | ${node} -| | PAPI should show no bridge domains | ${node} -| | TAP Operational Data From Honeycomb Should Be empty -| | ... | ${node} | ${tap_interface} -| | TAP Operational Data From VAT Should Be empty -| | ... | ${node} | ${tap_interface} -| | Vhost-user Operational Data From Honeycomb Should Be empty -| | ... | ${node} | ${vhost_interface} -| | Vhost-user Operational Data From VAT Should Be empty -| | ... | ${node} -| | interface state from Honeycomb should be -| | ... | ${node} | ${interface} | down -| | And interface state from VAT should be -| | ... | ${node} | ${interface} | down - -| Persistence file is damaged during restart -| | [Documentation] | Shuts down Honeycomb, modifies persistence files to\ -| | ... | simulate damage, then restarts VPP and starts up Honeycomb again. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Persistence file is damaged during restart \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Stop Honeycomb service on DUTs | ${node} -| | Modify persistence files | ${node} | { | abc -| | Restart Vpp Service | ${node} -| | Verify Vpp | ${node} -| | VPP Enable Traces On DUT | ${node} -| | Configure Honeycomb service on DUTs | ${node} - -| Log persisted configuration on node -| | [Documentation] | Logs the content of Honeycomb's persitence files. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Log persisted configuration on node \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Log persisted configuration | ${node} - -| Interface Persistence Setup -| | [Documentation] | Configure interface state, ipv4 and ipv6 addresses -| | ... | and neighbors. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface Persistence Setup \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Honeycomb and VPP should have default configuration | ${node} -| | Import Variables | resources/test_data/honeycomb/interface_ip.py -| | Honeycomb configures interface state | ${node} | ${interface} | up -| | Honeycomb sets interface IPv4 address with prefix -| | ... | ${node} | ${interface} | ${ipv4_address} | ${ipv4_prefix} -| | Honeycomb adds interface IPv4 neighbor -| | ... | ${node} | ${interface} | ${ipv4_neighbor} | ${neighbor_mac} -| | Honeycomb sets interface IPv6 address -| | ... | ${node} | ${interface} | ${ipv6_address} | ${ipv6_prefix} -| | Honeycomb adds interface IPv6 neighbor -| | ... | ${node} | ${interface} | ${ipv6_neighbor} | ${neighbor_mac} - -| Interface Persistence Check -| | [Documentation] | Verify interface state, ipv4 and ipv6 addresses -| | ... | and neighbors. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface Persistence Check \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Interface state from Honeycomb should be | ${node} | ${interface} | up -| | IPv4 address from Honeycomb should be -| | ... | ${node} | ${interface} | ${ipv4_address} | ${ipv4_prefix} -| | IPv4 address from VAT should be -| | ... | ${node} | ${interface} | ${ipv4_address} -| | ... | ${ipv4_prefix} | ${ipv4_mask} -| | IPv4 neighbor from Honeycomb should be -| | ... | ${node} | ${interface} | ${ipv4_neighbor} | ${neighbor_mac} -| | IPv6 address from Honeycomb should contain -| | ... | ${node} | ${interface} | ${ipv6_address} | ${ipv6_prefix} -| | IPv6 address from VAT should contain -| | ... | ${node} | ${interface} | ${ipv6_address} -| | ... | ${ipv6_prefix} | ${ipv6_mask} -| | IPv6 neighbor from Honeycomb should be -| | ... | ${node} | ${interface} | ${ipv6_neighbor} | ${neighbor_mac} - -| Bridge Domain Persistence Setup -| | [Documentation] | Configure bridge domain, BD interface assignment -| | ... | and L2 fib entry. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Bridge Domain Persistence Setup \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Honeycomb and VPP should have default configuration | ${node} -| | Import Variables | resources/test_data/honeycomb/l2_fib.py -| | ... | ${node} | ${interface} | ${interface} -| | Honeycomb creates first l2 bridge domain -| | ... | ${node} | ${bd_name} | ${bd_settings} -| | Honeycomb adds interface to bridge domain -| | ... | ${node} | ${interface} | ${bd_name} | ${if_bd_settings} -| | Honeycomb adds L2 FIB entry to bridge domain -| | ... | ${node} | ${bd_name} | ${l2_fib_forward_cfg} - -| Bridge Domain Persistence Check -| | [Documentation] | Verify bridge domain, BD interface assignment -| | ... | and L2 fib entry. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Bridge Domain Persistence Check \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | Bridge domain Operational Data From Honeycomb Should Be -| | ... | ${node} | ${bd_name} | ${bd_settings} -| | Bridge domain Operational Data From VAT Should Be -| | ... | ${node} | ${0} | ${bd_settings} -| | Bridge domain Operational Interface Assignment should be -| | ... | ${node} | ${interface} | ${if_bd_settings} -| | L2 FIB Entry from Honeycomb should be -| | ... | ${node} | ${bd_name} | ${l2_fib_forward_oper} -| | L2 FIB entry from PAPI should be -| | ... | ${node} | ${bd_index} | ${l2_fib_forward_vat}
\ No newline at end of file diff --git a/resources/libraries/robot/honeycomb/policer.robot b/resources/libraries/robot/honeycomb/policer.robot deleted file mode 100644 index 87b97470ac..0000000000 --- a/resources/libraries/robot/honeycomb/policer.robot +++ /dev/null @@ -1,162 +0,0 @@ -# Copyright (c) 2017 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/shared/traffic.robot -| Library | resources.libraries.python.honeycomb.Routing.RoutingKeywords -| Variables | resources/test_data/honeycomb/policer_variables.py -| Documentation | Keywords used to test Policer using Honeycomb. - -*** Keywords *** -| Honeycomb Configures Policer -| | [Documentation] | Uses Honeycomb API to configure Policer on the specified\ -| | ... | interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - policer_data - data needed to configure Policer. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb Configures Policer \| ${node} \ -| | ... | \| ${policer_data} \| -| | ... -| | [Arguments] | ${node} | ${policer_data} -| | Configure Policer -| | ... | ${node} | ${policer_data['name']} | ${policer_data} - -| Policer Operational Data From Honeycomb Should Be -| | [Documentation] | Retrieves Policer operational data and verifies if\ -| | ... | Policer is configured correctly. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - policer_data - data to compare configuration Policer with.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Policer Operational Data From Honeycomb Should Be \ -| | ... | \| ${node} \| ${policer_data} \| -| | ... -| | [Arguments] | ${node} | ${policer_data} -| | ${data}= | Get Policer oper data | ${node} | ${policer_data['name']} -| | Compare data structures | ${data[0]} | ${policer_data} - -| Policer Operational Data From Honeycomb Should Be empty -| | [Documentation] | Checks whether Policer configuration from Honeycomb \ -| | ... | is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Policer Operational Data From Honeycomb Should Be empty \ -| | ... | \| ${node} \| -| | ... -| | [Arguments] | ${node} -| | Run keyword and expect error | HoneycombError*404* -| | ... | Get Policer oper data | ${node} | ${policer_data['name']} - -| Honeycomb removes Policer configuration -| | [Documentation] | Uses Honeycomb API to remove Policer configuration\ -| | ... | from the specified interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes Policer configuration \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} -| | Configure Policer | ${node} | ${policer_data['name']} - -| Tear down policer test -| | [Documentation] | Uses Honeycomb API to remove Policer configuration\ -| | ... | and reset interface state. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes Policer configuration \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} -| | Honeycomb removes Policer configuration | ${node} - -| Honeycomb enables Policer on interface -| | [Documentation] | Uses Honeycomb API to enable Policer on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - table_name - name of an ACL table. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb enables ACL on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabithEthernet0/8/0 \| table0 \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${table_name} -| | Enable Policer on interface -| | ... | ${node} | ${interface} | ${table_name} - -| Honeycomb disables Policer on interface -| | [Documentation] | Uses Honeycomb API to disable Policer on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb disables Policer on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabithEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | Disable Policer on interface -| | ... | ${node} | ${interface} - -| Honeycomb Send packet and verify marking -| | [Documentation] | Send packet and verify DSCP of the received packet. -| | ... -| | ... | *Arguments:* -| | ... | - node - TG node. Type: dictionary -| | ... | - tx_if - TG transmit interface. Type: string -| | ... | - rx_if - TG receive interface. Type: string -| | ... | - src_mac - Packet source MAC. Type: string -| | ... | - dst_mac - Packet destination MAC. Type: string -| | ... | - src_ip - Packet source IP address. Type: string -| | ... | - dst_ip - Packet destination IP address. Type: string -| | ... | - dscp_num - DSCP value to verify. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| ${dscp}= \| DSCP AF22 \| -| | ... | \| Send packet and verify marking \| ${nodes['TG']} \| eth1 \| eth2 \ -| | ... | \| 08:00:27:87:4d:f7 \| 52:54:00:d4:d8:22 \| 192.168.122.2 \ -| | ... | \| 192.168.122.1 \| ${dscp} \| -| | ... -| | [Arguments] | ${node} | ${tx_if} | ${rx_if} | ${src_mac} | ${dst_mac} -| | ... | ${src_ip} | ${dst_ip} | ${dscp_num} -| | ${tx_if_name}= | Get Interface Name | ${node} | ${tx_if} -| | ${rx_if_name}= | Get Interface Name | ${node} | ${rx_if} -| | ${args}= | Traffic Script Gen Arg | ${rx_if_name} | ${tx_if_name} -| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip} -| | ${args}= | Set Variable | ${args} --dscp ${dscp_num} -| | Run Traffic Script On Node | policer.py | ${node} | ${args} diff --git a/resources/libraries/robot/honeycomb/port_mirroring.robot b/resources/libraries/robot/honeycomb/port_mirroring.robot deleted file mode 100644 index 5ae0c46ae1..0000000000 --- a/resources/libraries/robot/honeycomb/port_mirroring.robot +++ /dev/null @@ -1,254 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Library | resources.libraries.python.telemetry.SPAN -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.IPUtil -| Library | resources.libraries.python.Trace - -*** Keywords *** -| Honeycomb configures SPAN on interface -| | [Documentation] | Uses Honeycomb API to configure SPAN on the specified\ -| | ... | interface, mirroring one or more interfaces. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination interface. Type: string -| | ... | - src_interfaces - Mirroring source interfaces. Type: list \ -| | ... | of dictionaries -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures SPAN on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| [{'iface-ref': 'GigabitEthernet0/10/0', \ -| | ... | \| 'state': 'transmit'}, \ -| | ... | \| {'iface-ref': 'local0', 'state': 'both'}] \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} | @{src_interfaces} -| | Configure interface SPAN -| | ... | ${node} | ${dst_interface} | ${src_interfaces} - -| Interface SPAN Operational Data From Honeycomb Should Be -| | [Documentation] | Retrieves interface operational data and verifies that\ -| | ... | SPAN mirroring is configured with the provided interfaces. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination interface. Type: string -| | ... | - src_interfaces - Mirroring source interfaces. Type: Argument list -\ -| | ... | any number of strings -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface SPAN Operational Data From Honeycomb Should Be \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} | @{src_interfaces} -| | ${data}= | Get interface oper data | ${node} | ${dst_interface} -| | ${data}= | Set Variable -| | ... | ${data['v3po:span']['mirrored-interfaces']['mirrored-interface']} -| | Sort list | ${data} -| | Sort list | ${src_interfaces} -| | Lists should be equal | ${data} | ${src_interfaces} - -| Interface SPAN Operational Data From Honeycomb Should Be empty -| | [Documentation] | Checks whether SPAN configuration from Honeycomb is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination interface. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface SPAN Operational Data From Honeycomb Should Be empty \ -| | ... | \| ${node} \| GigabitEthernetO/8/0 \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} -| | ${data}= | Get interface oper data | ${node} | ${dst_interface} -| | Variable should not exist -| | ... | ${data['v3po:span']['mirrored-interfaces']['mirrored-interface']} - -| Interface SPAN Operational Data From VAT Should Be -| | [Documentation] | Retrieves SPAN configuration from VAT dump and verifies\ -| | ... | that SPAN mirroring is configured with the provided interfaces. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination interface. Type: string -| | ... | - src_interfaces - Mirroring source interfaces. Type: Argument list -\ -| | ... | any number of strings -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface SPAN Operational Data From VAT Should Be \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} | @{src_interfaces} -| | ${data}= | VPP get SPAN configuration by interface -| | ... | ${node} | ${dst_interface} | name -| | Sort list | ${data} -| | Sort list | ${src_interfaces} -| | Lists should be equal | ${data} | ${src_interfaces} - -| Honeycomb removes interface SPAN configuration -| | [Documentation] | Uses Honeycomb API to remove SPAN configuration\ -| | ... | from the specified interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination interface. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes interface SPAN configuration \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} -| | Configure interface SPAN | ${node} | ${dst_interface} - -| Interface SPAN Operational Data from Honeycomb should not exist -| | [Documentation] | Retrieves interface operational data and verifies that\ -| | ... | SPAN mirroring is not configured. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination interface. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| -| | [Arguments] | ${node} | ${dst_interface} -| | ${data}= | Get interface oper data | ${node} | ${dst_interface} -| | Run keyword and expect error | *KeyError* | Set Variable -| | ... | ${data['span']['mirrored-interfaces']['mirrored-interface']} - -| SPAN Operational Data from VAT should not exist -| | [Documentation] | Attmepts to retrieve SPAN Operational Data from VAT dump,\ -| | ... | and expects to fail with no data retrieved. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| SPAN Operational Data from VAT should not exist \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Run keyword and expect error | ValueError: No JSON object could be decoded -| | ... | VPP get SPAN configuration by interface | ${node} | local0 - -| Honeycomb Configures SPAN on sub-interface -| | [Documentation] | Uses Honeycomb API to configure SPAN on the specified\ -| | ... | sub-interface, mirroring one or more interfaces. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination super-interface. Type: string -| | ... | - index - Index of mirroring destination sub-interface. Type: integer -| | ... | - src_interfaces - Mirroring source interfaces. Type: list \ -| | ... | of dictionaries -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb Configures SPAN on sub-interface \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| ${1} \ -| | ... | \|[{'iface-ref': 'GigabitEthernet0/10/0', 'state': 'transmit'}, \ -| | ... | \| {'iface-ref': 'local0', 'state': 'both'}] \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} | ${index} | @{src_interfaces} -| | Configure sub interface SPAN -| | ... | ${node} | ${dst_interface} | ${index} | ${src_interfaces} - -| Sub-Interface SPAN Operational Data from Honeycomb should be -| | [Documentation] | Retrieves sub-interface operational data and verifies\ -| | ... | that SPAN mirroring is configured with the provided interfaces. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination super-interface. Type: string -| | ... | - index - Index of mirroring destination sub-interface. Type: integer -| | ... | - src_interfaces - Mirroring source interfaces. Type: Argument list -\ -| | ... | any number of strings -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Sub-Interface SPAN Operational Data from Honeycomb should be \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \ -| | ... | \| GigabitEthernet0/9/0 \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} | ${index} | @{src_interfaces} -| | ${data}= | Get sub interface oper data -| | ... | ${node} | ${dst_interface} | ${index} -| | ${data}= | Set Variable -| | ... | ${data['subinterface-span:span']['mirrored-interfaces']['mirrored-interface']} -| | Sort list | ${data} -| | Sort list | ${src_interfaces} -| | Lists should be equal | ${data} | ${src_interfaces} - -| Sub-Interface SPAN Operational Data from Honeycomb should be empty -| | [Documentation] | Checks whether SPAN Operational Data from Honeycomb is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination super-interface. Type: string -| | ... | - index - Index of mirroring destination sub-interface. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Interface SPAN Operational Data from Honeycomb should be empty \ -| | ... | \| ${node} \| GigabitEthernetO/8/0 \| ${1} \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} | ${index} -| | ${data}= | Get sub interface oper data -| | ... | ${node} | ${dst_interface} | ${index} -| | Variable should not exist -| | ... | ${data['subinterface-span:span']['mirrored-interfaces']['mirrored-interface']} - -| Honeycomb removes sub-interface SPAN configuration -| | [Documentation] | Uses Honeycomb API to remove SPAN Operational Data\ -| | ... | from the specified sub-interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination super-interface. Type: string -| | ... | - index - Index of mirroring destination sub-interface. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes sub-interface SPAN configuration \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| -| | ... -| | [Arguments] | ${node} | ${dst_interface} | ${index} -| | Configure sub interface SPAN -| | ... | ${node} | ${dst_interface} | ${index} - -| Sub-Interface SPAN Operational Data from Honeycomb should not exist -| | [Documentation] | Retrieves sub-interface operational data and verifies -| | ... | that SPAN mirroring is not configured. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - dst_interface - Mirroring destination super-interface. Type: string -| | ... | - index - Index of mirroring destination sub-interface. Type: integer -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Sub-Interface SPAN Operational Data from Honeycomb should not exist \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| -| | .... -| | [Arguments] | ${node} | ${dst_interface} | ${index} -| | ${data}= | Get sub interface oper data -| | ... | ${node} | ${dst_interface} | ${index} -| | Run keyword and expect error | *KeyError* | Set Variable -| | ... | ${data['subinterface-span:span']['mirrored-interfaces']['mirrored-interface']}
\ No newline at end of file diff --git a/resources/libraries/robot/honeycomb/provider_backbone_bridge.robot b/resources/libraries/robot/honeycomb/provider_backbone_bridge.robot deleted file mode 100644 index 130e184d9c..0000000000 --- a/resources/libraries/robot/honeycomb/provider_backbone_bridge.robot +++ /dev/null @@ -1,76 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords - -*** Keywords *** -| Honeycomb creates PBB sub-interface -| | [Documentation] | Uses Honeycomb API to set PBB sub-interface on an\ -| | ... | interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - sub_if_id - Sub-interface ID. Type: string -| | ... | - params - Parameters of the sub-interface to be created. -| | ... | Type - dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb creates PBB sub-interface \| ${node} \| ${super_if}\ -| | ... | \| ${cfg_pbb_sub_if_1} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${params} -| | ... -| | Set Interface Up | ${node} | ${super_if} -| | Create PBB Sub Interface -| | ... | ${node} | ${super_if} | ${params} - -| Honeycomb removes PBB sub-interface -| | [Documentation] | Uses Honeycomb API to remove PBB sub-interface from its\ -| | ... | super interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - sub_if_id - Sub-interface ID. Type: string -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb removes PBB sub-interface\ -| | ... | \| ${node} \| ${super_if} \| -| | ... -| | [Arguments] | ${node} | ${super_if} -| | ... -| | Delete PBB Sub Interface | ${node} | ${super_if} - -| Honeycomb fails to create PBB sub-interface -| | [Documentation] | Uses Honeycomb API to set PBB sub-interface with wrong\ -| | ... | parameter(s) and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - sub_if_id - Sub-interface ID. Type: string -| | ... | - params - Parameters of the sub-interface to be created. -| | ... | Type - dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails to create PBB sub-interface\ -| | ... | \| ${node} \| ${super_if} \| ${cfg_pbb_sub_if_no_vlan_tag} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${params} -| | ... -| | Set Interface Up | ${node} | ${super_if} -| | Run keyword and expect error | *HoneycombError*not successful*. -| | ... | Create PBB Sub Interface -| | ... | ${node} | ${super_if} | ${params} diff --git a/resources/libraries/robot/honeycomb/proxyarp.robot b/resources/libraries/robot/honeycomb/proxyarp.robot deleted file mode 100644 index 2df1d3c13a..0000000000 --- a/resources/libraries/robot/honeycomb/proxyarp.robot +++ /dev/null @@ -1,193 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.ProxyARP.ProxyARPKeywords -| Library | resources.libraries.python.honeycomb.ProxyARP.IPv6NDProxyKeywords -| Documentation | Keywords used to test Honeycomb ARP proxy and IPv6ND proxy. - -*** Keywords *** -| Honeycomb configures proxyARP -| | [Documentation] | Uses Honeycomb API to configure proxyARP for a specific\ -| | ... | destination IP range. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - data - Configuration to use. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures proxyARP \| ${nodes['DUT1']} \| ${data} \| -| | [Arguments] | ${node} | ${data} -| | Configure proxyARP | ${node} | ${data} - -| Honeycomb removes proxyARP configuration -| | [Documentation] | Uses Honeycomb API to remove existing proxyARP\ -| | ... | IP range configuration. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes proxyARP configuration \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Remove proxyARP configuration | ${node} - -| Honeycomb enables proxyARP on interface -| | [Documentation] | Uses Honeycomb API to enable the proxyARP\ -| | ... | feature on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb enables proxyARP on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | Set proxyARP interface config | ${node} | ${interface} | enable - -| Honeycomb disables proxyARP on interface -| | [Documentation] | Uses Honeycomb API to disable the proxyARP\ -| | ... | feature on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb disables proxyARP on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | Set proxyARP interface config | ${node} | ${interface} | disable - -| Honeycomb configures IPv6 ND proxy on interface -| | [Documentation] | Uses Honeycomb API to enable the IPv6 ND proxy\ -| | ... | feature on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... | - addresses - one or more addresses to configure ND proxy with.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures IPv6 ND proxy on interface \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 10::10 \| 10::11 \| -| | ... -| | [Arguments] | ${node} | ${interface} | @{addresses} -| | Configure IPv6ND | ${node} | ${interface} | ${addresses} - -| Honeycomb disables IPv6 ND proxy on interface -| | [Documentation] | Uses Honeycomb API to disable the IPv6 ND proxy\ -| | ... | feature on an interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb disables IPv6 ND proxy on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | [Arguments] | ${node} | ${interface} -| | Configure IPv6ND | ${node} | ${interface} - -| IPv6 ND proxy from Honeycomb should be -| | [Documentation] | Retrieves IPv6 ND proxy operational data and compares\ -| | ... | with expected values. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... | - addresses - one or more addresses to expect. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| IPv6 ND proxy from Honeycomb should be \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 10::11 \| -| | ... -| | [Arguments] | ${node} | ${interface} | @{addresses} -| | ${oper_data}= | Get interface oper data | ${node} | ${interface} -| | ${oper_data}= | Set Variable -| | ... | ${oper_data['ietf-ip:ipv6']['nd-proxy:nd-proxies']['nd-proxy']} -| | ${data}= | Evaluate | [{"address":x} for x in $addresses] -| | Sort List | ${oper_data} -| | Sort List | ${data} -| | Should be equal | ${oper_data} | ${data} - -| IPv6 ND proxy from Honeycomb should be empty -| | [Documentation] | Retrieves IPv6 ND proxy operational data and expects\ -| | ... | to fail due to no data present. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \|IPv6 ND proxy from Honeycomb should be empty \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ${oper_data}= | Get interface oper data | ${node} | ${interface} -| | Variable Should Not Exist -| | ... | ${oper_data['ietf-ip:ipv6']['nd-proxy:nd-proxies']['nd-proxy']} - -| Verify IPv6ND proxy -| | [Documentation] | Send and receive ICMPv6 messages between TG interfaces -| | ... | through Neighbor Discovery proxy. -| | ... -| | ... | *Arguments:* -| | ... | - tg_node - TG node. Type: dictionary -| | ... | - tg_interface1 - TG interface. Type: string -| | ... | - tg_interface2 - TG interface. Type: string -| | ... | - src_ip - Source IPv6 address to use. Type: string -| | ... | - dst_ip - Destination IPv6 address to use. Type: string -| | ... | - src_mac - MAC address of source interface. Type: string -| | ... | - dst_mac - MAC address of destination interface. Type: string -| | ... | - proxy_to_src_mac - MAC address of DUT interface on link to source\ -| | ... | TG interface. Type: string -| | ... | - proxy_to_dst_mac - MAC address of DUT interface on link to dest\ -| | ... | TG interface. Type: string -| | ... -| | ... | *Return:* -| | ... | - No value returned. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Verify IPv6ND proxy \| ${nodes['TG']} \ -| | ... | \| eth3 \| eth4 \| 3ffe:62::1 \| 3ffe:63::2 \ -| | ... | \| 08:00:27:cc:4f:54 \| 08:00:27:64:18:d2 \ -| | ... | \| 08:00:27:c9:6a:d5 \| 08:00:27:c4:75:3a \| -| | ... -| | [Arguments] | ${tg_node} | ${tg_interface1} | ${tg_interface2} -| | ... | ${src_ip} | ${dst_ip} | ${src_mac} | ${dst_mac} -| | ... | ${proxy_to_src_mac} | ${proxy_to_dst_mac} -| | ${tg_interface_name1}= | Get interface name | ${tg_node} | ${tg_interface1} -| | ${tg_interface_name2}= | Get interface name | ${tg_node} | ${tg_interface2} -| | ${args}= | Catenate | --tx_if | ${tg_interface_name1} -| | ... | --rx_if | ${tg_interface_name2} -| | ... | --src_ip | ${src_ip} -| | ... | --dst_ip | ${dst_ip} -| | ... | --src_mac | ${src_mac} -| | ... | --dst_mac | ${dst_mac} -| | ... | --proxy_to_src_mac | ${proxy_to_src_mac} -| | ... | --proxy_to_dst_mac | ${proxy_to_dst_mac} -| | Run Traffic Script On Node | ipv6_nd_proxy_check.py -| | ... | ${tg_node} | ${args} diff --git a/resources/libraries/robot/honeycomb/routing.robot b/resources/libraries/robot/honeycomb/routing.robot deleted file mode 100644 index 752b4fe29e..0000000000 --- a/resources/libraries/robot/honeycomb/routing.robot +++ /dev/null @@ -1,203 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.Routing.RoutingKeywords -| Documentation | Keywords used to test Honeycomb routing. - -*** Keywords *** -| Honeycomb configures routing table -| | [Documentation] | Uses Honeycomb API to configure a routing table. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - name - name for the new routing table. Type: string -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type:string -| | ... | - data - Settings for the new routing table. Type: dictionary -| | ... | - vrf - vrf-id the new table will belong to. Type: integer -| | ... | - special - Does the table contain special rules. Type: boolean -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures routing table \| ${nodes['DUT1']} \ -| | ... | \| table1 \| ipv4 \| ${data} \| ${1} \| ${TRUE} \| -| | [Arguments] | ${node} | ${name} | ${ip_version} | ${data} | ${vrf}=${1} -| | ... | ${special}=${EMPTY} -| | Configure routing table | ${node} | ${name} | ${ip_version} | ${data} -| | ... | ${vrf} | ${special} - -| Routing data from Honeycomb should contain -| | [Documentation] | Uses Honeycomb API to retrieve operational data about\ -| | ... | a routing table, and compares with the data provided. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - name - name of the routing table. Type: string -| | ... | - ip_version - IP protocol version, ipv4 or ipv6. Type:string -| | ... | - expected_data - Data to compare against. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Routing data from Honeycomb should contain \| ${nodes['DUT1']} \ -| | ... | \| table1 \| ipv4 \| ${data} \| -| | [Arguments] | ${node} | ${name} | ${ip_version} | ${expected_data} -| | ${data}= | Get Routing Table Oper | ${node} | ${name} | ${ip_version} -| | Should Contain | ${data} | ${expected_data} - -| Log routing configuration from VAT -| | [Documentation] | Uses test API to read routing configuration from VPP\ -| | ... | and prints received response into robot log. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Log routing configuration from VAT \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Log routing configuration | ${node} - -| Honeycomb removes routing configuration -| | [Documentation] | Uses Honeycomb API to remove Honeycomb-created\ -| | ... | routing configuration from the node. Entries configured automatically\ -| | ... | by VPP will not be removed. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - name - name of the routing table to remove. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes routing configuration \| ${nodes['DUT1']} \ -| | ... | \| table1 \| -| | [Arguments] | ${node} | ${name} -| | Delete routing table | ${node} | ${name} - -| Verify route IPv4 -| | [Documentation] | Send an ICMP packet from one TG interface and receive\ -| | ... | it on the other TG interface. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | _NOTE:_ Arguments are based on topology: -| | ... | TG(if1)->(if1)DUT(if2)->TG(if2) -| | ... -| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary -| | ... | - src_ip - IP of source interface (TG-if1). Type: integer -| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer -| | ... | - tx_port - Source interface (TG-if1). Type: string -| | ... | - tx_mac - MAC address of source interface (TG-if1). Type: string -| | ... | - rx_port - Destionation interface (TG-if2). Type: string -| | ... | - rx_mac - MAC address of DUT interface (DUT-if1). Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Verify route IPv4 \| ${nodes['TG']} \ -| | ... | \| 16.0.0.1 \| 32.0.0.1 \| eth1 \| 08:00:27:cc:4f:54 \ -| | ... | \| eth2 \| 08:00:27:c9:6a:d5 \| -| | ... -| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} -| | ... | ${tx_mac} | ${rx_port} | ${rx_mac} -| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port} -| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port} -| | ${args}= | Catenate | --src_mac | ${tx_mac} -| | ... | --dst_mac | ${rx_mac} -| | ... | --src_ip | ${src_ip} -| | ... | --dst_ip | ${dst_ip} -| | ... | --tx_if | ${tx_port_name} -| | ... | --rx_if | ${rx_port_name} -| | Run Traffic Script On Node | send_ip_icmp.py | ${tg_node} | ${args} - -| Verify route IPv6 -| | [Documentation] | Send an ICMPv6 packet from one TG interface and receive\ -| | ... | it on the other TG interface. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | _NOTE:_ Arguments are based on topology: -| | ... | TG(if1)->(if1)DUT(if2)->TG(if2) -| | ... -| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary -| | ... | - src_ip - IP of source interface (TG-if1). Type: integer -| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer -| | ... | - tx_port - Source interface (TG-if1). Type: string -| | ... | - tx_mac - MAC address of source interface (TG-if1). Type: string -| | ... | - rx_port - Destionation interface (TG-if2). Type: string -| | ... | - rx_mac - MAC address of DUT interface (DUT-if1). Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Verify route IPv6 \| ${nodes['TG']} \ -| | ... | \| 10::1 \| 11::1 \| eth2 \| 08:00:27:cc:4f:54 \ -| | ... | \| eth4 \| 08:00:27:c9:6a:d5 \| -| | ... -| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} -| | ... | ${tx_mac} | ${rx_port} | ${rx_mac} -| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port} -| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port} -| | ${args}= | Catenate | --src_mac | ${tx_mac} -| | ... | --dst_mac | ${rx_mac} -| | ... | --src_ip | ${src_ip} -| | ... | --dst_ip | ${dst_ip} -| | ... | --tx_if | ${tx_port_name} -| | ... | --rx_if | ${rx_port_name} -| | Run Traffic Script On Node | send_ip_icmp.py | ${tg_node} | ${args} - -| Verify multipath route -| | [Documentation] | Send 100 ICMP or ICMPv6 packets from one TG interface\ -| | ... | and receive them on the other TG interface. Verify destination MAC\ -| | ... | addresses of the packets so that exactly 50 of them use the first\ -| | ... | address and the other 50 use the second address. -| | ... -| | ... | *Arguments:* -| | ... -| | ... | _NOTE:_ Arguments are based on topology: -| | ... | TG(if1)->(if1)DUT(if2)->TG(if2) -| | ... -| | ... | - tg_node - Node to execute scripts on (TG). Type: dictionary -| | ... | - src_ip - IP of source interface (TG-if1). Type: integer -| | ... | - dst_ip - IP of destination interface (TG-if2). Type: integer -| | ... | - tx_port - Source interface (TG-if1). Type: string -| | ... | - tx_src_mac - MAC address of source interface (TG-if1). Type: string -| | ... | - rx_port - Destionation interface (TG-if2). Type: string -| | ... | - tx_dst_mac - MAC address of DUT ingress interface (DUT-if1).\ -| | ... | Type: string -| | ... | - rx_src_mac - MAC address of DUT egress interface (DUT-if2).\ -| | ... | Type: string -| | ... | - rx_dst_mac1 - MAC address of first next-hop option. Type: string -| | ... | - rx_dst_mac2 - MAC address of second next-hop option. Type: string -| | ... | -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Verify multipath route \| ${nodes['TG']} \ -| | ... | \| 16.0.0.1 \| 32.0.0.1 \| eth2 \| 08:00:27:cc:4f:54 \ -| | ... | \| eth4 \| 08:00:27:c9:6a:d5 \| -| | ... | \| 00:00:00:00:00:01 \| 00:00:00:00:00:02 \| -| | ... -| | [Arguments] | ${tg_node} | ${src_ip} | ${dst_ip} | ${tx_port} -| | ... | ${tx_src_mac} | ${rx_port} | ${tx_dst_mac} | ${rx_src_mac} -| | ... | ${rx_dst_mac1} | ${rx_dst_mac2} -| | ${tx_port_name}= | Get interface name | ${tg_node} | ${tx_port} -| | ${rx_port_name}= | Get interface name | ${tg_node} | ${rx_port} -| | ${args}= | Catenate | --tg_if1_mac | ${tx_src_mac} -| | ... | --dut_if1_mac | ${tx_dst_mac} -| | ... | --src_ip | ${src_ip} -| | ... | --dst_ip | ${dst_ip} -| | ... | --tx_if | ${tx_port_name} -| | ... | --rx_if | ${rx_port_name} -| | ... | --dut_if2_mac | ${rx_src_mac} -| | ... | --path_1_mac | ${rx_dst_mac_1} -| | ... | --path_2_mac | ${rx_dst_mac_2} -| | Run Traffic Script On Node | send_icmp_check_multipath.py | ${tg_node} -| | ... | ${args}
\ No newline at end of file diff --git a/resources/libraries/robot/honeycomb/slaac.robot b/resources/libraries/robot/honeycomb/slaac.robot deleted file mode 100644 index 036d4d06ce..0000000000 --- a/resources/libraries/robot/honeycomb/slaac.robot +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (c) 2017 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 *** -| Library | resources.libraries.python.honeycomb.Routing.RoutingKeywords -| Library | resources.libraries.python.Trace -| Documentation | Keywords used to test SLAAC using Honeycomb. - -*** Keywords *** -| Honeycomb configures SLAAC -| | [Documentation] | Uses Honeycomb API to configure SLAAC on the specified\ -| | ... | interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... | - slaac_data - data needed to configure SLAAC. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb configures SLAAC \| ${node} \| ${interface} \ -| | ... | \| ${slaac_data} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${slaac_data} -| | Configure interface SLAAC -| | ... | ${node} | ${interface} | ${slaac_data} - -| SLAAC Operational Data From Honeycomb Should Be -| | [Documentation] | Retrieves SLAAC operational data and verifies that\ -| | ... | SLAAC is configured with the provided interfaces. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... | - slaac_data - data to compare configuration SLAAC with.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| SLAAC Operational Data From Honeycomb Should Be \ -| | ... | \| ${node} \| ${interface} \| ${slaac_data} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${slaac_data} -| | ${data}= | Get interface SLAAC oper data | ${node} | ${interface} -| | Dictionaries should be equal | ${data} | ${slaac_data} - -| SLAAC Operational Data From Honeycomb Should Be empty -| | [Documentation] | Checks whether SLAAC configuration from Honeycomb \ -| | ... | is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| SLAAC Operational Data From Honeycomb Should Be empty \ -| | ... | \| ${node} \| ${interface} \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | Run keyword and expect error | HoneycombError*40* -| | ... | Get interface SLAAC oper data | ${node} | ${interface} - -| Honeycomb removes SLAAC configuration -| | [Documentation] | Uses Honeycomb API to remove SLAAC confirugation\ -| | ... | from the specified interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes SLAAC configuration \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | Configure interface SLAAC | ${node} | ${interface} - -| SLAAC test teardown -| | [Documentation] | Uses Honeycomb API to remove SLAAC confirugation\ -| | ... | and reset interface state. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes SLAAC configuration \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | Honeycomb removes SLAAC configuration | ${node} | ${interface} -| | And Honeycomb configures interface state | ${node} | ${interface} | down -| | Honeycomb removes interface IPv6 addresses | ${node} | ${interface} diff --git a/resources/libraries/robot/honeycomb/sub_interface.robot b/resources/libraries/robot/honeycomb/sub_interface.robot deleted file mode 100644 index 8bb95f51b8..0000000000 --- a/resources/libraries/robot/honeycomb/sub_interface.robot +++ /dev/null @@ -1,670 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.IPUtil -| Library | resources.libraries.python.L2Util -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Resource | resources/libraries/robot/honeycomb/bridge_domain.robot -| Documentation | Keywords used to manipulate sub-interfaces. - -*** Keywords *** -| Honeycomb creates sub-interface -| | [Documentation] | Create a sub-interface using Honeycomb API. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_interface - Super-interface where a sub-interface will be\ -| | ... | created. Type: string -| | ... | - match - Match type. Type: string -| | ... | - tags - List of tags to be set while creating the sub-interface.\ -| | ... | Type: list -| | ... | - sub_interface_settings - Sub-inteface parameters to be set while\ -| | ... | creating the sub-interface. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb creates sub-interface\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0\ -| | ... | \| vlan-tagged-exact-match \| ${sub_if_1_tags}\ -| | ... | \| ${sub_if_1_settings} \| -| | ... -| | [Arguments] | ${node} | ${super_interface} -| | ... | ${match} | ${tags} | ${sub_interface_settings} -| | ... -| | Honeycomb Create sub interface | ${node} | ${super_interface} -| | ... | ${match} | ${tags} | &{sub_interface_settings} - -| Sub-interface Operational Data From Honeycomb Should Be -| | [Documentation] | Retrieves sub-interface configuration through Honeycomb\ -| | ... | and compares it with settings supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_interface - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - sub_if_settings - Operational data for sub-interface to be checked.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Sub-interface Operational Data From Honeycomb Should Be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1\ -| | ... | \| ${sub_if_1_params} \| -| | ... -| | [Arguments] | ${node} | ${super_interface} | ${identifier} -| | ... | ${sub_if_settings} -| | ... -| | ${api_data}= | Get sub interface oper data -| | ... | ${node} | ${super_interface} | ${identifier} -| | Compare Data Structures | ${api_data} | ${sub_if_settings} - -| Sub-interface Operational Data From Honeycomb Should Be empty -| | [Documentation] | Retrieves sub-interface configuration through Honeycomb \ -| | ... | and expects no data. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_interface - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | \| Sub-interface Operational Data From Honeycomb Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| -| | ... -| | [Arguments] | ${node} | ${super_interface} | ${identifier} -| | ... -| | Run keyword and expect error | *KeyError: 'vpp-vlan:sub-interfaces'* -| | ... | Get sub interface oper data -| | ... | ${node} | ${super_interface} | ${identifier} - -| Sub-interface state from Honeycomb should be -| | [Documentation] | Retrieves sub-interface configuration through Honeycomb \ -| | ... | and checks the administrative and operational state. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_interface - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - admin_state - Required administrative state - up or down. \ -| | ... | Type: string -| | ... | - oper_state - Required operational state - up or down. Type: string -| | ... -| | ... | *Example:* -| | ... | \| Sub-interface state from Honeycomb should be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| up \| up \| -| | ... -| | [Arguments] | ${node} | ${super_interface} | ${identifier} -| | ... | ${admin_state} | ${oper_state} -| | ... -| | ${api_data}= | Get sub interface oper data -| | ... | ${node} | ${super_interface} | ${identifier} -| | Should be equal | ${api_data['admin-status']} | ${admin_state} -| | Should be equal | ${api_data['oper-status']} | ${oper_state} - -| Sub-interface Operational Data From VAT Should Be -| | [Documentation] | Retrieves sub-interface configuration through VAT and\ -| | ... | compares it with settings supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - sub_interface - Name of an sub-interface on the specified node.\ -| | ... | Type: string -| | ... | - sub_interface_settings - Operational data specific for a\ -| | ... | sub-interface to be checked. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Sub-interface Operational Data From VAT Should Be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| ${sub_if_1_params} \| -| | ... -| | [Arguments] | ${node} | ${sub_interface} | ${sub_interface_settings} -| | ... -| | ${vat_data}= | VPP get interface data -| | ... | ${node} | ${sub_interface} -| | Should be equal as strings | ${vat_data['sub_id']} -| | ... | ${sub_interface_settings['identifier']} -| | Should be equal as strings -| | ... | ${vat_data['interface_name']} | ${sub_interface} -| | Run keyword if | ${vat_data['link_up_down']} == 0 -| | ... | Should be equal as strings -| | ... | ${sub_interface_settings['oper-status']} | down -| | Run keyword if | ${vat_data['link_up_down']} == 1 -| | ... | Should be equal as strings -| | ... | ${sub_interface_settings['oper-status']} | up - -| Sub-interface state from VAT should be -| | [Documentation] | Retrieves sub-interface configuration through VAT and \ -| | ... | checks the administrative and operational state. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - sub_interface - Name of an sub-interface on the specified node. \ -| | ... | Type: string -| | ... | - admin_state - Required administrative state - up or down. \ -| | ... | Type: string -| | ... | - oper_state - Required operational state - up or down. Type: string -| | ... -| | ... | *Example:* -| | ... | \| Sub-interface state from VAT should be \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| up \| up \| -| | ... -| | [Arguments] | ${node} | ${sub_interface} | ${admin_state} | ${oper_state} -| | ... -| | ${vat_data}= | VPP get interface data -| | ... | ${node} | ${sub_interface} -| | Run keyword if | '${admin_state}' == 'down' -| | ... | Should be equal as strings | ${vat_data['admin_up_down']} | 0 -| | Run keyword if | '${admin_state}' == 'up' -| | ... | Should be equal as strings | ${vat_data['admin_up_down']} | 1 -| | Run keyword if | '${oper_state}' == 'down' -| | ... | Should be equal as strings | ${vat_data['link_up_down']} | 0 -| | Run keyword if | '${oper_state}' == 'up' -| | ... | Should be equal as strings | ${vat_data['link_up_down']} | 1 - -| Sub-interface indices from Honeycomb and VAT should correspond -| | [Documentation] | Uses VAT and Honeycomb to get operational data about the\ -| | ... | given sub-interface and compares the interface indexes. The -| | ... | sub-interface index from Honeycomb should be greater than index from -| | ... | VAT by one. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_interface - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Sub-interface indices from Honeycomb and VAT should correspond \ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| -| | ... -| | [Arguments] | ${node} | ${super_interface} | ${identifier} -| | ... -| | ${api_data}= | Get sub interface oper data -| | ... | ${node} | ${super_interface} | ${identifier} -| | ${vat_data}= | VPP get interface data -| | ... | ${node} | ${super_interface}.${identifier} -| | ${sw_if_index}= | EVALUATE | ${vat_data['sw_if_index']} + 1 -| | Should be equal as strings -| | ... | ${api_data['if-index']} | ${sw_if_index} - -| Honeycomb sets the sub-interface up -| | [Documentation] | Honeycomb sets the sub-interface up. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_interface - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | Honeycomb sets the sub-interface up\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| -| | ... -| | [Arguments] | ${node} | ${super_interface} | ${identifier} -| | ... -| | Set sub interface state -| | ... | ${node} | ${super_interface} | ${identifier} | up - -| Honeycomb sets the sub-interface down -| | [Documentation] | Honeycomb sets the sub-interface down. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_interface - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | Honeycomb sets the sub-interface down\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| -| | ... -| | [Arguments] | ${node} | ${super_interface} | ${identifier} -| | ... -| | Set sub interface state -| | ... | ${node} | ${super_interface} | ${identifier} | down - -| Honeycomb fails to set sub-interface up -| | [Documentation] | Honeycomb tries to set sub-interface up and expects error. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_interface - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails to set sub-interface up\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| -| | ... -| | [Arguments] | ${node} | ${super_interface} | ${identifier} -| | ... -| | Run keyword and expect error | *HoneycombError: * was not successful. * 500. -| | ... | Set sub interface state -| | ... | ${node} | ${super_interface} | ${identifier} | up - -| Honeycomb adds sub-interface to bridge domain -| | [Documentation] | Honeycomb adds the given sub-interface to bridge domain. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - sub_bd_setings - Bridge domain parameters to be set while adding\ -| | ... | the sub-interface to the bridge domain. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb adds sub-interface to bridge domain\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| ${bd_settings} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${sub_bd_setings} -| | ... -| | Add bridge domain to sub interface -| | ... | ${node} | ${super_if} | ${identifier} | ${sub_bd_setings} - -| Sub-interface bridge domain Operational Data From Honeycomb Should Be -| | [Documentation] | Uses Honeycomb API to verify sub-interface assignment to\ -| | ... | a bridge domain. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - settings - Bridge domain parameters to be checked. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Sub-interface bridge domain Operational Data From Honeycomb Should Be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| ${bd_settings} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${settings} -| | ... -| | ${if_data}= | Get BD data from sub interface -| | ... | ${node} | ${super_if} | ${identifier} -| | Should be equal | ${if_data['bridge-domain']} -| | ... | ${settings['bridge-domain']} - -| Sub-interface bridge domain Operational Data From PAPI Should Be -| | [Documentation] | Uses VAT to verify sub-interface assignment to a bridge\ -| | ... | domain. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - interface - Name of a sub-interface on the specified node. Type:\ -| | ... | string -| | ... | - setings - Parameters to be checked. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Sub-interface bridge domain Operational Data From PAPI Should Be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| ${sub_bd_setings} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | ... -| | ${bd_data}= | VPP get bridge domain data | ${node} -| | ${bd_intf}= | Set Variable | ${bd_data[0]} -| | ${sw_if_data}= | Set Variable | ${bd_intf['sw_if_details'][0]} -| | Should be equal as integers | ${bd_intf['flood']} | ${bd_settings['flood']} -| | Should be equal as integers | ${bd_intf['forward']} -| | ... | ${bd_settings['forward']} -| | Should be equal as integers | ${bd_intf['learn']} | ${bd_settings['learn']} -# interface[1] = sw_if_index, interface[2] = shg -| | Should be equal as strings | ${sw_if_data[2]} -| | ... | ${settings['split-horizon-group']} - -| Honeycomb fails to remove all sub-interfaces -| | [Documentation] | Honeycomb tries to remove all sub-interfaces using\ -| | ... | Honeycomb API. This operation must fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails to remove all sub-interfaces\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| -| | ... -| | [Arguments] | ${node} | ${super_if} -| | ... -| | Run keyword and expect error | *HoneycombError:*not successful. * code: 500. -| | ... | Remove all sub interfaces -| | ... | ${node} | ${super_if} - -| Honeycomb configures tag rewrite -| | [Documentation] | Honeycomb configures tag-rewrite -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - settings - tag-rewrite parameters. Type: dictionary. -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb configures tag rewrite\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1\ -| | ... | \| ${tag_rewrite_push} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${settings} -| | ... -| | Configure tag rewrite -| | ... | ${node} | ${super_if} | ${identifier} | ${settings} - -| Rewrite tag from Honeycomb should be empty -| | [Documentation] | Checks if the tag-rewrite is empty or does not exist. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | \| Rewrite tag from Honeycomb should be empty\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1 \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} -| | ... -| | Run keyword and expect error | *Hon*Error*oper*does not contain*tag-rewrite* -| | ... | Get tag rewrite oper data -| | ... | ${node} | ${super_if} | ${identifier} - -| Rewrite tag from Honeycomb should be -| | [Documentation] | Checks if the operational data retrieved from Honeycomb\ -| | ... | are as expected. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - settings - tag-rewrite operational parameters to be checked.\ -| | ... | Type: dictionary. -| | ... -| | ... | *Example:* -| | ... | \| Rewrite tag from Honeycomb should be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1\ -| | ... | \| ${tag_rewrite_push_oper} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${settings} -| | ${api_data}= | Get tag rewrite oper data -| | ... | ${node} | ${super_if} | ${identifier} -| | Compare Data Structures -| | ... | ${api_data} | ${settings} - -| Rewrite tag from VAT should be -| | [Documentation] | Retrieves sub-interface configuration through VAT and\ -| | ... | compares values of rewrite tag parameters with settings supplied in\ -| | ... | argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of a sub-interface on the specified node.\ -| | ... | Type: string -| | ... | - rw_settings - Parameters to be set while setting the rewrite tag.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Rewrite tag from VAT should be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| ${rw_params} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${rw_settings} -| | ${vat_data}= | VPP get interface data | ${node} | ${interface} -| | Compare Data Structures | ${vat_data} | ${rw_settings} - -| Honeycomb fails to set wrong rewrite tag -| | [Documentation] | Honeycomb tries to set wrong rewrite tag and expects\ -| | ... | an error. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - settings - tag-rewrite parameters. Type: dictionary. -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails to set wrong rewrite tag\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 1\ -| | ... | \| ${tag_rewrite_push_WRONG} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${settings} -| | Run keyword and expect error | *HoneycombError: * was not successful. *00. -| | ... | Configure tag rewrite -| | ... | ${node} | ${super_if} | ${identifier} | ${settings} - -| Honeycomb sets sub-interface ipv4 address -| | [Documentation] | Uses Honeycomb API to configure an ipv4 address on the\ -| | ... | spcified sub-interface. Replaces any existing ipv4 addresses. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - address - IPv4 address to set. Type: string -| | ... | - prefix - IPv4 network prefix length to set. Type: integer -| | ... -| | ... | *Example:* -| | ... | \| | Honeycomb sets sub-interface ipv4 address\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \ -| | ... | \| 192.168.0.2 \| ${24} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${address} | ${prefix} -| | Add ip address to sub_interface -| | ... | ${node} | ${super_if} | ${identifier} | ${address} | ${prefix} | ipv4 - -| Sub-interface ipv4 address from Honeycomb should be -| | [Documentation] | Uses Honeycomb API to verify ipv4 address configuration\ -| | ... | on the specified sub-interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - address - IPv4 address to expect. Type: string -| | ... | - prefix - IPv4 network prefix length to expect. Type: integer -| | ... -| | ... | *Example:* -| | ... | \| sub-interface ipv4 address from Honeycomb should be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \ -| | ... | \| 192.168.0.2 \| ${24} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${address} | ${prefix} -| | ${if_data}= | Get sub interface oper data -| | ... | ${node} | ${super_if} | ${identifier} -| | Should be equal -| | ... | ${if_data['ipv4']['address'][0]['ip']} | ${address} -| | Should be equal -| | ... | ${if_data['ipv4']['address'][0]['prefix-length']} | ${prefix} - -| Sub-interface ipv4 address from VAT should be -| | [Documentation] | Uses VAT to verify ipv4 address configuration\ -| | ... | on the specified sub-interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - sub_interface - Name of an sub-interface on the specified node.\ -| | ... | Type: string -| | ... | - address - IPv4 address to expect. Type: string -| | ... | - prefix - IPv4 network prefix length to expect. Type: integer -| | ... -| | ... | *Example:* -| | ... | \| sub-interface ipv4 address from VAT should be\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| -| | ... -| | [Arguments] | ${node} | ${sub_interface} | ${address} | ${prefix} -| | ${data}= | VPP get interface ip addresses -| | ... | ${node} | ${sub_interface} | ipv4 -| | Should be equal | ${data[0]['ip']} | ${address} -| | Should be equal | ${data[0]['prefix_length']} | ${prefix} - -| Honeycomb removes all sub-interface ipv4 addresses -| | [Documentation] | Uses Honeycomb API to remove all configured ipv4\ -| | ... | addresses from the sub-interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb removes all sub-interface ipv4 addresses\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} -| | Remove all ip addresses from sub_interface -| | ... | ${node} | ${super_if} | ${identifier} | ipv4 - -| Sub-interface ipv4 address from Honeycomb should be empty -| | [Documentation] | Uses Honeycomb API to verify that ipv4 address\ -| | ... | configuration on the specified sub-interface is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | \| sub-interface ipv4 address from Honeycomb should be empty\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} -| | ${if_data}= | Get sub interface oper data -| | ... | ${node} | ${super_if} | ${identifier} -| | Run keyword and expect error | *KeyError: 'ipv4'* -| | ... | Set Variable | ${if_data['ipv4']['address'][0]['ip']} - -| Sub-interface ipv4 address from VAT should be empty -| | [Documentation] | Uses VAT to verify that ipv4 address\ -| | ... | configuration on the specified sub-interface is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - sub_interface - Name of an sub-interface on the specified node.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... | \| sub-interface ipv4 address from VAT should be empty\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| -| | ... -| | [Arguments] | ${node} | ${sub_interface} -| | ${data}= | VPP get interface ip addresses -| | ... | ${node} | ${sub_interface} | ipv4 -| | Should be empty | ${data} - -| Honeycomb sets sub-interface ipv6 address -| | [Documentation] | Uses Honeycomb API to configure an ipv6 address on the\ -| | ... | spcified sub-interface. Replaces any existing ipv6 addresses. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - address - IPv6 address to set. Type: string -| | ... | - prefix - IPv6 network prefix length to set. Type: integer -| | ... -| | ... | *Example:* -| | ... | \| | Honeycomb sets sub-interface ipv6 address\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \ -| | ... | \| 10::10 \| ${64} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${address} | ${prefix} -| | Add ip address to sub_interface -| | ... | ${node} | ${super_if} | ${identifier} | ${address} | ${prefix} | ipv6 - -| Sub-interface IPv6 address from Honeycomb should contain -| | [Documentation] | Uses Honeycomb API to verify ipv6 address configuration\ -| | ... | on the specified sub-interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... | - address - IPv6 address to expect. Type: string -| | ... | - prefix - IPv6 network prefix length to expect. Type: integer -| | ... -| | ... | *Example:* -| | ... | \| sub-interface IPv6 address from Honeycomb should contain\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \ -| | ... | \| 10::10 \| ${64} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} | ${address} | ${prefix} -| | ${if_data}= | Get sub interface oper data -| | ... | ${node} | ${super_if} | ${identifier} -| | ${settings}= | Create Dictionary -| | ... | ip=${address} | prefix-length=${prefix} -| | Should contain | ${if_data['ipv6']['address']} | ${settings} - -| Sub-interface IPv6 address from VAT should contain -| | [Documentation] | Uses VAT to verify ipv6 address configuration\ -| | ... | on the specified sub-interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - sub_interface - Name of an sub-interface on the specified node.\ -| | ... | Type: string -| | ... | - address - IPv6 address to expect. Type: string -| | ... | - prefix - IPv6 network prefix length to expect. Type: integer -| | ... -| | ... | *Example:* -| | ... | \| sub-interface IPv6 address from VAT should contain\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| -| | ... -| | [Arguments] | ${node} | ${sub_interface} | ${address} | ${prefix} -| | ${data}= | VPP get interface ip addresses -| | ... | ${node} | ${sub_interface} | ipv6 -| | Should be equal | ${data[0]['ip']} | ${address} -| | Should be equal | ${data[0]['prefix_length']} | ${prefix} - -| Honeycomb removes all sub-interface ipv6 addresses -| | [Documentation] | Uses Honeycomb API to remove all configured ipv6\ -| | ... | addresses from the sub-interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb removes all sub-interface ipv6 addresses\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} -| | Remove all ip addresses from sub_interface -| | ... | ${node} | ${super_if} | ${identifier} | ipv6 - -| Sub-interface ipv6 address from Honeycomb should be empty -| | [Documentation] | Uses Honeycomb API to verify that ipv6 address\ -| | ... | configuration on the specified sub-interface is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - super_if - Super-interface. Type: string -| | ... | - identifier - Sub-interface ID. Type: integer or string -| | ... -| | ... | *Example:* -| | ... | \| sub-interface ipv6 address from Honeycomb should be empty\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| -| | ... -| | [Arguments] | ${node} | ${super_if} | ${identifier} -| | ${if_data}= | Get sub interface oper data -| | ... | ${node} | ${super_if} | ${identifier} -| | Run keyword and expect error | *KeyError: 'ipv6'* -| | ... | Set Variable | ${if_data['ipv6']['address'][0]['ip']} - -| Sub-interface ipv6 address from VAT should be empty -| | [Documentation] | Uses VAT to verify that ipv6 address\ -| | ... | configuration on the specified sub-interface is empty. -| | ... -| | ... | *Arguments:* -| | ... | - node - Information about a DUT node. Type: dictionary -| | ... | - sub_interface - Name of an sub-interface on the specified node.\ -| | ... | Type: string -| | ... -| | ... | *Example:* -| | ... | \| sub-interface ipv6 address from VAT should be empty\ -| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| -| | ... -| | [Arguments] | ${node} | ${sub_interface} -| | ${data}= | VPP get interface ip addresses -| | ... | ${node} | ${sub_interface} | ipv6 -| | Should be empty | ${data} diff --git a/resources/libraries/robot/honeycomb/tap.robot b/resources/libraries/robot/honeycomb/tap.robot deleted file mode 100644 index 37d6a02f52..0000000000 --- a/resources/libraries/robot/honeycomb/tap.robot +++ /dev/null @@ -1,144 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Documentation | Keywords used to manipulate TAP interfaces. - -*** Keywords *** -| Honeycomb creates TAP interface -| | [Documentation] | Uses Honeycomb API to configure a new TAP interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for TAP. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb creates TAP interface \ -| | ... | \| ${nodes['DUT1']} \| tap_int1 \| ${{'host-interface-name':'tap1',\ -| | ... | 'mac':'08:00:27:60:26:ab', 'id':3}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | Create TAP interface | ${node} | ${interface} -| | ... | &{settings} - -| Honeycomb configures TAP interface -| | [Documentation] | Uses Honeycomb API to configure an existing TAP interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for TAP. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb configures TAP interface \ -| | ... | \| ${nodes['DUT1']} \| tap_int1 \| ${{'host-interface-name':'tap1',\ -| | ... | 'mac':'08:00:27:60:26:ab', 'id':3}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | Configure interface TAP | ${node} | ${interface} -| | ... | &{settings} - -| Honeycomb removes TAP interface -| | [Documentation] | Uses Honeycomb API to remove a TAP interface. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes TAP interface \ -| | ... | \| ${nodes['DUT1']} \| tap_int1 \| -| | [Arguments] | ${node} | ${interface} -| | Delete interface | ${node} | ${interface} - -| TAP Operational Data From Honeycomb Should Be -| | [Documentation] | Retrieves interface TAP configuration through Honeycomb\ -| | ... | and compares with settings supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for TAP. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| TAP Operational Data From Honeycomb Should Be \ -| | ... | \| ${nodes['DUT1']} \| tap_int1 \| ${{'host-interface-name':'tap1',\ -| | ... | 'mac':'08:00:27:60:26:ab', 'id':3}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${api_tap}= | Set Variable | ${api_data['v3po:tap-v2']} -| | Should be equal | ${api_tap['device-name']} | ${settings['device-name']} -| | ${api_mac}= | Set Variable | ${api_data['phys-address']} -| | Should be equal | ${api_mac} | ${settings['mac']} - -| TAP Operational Data From VAT Should Be -| | [Documentation] | Retrieves interface TAP configuration through VAT and\ -| | ... | compares with settings supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - settings - Configuration data for TAP. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| TAP Operational Data From Honeycomb Should Be \ -| | ... | \| ${nodes['DUT1']} \| ${{'host-interface-name':'tap1',\ -| | ... | 'mac':'08:00:27:60:26:ab', 'id':3}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | ${vat_data}= | TAP Dump | ${node} | ${interface} -| | Should be equal | ${vat_data['dev_name']} | ${settings['dev_name']} -| | Should be equal | ${vat_data['rx_ring_sz']} | ${settings['rx_ring_sz']} -| | Should be equal | ${vat_data['tx_ring_sz']} | ${settings['tx_ring_sz']} -# other settings not accessible through VAT commands - -| TAP Operational Data From Honeycomb Should Be empty -| | [Documentation] | Attempts to retrieve interface TAP configuration\ -| | ... | through Honeycomb and expects to recieve an empty dictionary. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| TAP Operational Data From Honeycomb Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| tap_int1 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Run keyword and expect error | *KeyError: 'v3po:tap-v2' | Set Variable -| | ... | ${api_data['v3po:tap-v2']} - -| TAP Operational Data From VAT Should Be empty -| | [Documentation] | Attempts to retrieve interface TAP configuration\ -| | ... | through VAT and expects a "no data" error. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| TAP Operational Data From VAT Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| tap_int1 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ${data}= | TAP Dump | ${node} | ${interface} -| | Should be empty | ${data} diff --git a/resources/libraries/robot/honeycomb/vhost_user.robot b/resources/libraries/robot/honeycomb/vhost_user.robot deleted file mode 100644 index d60917703f..0000000000 --- a/resources/libraries/robot/honeycomb/vhost_user.robot +++ /dev/null @@ -1,180 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| Documentation | Keywords used to manipulate vhost-user unterfaces. - -*** Keywords *** -| Honeycomb creates vhost-user interface -| | [Documentation] | Create a vhost-user interface using Honeycomb API. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for vhost-user interface.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb creates vhost-user interface\ -| | ... | \| ${nodes['DUT1']} \| vhost_test \| ${vhost_user_settings} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | Create vhost user interface | ${node} | ${interface} -| | ... | &{settings} - -| Honeycomb removes vhost-user interface -| | [Documentation] | Remove a vhost-user interface using Honeycomb API. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb removes vhost-user interface\ -| | ... | \| ${nodes['DUT1']} \| vhost_test \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | Delete interface | ${node} | ${interface} - -| Honeycomb configures vhost-user interface -| | [Documentation] | Configure a vhost-user interface using Honeycomb API. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for vhost-user interface.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb configures vhost-user interface\ -| | ... | \| ${nodes['DUT1']} \| vhost_test \| ${new_vhost_user_settings} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | Configure interface vhost user | ${node} | ${interface} -| | ... | &{settings} - -| Vhost-user Operational Data From Honeycomb Should Be -| | [Documentation] | Retrieves interface vhost-user configuration through\ -| | ... | Honeycomb and compares it with settings supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for vhost-user interface.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Vhost-user Operational Data From Honeycomb Should Be\ -| | ... | \| ${nodes['DUT1']} \| vhost_test \| ${vhost_user_settings} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${api_vhost}= | Set Variable | ${api_data['v3po:vhost-user']} -| | :FOR | ${key} | IN | @{settings.keys()} -| | | Should be equal | ${api_vhost['${key}']} | ${settings['${key}']} - -| Vhost-user Operational Data From VAT Should Be -| | [Documentation] | Retrieves interface vhost-user configuration through VAT\ -| | ... | and compares it with settings supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - settings - Configuration data for vhost-user interface.\ -| | ... | Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Vhost-user Operational Data From VAT Should Be\ -| | ... | \| ${nodes['DUT1']} \| vhost_test \| -| | ... -| | ... | *Note:* -| | ... | Due to the difficulty of identifying newly created interfaces by name\ -| | ... | or by sw_index, this keyword assumes there is only one vhost-user\ -| | ... | interface present on the specified node. -| | ... -| | [Arguments] | ${node} | ${settings} -| | &{translate}= | Create dictionary | server=1 | client=0 -| | ${vat_data}= | vhost user Dump | ${node} -| | ${vat_data}= | Set Variable | ${vat_data[0]} -| | Should be equal | ${vat_data['sock_filename']} | ${settings['socket']} -| | should be equal as strings | ${vat_data['is_server']} -| | ... | ${translate['${settings['role']}']} - -| Vhost-user Operational Data From Honeycomb Should Be empty -| | [Documentation] | Attempts to retrieve interface vhost-user configuration\ -| | ... | through Honeycomb and expects to recieve an empty dictionary. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... | \| Vhost-user Operational Data From Honeycomb Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| vhost_test \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Run keyword and expect error | *KeyError: 'v3po:vhost-user' -| | ... | Should be empty | ${api_data['v3po:vhost-user']} - -| Vhost-user Operational Data From VAT Should Be empty -| | [Documentation] | Attempts to retrieve interface vhost-user configuration\ -| | ... | through VAT and expects a "no data" error. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Vhost-user Operational Data From VAT Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ${data}= | vhost user Dump | ${node} -| | Should be empty | ${data} - -| Honeycomb fails setting vhost-user on different interface type -| | [Documentation] | Attempts to set vhost-user settings on an ethernet\ -| | ... | type interface and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for vhost-user. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails setting vhost-user on different interface type\ -| | ... | \| ${nodes['DUT1']} \| ${interface} \| ${vhost_user_settings} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | Run Keyword And Expect Error | HoneycombError: * Status code: 500. -| | ... | Configure interface vhost user | ${node} | ${interface} -| | ... | &{settings} - -| Honeycomb fails setting invalid vhost-user configuration -| | [Documentation] | Attempts to create a vhost-user interface with invalid\ -| | ... | configuration and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings_list - Bad configuration data for vhost-user. Type: list -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails setting invalid vhost-user configuration\ -| | ... | \| ${nodes['DUT1']} \| vhost_test \| ${vhost_user_settings} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | Run Keyword And Expect Error | HoneycombError: * Status code: 400. -| | ... | Configure interface vhost user | ${node} | ${interface} -| | ... | &{settings} diff --git a/resources/libraries/robot/honeycomb/vxlan.robot b/resources/libraries/robot/honeycomb/vxlan.robot deleted file mode 100644 index 951a0d109c..0000000000 --- a/resources/libraries/robot/honeycomb/vxlan.robot +++ /dev/null @@ -1,171 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords - -*** Keywords *** -| Honeycomb sets interface VxLAN configuration -| | [Documentation] | Uses Honeycomb API to configure a VxLAN tunnel. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for VxLAN. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb sets interface VxLAN configuration \ -| | ... | \|${nodes['DUT1']} \| vxlan_01 \| ${{'src':'192.168.0.2',\ -| | ... | 'dst':'192.168.0.3', 'vni':5, 'encap-vrf-id':0}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | Honeycomb Create VxLAN interface | ${node} | ${interface} -| | ... | &{settings} - -| Honeycomb removes VxLAN tunnel settings -| | [Documentation] | Uses Honeycomb API to disable a VxLAN tunnel and remove\ -| | ... | it from configuration data. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes VxLAN tunnel \| ${nodes['DUT1']} \| vxlan_01 \| -| | [Arguments] | ${node} | ${interface} -| | Delete interface | ${node} | ${interface} - -| VxLAN Operational Data From Honeycomb Should Be -| | [Documentation] | Retrieves interface VxLAN configuration through Honeycomb\ -| | ... | and compares with settings supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for VxLAN. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| VxLAN Operational Data From Honeycomb Should Be \ -| | ... | \|${nodes['DUT1']} \| vxlan_01 \| ${{'src':'192.168.0.2',\ -| | ... | 'dst':'192.168.0.3', 'vni':5, 'encap-vrf-id':0}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${api_vxlan}= | Set Variable | ${api_data['v3po:vxlan']} -| | :FOR | ${key} | IN | @{settings.keys()} -| | | Should be equal | ${api_vxlan['${key}']} | ${settings['${key}']} - -| VxLAN Operational Data From VAT Should Be -| | [Documentation] | Retrieves interface VxLAN configuration through VAT and\ -| | ... | compares with settings supplied in argument. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - settings - Configuration data for VxLAN. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| VxLAN Operational Data From Honeycomb Should Be \ -| | ... | \|${nodes['DUT1']} \| ${{'src':'192.168.0.2',\ -| | ... | 'dst':'192.168.0.3', 'vni':5, 'encap-vrf-id':0}} \| -| | ... -| | ... | *Note:* -| | ... | Due to the difficulty of identifying newly created interfaces by name\ -| | ... | or by sw_index, this keyword assumes there is only one VxLAN tunnel\ -| | ... | present on the specified node. -| | [Arguments] | ${node} | ${settings} -| | ${vat_data}= | VxLAN Dump | ${node} -| | ${vat_data}= | Set Variable | ${vat_data[0]} -| | Should be equal | ${vat_data['dst_address']} | ${settings['dst']} -| | Should be equal | ${vat_data['src_address']} | ${settings['src']} -| | Should be equal | ${vat_data['vni']} | ${settings['vni']} -| | Should be equal -| | ... | ${vat_data['encap_vrf_id']} | ${settings['encap-vrf-id']} - -| VxLAN Operational Data From Honeycomb Should Be empty -| | [Documentation] | Attempts to retrieve interface VxLAN configuration\ -| | ... | through Honeycomb and expects to recieve an empty dictionary. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| VxLAN Operational Data From Honeycomb Should Be empty\ -| | ... | \|${nodes['DUT1']} \| vxlan_01 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Run keyword and expect error | *KeyError: 'v3po:vxlan' | Set Variable -| | ... | ${api_data['v3po:vxlan']} - -| VxLAN Operational Data From VAT Should Be empty -| | [Documentation] | Attempts to retrieve interface VxLAN configuration\ -| | ... | through VAT and expects a "no data" error. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| VxLAN Operational Data From VAT Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ${data}= | VxLAN Dump | ${node} -| | Should be empty | ${data} - -| Honeycomb fails setting VxLan on different interface type -| | [Documentation] | Attempts to set VxLAN settings on an ethernet\ -| | ... | type interface and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings - Configuration data for VxLAN. Type: dictionary -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb fails setting VxLan on different interface type\ -| | ... | \|${nodes['DUT1']} \| GigabitEthernet0/9/0 \| ${{'src':'192.168.0.2',\ -| | ... | 'dst':'192.168.0.3', 'vni':5, 'encap-vrf-id':0}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings} -| | Run Keyword And Expect Error | HoneycombError: * Status code: 500. -| | ... | Honeycomb Configure interface vxlan -| | ... | ${node} | ${interface} | &{settings} - -| Honeycomb fails setting invalid VxLAN configuration -| | [Documentation] | Attempts to create a VxLAN interface with invalid\ -| | ... | configuration and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface on the specified node. Type: string -| | ... | - settings_list - Bad configuration data for VxLAN. Type: list -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb fails setting invalid VxLAN configuration\ -| | ... | \|${nodes['DUT1']} \| vxlan_01 \| ${{'src':'abcd', 'vni':-3}} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${settings_list} -| | :FOR | ${settings} | IN | @{settings_list} -| | | Run Keyword And Expect Error | HoneycombError: * Status code: 500. -| | | ... | Honeycomb Create VxLAN interface -| | | ... | ${node} | ${interface} | &{settings} diff --git a/resources/libraries/robot/honeycomb/vxlan_gpe.robot b/resources/libraries/robot/honeycomb/vxlan_gpe.robot deleted file mode 100644 index 20ca7f5f1a..0000000000 --- a/resources/libraries/robot/honeycomb/vxlan_gpe.robot +++ /dev/null @@ -1,208 +0,0 @@ -# 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 *** -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords - -*** Variables *** -# Translation table used to convert values received from Honeycomb to values -# received from VAT. -| &{protocols}= -| ... | -=0 -| ... | ipv4=1 -| ... | ipv6=2 -| ... | ethernet=3 -| ... | nsh=4 - -*** Keywords *** -| Honeycomb creates VxLAN GPE interface -| | [Documentation] | Uses Honeycomb API to configure a VxLAN tunnel. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface to be created. Type: string -| | ... | - base_settings - configuration data common for all interfaces.\ -| | ... | Type: dictionary -| | ... | - vxlan_gpe_settings - VxLAN GPE specific parameters. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb creates VxLAN GPE interface \ -| | ... | \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \| ${base_params} \ -| | ... | \| ${vxlan_gpe_params} \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ... | ${base_settings} | ${vxlan_gpe_settings} -| | ... -| | Create VxLAN GPE interface -| | ... | ${node} | ${interface} | &{base_settings} | &{vxlan_gpe_settings} - -| Honeycomb removes VxLAN GPE interface -| | [Documentation] | Uses Honeycomb API to remove VxLAN GPE interface from\ -| | ... | node. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of the interface to be removed. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Honeycomb removes VxLAN GPE interface \ -| | ... | \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ... -| | Delete interface | ${node} | ${interface} - -| VxLAN GPE Operational Data From Honeycomb Should Be -| | [Documentation] | Uses Honeycomb API to get operational data about the\ -| | ... | given interface and compares them to the values provided as arguments. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface to be checked. Type: string -| | ... | - base_settings - configuration data common for all interfaces.\ -| | ... | Type: dictionary -| | ... | - vxlan_gpe_settings - VxLAN GPE specific parameters. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| VxLAN GPE Operational Data From Honeycomb Should Be \ -| | ... | \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \| ${base_params} \ -| | ... | \| ${vxlan_gpe_params} \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ... | ${base_settings} | ${vxlan_gpe_settings} -| | ... -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Should be equal as strings -| | ... | ${api_data['name']} | ${base_settings['name']} -| | Should be equal as strings -| | ... | ${api_data['type']} | v3po:vxlan-gpe-tunnel -| | Run keyword if | $base_settings['enabled'] == True -| | ... | Run keywords -| | ... | Should be equal as strings | ${api_data['admin-status']} | up -| | ... | AND -| | ... | Should be equal as strings | ${api_data['oper-status']} | up -| | ... | ELSE -| | ... | Run keywords -| | ... | Should be equal as strings | ${api_data['admin-status']} | down -| | ... | AND -| | ... | Should be equal as strings | ${api_data['oper-status']} | down - -| VxLAN GPE Operational Data From VAT Should Be -| | [Documentation] | Uses VAT to get operational data about the given\ -| | ... | interface and compares them to the values provided as arguments. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface to be checked. Type: string -| | ... | - vxlan_gpe_settings - VxLAN GPE specific parameters. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| VxLAN GPE Operational Data From VAT Should Be \ -| | ... | \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \| ${vxlan_gpe_params} \| -| | ... -| | [Arguments] | ${node} | ${interface} | ${vxlan_gpe_params} -| | ... -| | ${if1}= | Vpp Get Interface Sw Index | ${node} | ${interface} -| | ${vat_data}= | VxLAN GPE Dump | ${node} | ${if1} -| | Should be equal as strings -| | ... | ${vat_data['local']} | ${vxlan_gpe_params['local']} -| | Should be equal as strings -| | ... | ${vat_data['remote']} | ${vxlan_gpe_params['remote']} -| | Should be equal as strings -| | ... | ${vat_data['vni']} | ${vxlan_gpe_params['vni']} -| | Should be equal as strings -| | ... | ${vat_data['encap_vrf_id']} | ${vxlan_gpe_params['encap-vrf-id']} -| | Should be equal as strings -| | ... | ${vat_data['decap_vrf_id']} | ${vxlan_gpe_params['decap-vrf-id']} -| | Should be equal as strings | ${vat_data['protocol']} -| | ... | ${protocols['${vxlan_gpe_params['next-protocol']}']} - -| VxLAN GPE Interface indices from Honeycomb and VAT should correspond -| | [Documentation] | Uses VAT and Honeycomb to get operational data about the \ -| | ... | given VxLAN GPE interface and compares the interface indexes. The \ -| | ... | VxLAN GPE interface index from Honeycomb should be greater than \ -| | ... | index from VAT by one. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of the interface to be checked. Type: string -| | ... -| | ... | *Example:* -| | ... -| | ... | \| VxLAN GPE Interface indices from Honeycomb and VAT should \ -| | ... | correspond \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ... -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | ${if1}= | Vpp Get Interface Sw Index | ${node} | ${interface} -| | ${vat_data}= | VxLAN GPE Dump | ${node} | ${if1} -| | ${sw_if_index}= | EVALUATE | ${vat_data['sw_if_index']} + 1 -| | Should be equal as strings -| | ... | ${api_data['if-index']} | ${sw_if_index} - -| VxLAN GPE Operational Data From Honeycomb Should Be empty -| | [Documentation] | Uses Honeycomb API to get operational data about\ -| | ... | the given interface and expects to fail. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| VxLAN GPE Operational Data From Honeycomb Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ... -| | ${api_data}= | Get interface oper data | ${node} | ${interface} -| | Should be empty | ${api_data} - -| VxLAN GPE Operational Data From VAT Should Be empty -| | [Documentation] | Uses VAT to get operational data about the given\ -| | ... | interface and expects an empty dictionary. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| VxLAN GPE Operational Data From VAT Should Be empty\ -| | ... | \| ${nodes['DUT1']} \| -| | ... -| | [Arguments] | ${node} -| | ${data}= | VxLAN Dump | ${node} -| | Should be empty | ${data} - -| Honeycomb fails to create VxLAN GPE interface -| | [Documentation] | Uses Honeycomb API to configure a VxLAN tunnel with wrong\ -| | ... | configuration data. -| | ... -| | ... | *Arguments:* -| | ... | - node - information about a DUT node. Type: dictionary -| | ... | - interface - name of an interface to be created. Type: string -| | ... | - base_settings - Configuration data common for all interfaces.\ -| | ... | Type: dictionary -| | ... | - vxlan_gpe_settings - VxLAN GPE specific parameters. Type: dictionary -| | ... -| | ... | *Example:* -| | ... | \| Honeycomb fails to create VxLAN GPE interface \ -| | ... | \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \| ${wrong_base_params} \ -| | ... | \| ${vxlan_gpe_params} \| -| | ... -| | [Arguments] | ${node} | ${interface} -| | ... | ${base_settings} | ${vxlan_gpe_settings} -| | ... -| | Run keyword and expect error | *HoneycombError*not successful. * code: *00. -| | ... | Create VxLAN GPE interface -| | ... | ${node} | ${interface} | &{base_settings} | &{vxlan_gpe_settings} |