From 233683de57527f477bf7e8d042a5f3d1f08c7744 Mon Sep 17 00:00:00 2001 From: selias Date: Fri, 7 Oct 2016 13:43:45 +0200 Subject: CSIT-427: Honeycomb ietf-ACL tests - L2 - add keywords for accessing Honeycomb's ietf-acl node - add variable file with ietf-acl test data - add ietf-acl traffic test suite - modify bridge domain teardown keyword to unassign interfaces from the bridge domain before delete Change-Id: I6df1771f2fb9b42f30b5af8f54a384c6714f5949 Signed-off-by: selias --- .../robot/honeycomb/access_control_lists.robot | 58 ++++++++++++++++++++++ .../libraries/robot/honeycomb/bridge_domain.robot | 41 +++++++++++++-- .../libraries/robot/honeycomb/interfaces.robot | 1 - 3 files changed, 96 insertions(+), 4 deletions(-) (limited to 'resources/libraries/robot/honeycomb') diff --git a/resources/libraries/robot/honeycomb/access_control_lists.robot b/resources/libraries/robot/honeycomb/access_control_lists.robot index 0fd1c7ef86..0898a9339e 100644 --- a/resources/libraries/robot/honeycomb/access_control_lists.robot +++ b/resources/libraries/robot/honeycomb/access_control_lists.robot @@ -337,3 +337,61 @@ | | ... | \| Clear all ACL settings \| ${nodes['DUT1']} \| | | [Arguments] | ${node} | | Remove all classify tables | ${node} + +| Honeycomb creates ACL chain through IETF node +| | [Documentation] | Creates classify chain through the high-level\ +| | ... | IETF-ACL node. +| | ... +| | ... | *Arguments:* +| | ... | - node - Information about a DUT node. Type: dictionary +| | ... | - acl_list_name - Name for the classify chain. Type: string +| | ... | - layer - Classification layer (L2, L3, L4, mixed). Type: string +| | ... | - acl_list_settings - classify rules. Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Honeycomb creates ACL chain through IETF node \ +| | ... | \| ${nodes['DUT1']} \| acl_test \| ${settings} \| +| | [Arguments] | ${node} | ${acl_list_name} | ${layer} | ${acl_list_settings} +| | Create IETF classify chain +| | ... | ${node} | ${acl_list_name} | ${layer} | ${acl_list_settings} + +| Honeycomb assigns IETF-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 apply classifier to. | Type: string +| | ... | - layer - Classification layer (L2, L3, L4, mixed). Type: string +| | ... | - direction - Ingress or Egress ACL. Type: string +| | ... | - acl_list_name - Name of the classify chain to apply. Type: string +| | ... | - default_action - Default classify action: permit or deny.\ +| | ... | Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Honeycomb assigns IETF-ACL chain to interface \ +| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| L2 \| ingress \ +| | ... | \| acl_test \| permit \| +| | [Arguments] +| | ... | ${node} | ${interface} | ${layer} | ${direction} | ${acl_list_name} +| | ... | ${default-action} +| | Set IETF interface ACL +| | ... | ${node} | ${interface} | ${layer} | ${direction} | ${acl_list_name} +| | ... | ${default-action} + +| Clear IETF-ACL settings +| | [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 IETF-ACL settings | ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| +| | [Arguments] | ${node} | ${interface} +| | Delete IETF interface ACLs | ${node} | ${interface} +| | Delete IETF classify chains | ${node} \ No newline at end of file diff --git a/resources/libraries/robot/honeycomb/bridge_domain.robot b/resources/libraries/robot/honeycomb/bridge_domain.robot index 99befc9e15..2edf3076ff 100644 --- a/resources/libraries/robot/honeycomb/bridge_domain.robot +++ b/resources/libraries/robot/honeycomb/bridge_domain.robot @@ -178,6 +178,39 @@ | | | Should contain | ${if_indices} | ${interface['sw_if_index']} | | | Should be equal | ${interface['shg']} | ${settings['split_horizon_group']} +| Honeycomb should not show interfaces assigned to bridge domain +| | [Documentation] | Uses Honeycomb API to verify interfaces are not assigned\ +| | ... | to bridge domain. +| | ... +| | ... | *Arguments:* +| | ... | - node - Information about a DUT node. Type: dictionary +| | ... | - interface1, interface2 - Names of interfaces to check\ +| | ... | bridge domain assignment on. Type: string +| | ... | - bd_name - Name of the bridge domain. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Honeycomb should not show interfaces assigned to bridge domain \ +| | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \ +| | ... | \| bd-04 \| +| | [Arguments] | ${node} | ${interface1} | ${interface2} | ${bd_name} +| | ${if1_data_oper}= | interfaceAPI.Get interface oper data +| | ... | ${node} | ${interface1} +| | ${if2_data_oper}= | interfaceAPI.Get interface oper data +| | ... | ${node} | ${interface2} +| | ${if1_data_cfg}= +| | ... | interfaceAPI.Get interface cfg data | ${node} | ${interface1} +| | ${if1_data_cfg}= +| | ... | interfaceAPI.Get interface cfg data | ${node} | ${interface2} +| | Run keyword and expect error | *KeyError: 'v3po:l2'* +| | ... | Set Variable | ${if1_data_oper['v3po:l2']} +| | Run keyword and expect error | *KeyError: 'v3po:l2'* +| | ... | Set Variable | ${if2_data_oper['v3po:l2']} +| | Run keyword and expect error | *KeyError: 'v3po:l2'* +| | ... | Set Variable | ${if1_data_cfg['v3po:l2']} +| | Run keyword and expect error | *KeyError: 'v3po:l2'* +| | ... | Set Variable | ${if2_data_cfg['v3po:l2']} + | Honeycomb removes all bridge domains | | [Documentation] | Uses Honeycomb API to remove all bridge domains from the \ | | ... | VPP node. @@ -188,8 +221,10 @@ | | ... | *Example:* | | ... | | ... | \| Honeycomb removes all bridge domains \| ${nodes['DUT1']} \| -| | [Arguments] | ${node} -| | Remove all bds | ${node} +| | [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\ @@ -239,7 +274,7 @@ | | [Arguments] | ${node} | ${interface} | ${bd_name} | ${settings} | | ... | | interfaceAPI.Add bridge domain to interface -| | ... | ${node} | ${interface} | ${settings['bridge-domain']} +| | ... | ${node} | ${interface} | ${bd_name} | | ... | ${settings['split-horizon-group']} | | ... | ${settings['bridged-virtual-interface']} diff --git a/resources/libraries/robot/honeycomb/interfaces.robot b/resources/libraries/robot/honeycomb/interfaces.robot index f94d03d7d4..1ffc2e42bb 100644 --- a/resources/libraries/robot/honeycomb/interfaces.robot +++ b/resources/libraries/robot/honeycomb/interfaces.robot @@ -114,7 +114,6 @@ | | :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\ -- cgit 1.2.3-korg