Add tests for Honeycomb L2 FIB support
[csit.git] / resources / libraries / robot / honeycomb / l2_fib.robot
diff --git a/resources/libraries/robot/honeycomb/l2_fib.robot b/resources/libraries/robot/honeycomb/l2_fib.robot
new file mode 100644 (file)
index 0000000..e63f299
--- /dev/null
@@ -0,0 +1,187 @@
+# 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
+| ...     | WITH NAME | InterfaceAPI
+
+*** 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']}
+| | interfaceAPI.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 VAT should be
+| | [Documentation] | Retrieves the operational data about the specified L2 \
+| | ... | FIB entry using VAT 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 VAT 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 VAT | ${node} | ${bd_index}
+| | ... | ${l2_fib_ref_data['mac']}
+| | interfaceAPI.Compare Data Structures | ${l2_fib_data} | ${l2_fib_ref_data}
+
+| L2 FIB Table from VAT should be empty
+| | [Documentation] | Check if the L2 FIB table in the specified bridge domain \
+| | ... | is empty. VAT 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 VAT should be empty \
+| | ... | \| ${nodes['DUT1']} \| test_bd \|
+| | ...
+| | [Arguments] | ${node} | ${bd_index}
+| | ...
+| | ${l2_fib_data}= | Get L2 FIB table VAT | ${node} | ${bd_index}
+| | Should be empty | ${l2_fib_data}