# limitations under the License.
*** Settings ***
-| Library | resources/libraries/python/honeycomb/HoneycombUtil.py
| Library | resources.libraries.python.InterfaceUtil
| ... | WITH NAME | interfaceCLI
| Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords
| | ... | \| up \|
| | [Arguments] | ${node} | ${interface} | ${state}
| | interfaceCLI.Set interface state | ${node} | ${interface} | ${state}
+| | ... | if_type=name
| Honeycomb sets interface state
| | [Documentation] | Uses Honeycomb API to change the admin state\
| | ... | ${vat_data['admin_up_down']} == 1 | up | down
| | Should be equal | ${vat_state} | ${state}
-| Honeycomb sets interface ipv4 configuration
+| Honeycomb sets interface ipv4 address
| | [Documentation] | Uses Honeycomb API to change ipv4 configuration\
| | ... | of the specified interface.
| | ...
| | ... | - interface - name of an interface on the specified node. Type: string
| | ... | - address - IP address to set. Type: string
| | ... | - netmask - subnet mask to set. Type: string
-| | ... | - fib_address - IP address to add to fib table. Type: string
-| | ... | - fib_mac - MAC address to add to fib table. Type: string
| | ... | - settings - ipv4 interface settings. Type: dictionary
| | ...
| | ... | *Example:*
| | ...
| | ... | \| Honeycomb sets interface ipv4 configuration \| ${nodes['DUT1']} \
| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 255.255.255.0 \
-| | ... | \| 192.168.0.3 \| 08:00:27:c0:5d:37 \
| | ... | \| ${{'enabled': True, 'mtu': 1500}} \|
| | [Arguments] | ${node} | ${interface} | ${address} | ${netmask}
-| | ... | ${fib_address} | ${fib_mac} | ${settings}
+| | ... | ${settings}
| | interfaceAPI.Add first ipv4 address
| | ... | ${node} | ${interface} | ${address} | ${netmask}
-| | interfaceAPI.Add first ipv4 neighbor
-| | ... | ${node} | ${interface} | ${fib_address} | ${fib_mac}
| | :FOR | ${key} | IN | @{settings.keys()}
| | | interfaceAPI.Configure interface ipv4
| | | ... | ${node} | ${interface} | ${key} | ${settings['${key}']}
+| | | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface}
+
+| Honeycomb sets interface ipv4 address with prefix
+| | [Documentation] | Uses Honeycomb API to assign an ipv4 address to the\
+| | ... | 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: int
+| | ... | - settings - ipv4 interface settings. Type: dictionary
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Honeycomb sets interface ipv4 address with prefix \
+| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 24 \|
+| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix}
+| | ... | ${settings}
+| | interfaceAPI.Add first ipv4 address
+| | ... | ${node} | ${interface} | ${address} | ${prefix}
+| | :FOR | ${key} | IN | @{settings.keys()}
+| | | interfaceAPI.Configure interface ipv4
+| | | ... | ${node} | ${interface} | ${key} | ${settings['${key}']}
+
+| Honeycomb adds interface ipv4 neighbor
+| | [Documentation] | Uses Honeycomb API to assign an ipv4 neighbor to the\
+| | ... | specified interface.
+| | ...
+| | ... | *Arguments:*
+| | ... | - node - information about a DUT node. Type: dictionary
+| | ... | - interface - name of an interface on the specified node. Type: string
+| | ... | - fib_address - IP address to add to fib table. Type: string
+| | ... | - fib_mac - MAC address to add to fib table. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Honeycomb adds interface ipv4 neighbor \| ${nodes['DUT1']} \
+| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.3 \| 08:00:27:c0:5d:37 \
+| | ... | \| ${{'enabled': True, 'mtu': 1500}} \|
+| | [Arguments] | ${node} | ${interface} | ${fib_address} | ${fib_mac}
+| | interfaceAPI.Add ipv4 neighbor
+| | ... | ${node} | ${interface} | ${fib_address} | ${fib_mac}
| IPv4 config from Honeycomb should be
| | [Documentation] | Retrieves interface ipv4 configuration through Honeycomb\
| | ... | - node - information about a DUT node. Type: dictionary
| | ... | - interface - name of an interface on the specified node. Type: string
| | ... | - address - IP address to expect. Type: string
-| | ... | - netmask - subnet mask to expect. Type: string
+| | ... | - prefix - prefix length to expect. Type: string
| | ... | - fib_address - IP address to expect in fib table. Type: string
| | ... | - fib_mac - MAC address to expect in fib table. Type: string
| | ... | - settings - ipv4 interface settings to expect. Type: dictionary
| | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 255.255.255.0 \
| | ... | \| 192.168.0.3 \| 08:00:27:c0:5d:37 \
| | ... | \| ${{'enabled': True, 'mtu': 1500}} \|
-| | [Arguments] | ${node} | ${interface} | ${address} | ${netmask}
+| | [Arguments] | ${node} | ${interface} | ${address} | ${prefix}
| | ... | ${fib_address} | ${fib_mac} | ${settings}
| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface}
| | Should be equal | ${address}
| | ... | ${api_data['ietf-ip:ipv4']['address'][0]['ip']}
-| | Should be equal | ${netmask}
-| | ... | ${api_data['ietf-ip:ipv4']['address'][0]['netmask']}
+| | Should be equal | ${prefix}
+| | ... | ${api_data['ietf-ip:ipv4']['address'][0]['prefix-length']}
| | Should be equal | ${fib_address}
-| | ... | ${api_data['ietf-ip:ipv4']['neighbor'][0]['ip']
+| | ... | ${api_data['ietf-ip:ipv4']['neighbor'][0]['ip']}
| | Should be equal | ${fib_mac}
-| | ... | ${api_data['ietf-ip:ipv4']['neighbor'][0]['link-layer-address']
+| | ... | ${api_data['ietf-ip:ipv4']['neighbor'][0]['link-layer-address']}
| | :FOR | ${key} | IN | @{settings.keys()}
| | | Should be equal
| | | ... | ${settings['{key']} | ${api_data['ietf-ip:ipv4']['{$key}']}
| | [Arguments] | ${node} | ${interface} | ${address} | ${netmask}
| | ${vpp_data}= | interfaceCLI.VPP get interface ip addresses
| | ... | ${node} | ${interface} | ipv4
+#TODO: update based on resolution of bug https://jira.fd.io/browse/VPP-132
| | Should be equal | ${vpp_data[0]['ip']} | ${address}
| | Should be equal | ${vpp_data[0]['netmask']} | ${netmask}
+| Honeycomb removes interface ipv4 addresses
+| | [Documentation] | Removes all configured ipv4 addresses from the specified\
+| | ... | interface.
+| | ...
+| | ... | *Arguments:*
+| | ... | - node - information about a DUT node. Type: dictionary
+| | ... | - interface - name of an interface on the specified node. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Honeycomb removes interface ipv4 addresses \| ${nodes['DUT1']} \
+| | ... | \| GigabitEthernet0/8/0 \|
+| | [Arguments] | ${node} | ${interface}
+| | Remove all ipv4 addresses | ${node} | ${interface}
+
+| IPv4 address from Honeycomb should be empty
+| | [Documentation] | Retrieves interface ipv4 configuration through Honeycomb\
+| | ... | and expects to find no IPv4 addresses.
+| | ...
+| | ... | *Arguments:*
+| | ... | - node - information about a DUT node. Type: dictionary
+| | ... | - interface - name of an interface on the specified node. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| IPv4 address from Honeycomb should be empty\| ${nodes['DUT1']} \
+| | ... | \| GigabitEthernet0/8/0 \|
+| | [Arguments] | ${node} | ${interface}
+| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface}
+| | Should be empty | ${api_data['ietf-ip:ipv4']['address']
+
+| IPv4 address from VAT should be empty
+| | [Documentation] | Retrieves interface ipv4 configuration through VAT and\
+| | ... | and expects to find no ipv4 addresses.
+| | ...
+| | ... | *Arguments:*
+| | ... | - node - information about a DUT node. Type: dictionary
+| | ... | - interface - name of an interface on the specified node. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| IPv4 config from VAT should be empty \| ${nodes['DUT1']} \
+| | ... | \| GigabitEthernet0/8/0 \|
+| | [Arguments] | ${node} | ${interface}
+| | Run keyword and expect error | *No JSON object could be decoded.*
+| | ... | InterfaceCLI.VPP get interface ip addresses
+| | ... | ${node} | ${interface} | ipv4
+
| Honeycomb sets interface ipv6 configuration
| | [Documentation] | Uses Honeycomb API to change ipv6 configuration\
| | ... | of the specified interface.
| | [Arguments] | ${node} | ${interface} | ${mtu} | ${vrf-id}
| | ${vat_data}= | InterfaceCLI.VPP get interface data | ${node} | ${interface}
| | Should be equal | ${vat_data['mtu']} | ${mtu}
-| | Should be equal | ${vat_data['sub_inner_vlan_id']} | ${vrf-id}
-| Honeycomb sets interface VxLAN configuration
-| | [Documentation] | Uses Honeycomb API to change VxLAN configuration \
-| | ... | of the specified interface.
+| Interface configuration 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 an interface on the specified node. Type: string
-| | ... | - vxlan_settings - Configuration data for VxLAN. Type: dictionary
+| | ... | - interface - name of a interface on the specified node. Type:\
+| | ... | string
| | ...
| | ... | *Example:*
-| | ... | \| Honeycomb sets interface VxLAN configuration \
-| | ... | \|${node} \| ${interface} \| &{vxlan_settings} \|
+| | ... | \| Interface configuration from Honeycomb should be empty\
+| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \|
| | ...
-| | [Arguments] | ${node} | ${interface} | &{vxlan_settings}
-| | :FOR | ${items} | IN | @{vxlan_settings.items()}
-| | | interfaceAPI.Configure interface vxlan | ${node} | ${interface} | @{items}
+| | [Arguments] | ${node} | ${interface}
+| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface}
+| | Should be empty | ${api_data}
-| VxLAN configuration from Honeycomb should be
-| | [Documentation] | Retrieves interface VxLAN configuration through Honeycomb\
-| | ... | and compares with state supplied in argument.
+| Interface configuration 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 an interface on the specified node. Type: string
-| | ... | - vxlan_settings - Configuration data for VxLAN. Type: dictionary
+| | ... | - interface - name of a Interface on the specified node. Type:\
+| | ... | string
| | ...
| | ... | *Example:*
+| | ... | \| Interface configuration from VAT should be empty\
+| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \|
| | ...
-| | ... | \| VxLAN configuration from Honeycomb should be \
-| | ... | \| ${node} \| ${interface} \| &{vxlan_settings} \|
-| | ...
-| | [Arguments] | ${node} | ${interface} | &{vxlan_settings}
-| | ${api_data}= | interfaceAPI.Get interface cfg data | ${node} | ${interface}
-| | :FOR | ${items} | IN | @{vxlan_settings.items()}
-| | | Should be equal as strings
-| | ... | ${api_data['v3po:vxlan']['@{items}[0]']} | ${items[1]}
-| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface}
-| | :FOR | ${items} | IN | @{vxlan_settings.items()}
-| | | Should be equal as strings
-| | ... | ${api_data['v3po:vxlan']['@{items}[0]']} | ${items[1]}
+| | [Arguments] | ${node} | ${interface} |
+| | ${vat_data}= | InterfaceCLI.VPP get interface data | ${node} | ${interface}
+| | Should be empty | ${vat_data}
-| VxLAN configuration from VAT should be
-| | [Documentation] | Retrieves interface VxLAN configuration through VAT and\
-| | ... | compares with state supplied in argument.
+| 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 an interface on the specified node. Type: string
-| | ... | - vxlan_settings - Configuration data for VxLAN. Type: dictionary
+| | ... | - interface - name of the interface to be checked. Type: string
| | ...
| | ... | *Example:*
| | ...
-| | ... | \| VxLAN configuration from Honeycomb should be \
-| | ... | \| ${node} \| ${interface} \| &{vxlan_settings} \|
+| | ... | \| Interface indices from Honeycomb and VAT should correspond \
+| | ... | \| ${nodes['DUT1']} \| vxlan_gpe_tunnel0 \|
| | ...
-| | [Arguments] | ${node} | ${interface} | &{vxlan_settings}
-| | ${vat_data}= | VxLAN Dump | ${node} | ${interface}
-| | Should be equal as strings
-| | ... | ${vat_data['dst_address']} | ${vxlan_settings['dst']}
-| | Should be equal as strings
-| | ... | ${vat_data['src_address']} | ${vxlan_settings['src']}
-| | Should be equal as strings | ${vat_data['vni']} | ${vxlan_settings['vni']}
+| | [Arguments] | ${node} | ${interface}
+| | ...
+| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface}
+| | ${vat_data}= | InterfaceCLI.VPP get interface data | ${node} | ${interface}
+| | ${sw_if_index}= | EVALUATE | ${vat_data['sw_if_index']} + 1
| | Should be equal as strings
-| | ... | ${vat_data['encap-vrf-id']} | ${vxlan_settings['encap_vrf_id']}
+| | ... | ${api_data['if-index']} | ${sw_if_index}