BGP 3-node clustering performance
[integration/test.git] / csit / libraries / PrefixCounting.robot
index 0c8a3061da6cec256602a739ba8606ad0c072eda..69c20ee3a0540d67c5fe88fdad3d86be8c2f046f 100644 (file)
@@ -1,60 +1,64 @@
 *** Settings ***
 Documentation     Robot keyword library (Resource) for common BGP actions concerned with counting prefixes.
 ...
-...               Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+...               Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
 ...
 ...               This program and the accompanying materials are made available under the
 ...               terms of the Eclipse Public License v1.0 which accompanies this distribution,
 ...               and is available at http://www.eclipse.org/legal/epl-v10.html
 ...
 ...
-...               Currently, all keywords count prefixes only in example-ipv4-topology.
+...               Currently, all keywords count prefixes only in ${topology}.
 ...               Prefix is identified by simplistic regular expression on JSON data.
 ...
 ...               This resource assumes that RequestsLibrary has open a connection named "operational"
-...               which points to (an analogue of) http://${ODL_SYSTEM_IP}:${RESTCONFPORT}/${OPERATIONAL_API}
+...               which points to (an analogue of) http://<ip-addr>:${RESTCONFPORT}/${OPERATIONAL_API}
+...               or user has to provide a similar session.
 Library           RequestsLibrary
 Resource          ${CURDIR}/WaitUtils.robot
+Resource          ${CURDIR}/ScalarClosures.robot
 
 *** Keywords ***
 PC_Setup
     [Documentation]    Call dependency setups and construct suite variables.
     WaitUtils.WU_Setup    # includes ScalarClosures.SC_Setup
-    ${getter} =    ScalarClosures.Closure_From_Keyword_And_Arguments    Get_Ipv4_Topology_Count
-    BuiltIn.Set_Suite_Variable    ${PrefixCounting__getter}    ${getter}
 
 Get_Ipv4_Topology
-    [Documentation]    GET the example-ipv4-topology data, check status is 200, return the topology data.
+    [Arguments]    ${session}=operational    ${topology}=example-ipv4-topology
+    [Documentation]    GET the ${topology} data, check status is 200, return the topology data.
     ...
     ...    Contrary to Utils.Get_Data_From_URI, this does not Log the (potentially huge) content.
-    ${response} =    RequestsLibrary.Get_Request    operational    network-topology:network-topology/topology/example-ipv4-topology
-    Run_Keyword_If    ${response.status_code} != 200    Fail    Get on example-ipv4-topology returned status code ${response.status_code} with message: ${response.text}
+    ${response} =    RequestsLibrary.Get_Request    ${session}    network-topology:network-topology/topology/${topology}
+    Run_Keyword_If    ${response.status_code} != 200    Fail    Get on ${topology} returned status code ${response.status_code} with message: ${response.text}
     [Return]    ${response.text}
 
 Get_Ipv4_Topology_Count
+    [Arguments]    ${session}=operational    ${topology}=example-ipv4-topology
     [Documentation]    Get topology. If not fail, return number of prefixes in the topology.
-    ${topology} =    Get_Ipv4_Topology
+    ${topology} =    Get_Ipv4_Topology    session=${session}    topology=${topology}
     # Triple quotes are precaution against formatted output.
     ${prefix_count} =    Builtin.Evaluate    len(re.findall('"prefix":"', '''${topology}'''))    modules=re
     [Return]    ${prefix_count}
 
 Check_Ipv4_Topology_Count
-    [Arguments]    ${expected_count}
+    [Arguments]    ${expected_count}    ${session}=operational    ${topology}=example-ipv4-topology
     [Documentation]    Check that the count of prefixes matches the expected count. Fails if it does not. In either case, collect garbage.
-    ${actual_count} =    ScalarClosures.Run_Keyword_And_Collect_Garbage    Get_Ipv4_Topology_Count
+    ${actual_count} =    ScalarClosures.Run_Keyword_And_Collect_Garbage    Get_Ipv4_Topology_Count    session=${session}    topology=${topology}
     BuiltIn.Should_Be_Equal_As_Strings    ${actual_count}    ${expected_count}
 
 Check_Ipv4_Topology_Is_Empty
+    [Arguments]    ${session}=operational    ${topology}=example-ipv4-topology
     [Documentation]    Example_Ipv4_Topology has to give status 200 with zero prefixes.
     ...
     ...    Functional suites should use a more strict Keyword which tests for the whole JSON structure.
-    Check_Ipv4_Topology_Count    0
+    Check_Ipv4_Topology_Count    0    session=${session}    topology=${topology}
 
 Wait_For_Ipv4_Topology_Prefixes_To_Become_Stable
-    [Arguments]    ${timeout}=60s    ${period}=5s    ${repetitions}=1    ${excluded_count}=-1
+    [Arguments]    ${timeout}=60s    ${period}=5s    ${repetitions}=1    ${excluded_count}=-1    ${session}=operational    ${topology}=example-ipv4-topology
     [Documentation]    Each ${period} get prefix count. After ${repetitions} of stable different from ${excluded_count} within ${timeout}, Return validator output. Fail early on getter error.
     # This is very similar to ChangeCounter keyword, but attempt to extract common code would increase overall code size.
+    ${getter} =    ScalarClosures.Closure_From_Keyword_And_Arguments    Get_Ipv4_Topology_Count    session=${session}    topology=${topology}
     ${validator} =    ScalarClosures.Closure_From_Keyword_And_Arguments    WaitUtils.Excluding_Stability_Safe_Stateful_Validator_As_Keyword    state_holder    data_holder    excluded_value=${excluded_count}
-    ${result} =    WaitUtils.Wait_For_Getter_Error_Or_Safe_Stateful_Validator_Consecutive_Success    timeout=${timeout}    period=${period}    count=${repetitions}    getter=${PrefixCounting__getter}    safe_validator=${validator}
+    ${result} =    WaitUtils.Wait_For_Getter_Error_Or_Safe_Stateful_Validator_Consecutive_Success    timeout=${timeout}    period=${period}    count=${repetitions}    getter=${getter}    safe_validator=${validator}
     ...    initial_state=${excluded_count}
     [Return]    ${result}