Upgrade RF syntax for v3.2 compatibility
[integration/test.git] / csit / libraries / FlowLib.robot
index 070cc00b80eb28057db900c0c173f34a57aa8a16..143b06f46d3235a8040b2cb8a19e4f655c1eb44e 100644 (file)
 Documentation     Keywords used to create/modify flow objects. The object is defined in the
 ...               corresponding FlowLib.py library and contains pertinent fields and methods (e.g.,
 ...               cookie and barrier fields, string formatted xml that can be used to push to
-...               controller)
+...               controller). TODO: Remove hard dependency on controller HTTP "session".
 Library           XML
+Library           String
 Library           RequestsLibrary
-Library           ./FlowLib.py
-Library           ./XmlComparator.py
-Library           ./Common.py
+Library           ScaleClient.py
+Library           FlowLib.py
+Library           XmlComparator.py
+Library           Common.py
 Variables         ../variables/Variables.py
 
-*** Variables ***
-
 *** Keywords ***
+Check No Switches In Inventory
+    [Arguments]    ${switches}
+    [Documentation]    Check no switch is in inventory
+    ${resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_NODES_API}
+    Log    ${resp.content}
+    FOR    ${switch}    IN RANGE    1    ${switches+1}
+        Should Not Contain    ${resp.content}    "openflow:${switch}"
+    END
+
+Check No Switches In Topology
+    [Arguments]    ${switches}
+    [Documentation]    Check no switch is in topology
+    ${resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_TOPO_API}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    FOR    ${switch}    IN RANGE    1    ${switches+1}
+        Should Not Contain    ${resp.content}    openflow:${switch}
+    END
+
+Check Switches In Inventory
+    [Arguments]    ${switches}
+    [Documentation]    Check all switches and stats in operational inventory
+    FOR    ${switch}    IN RANGE    1    ${switches+1}
+        ${resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_NODES_API}/node/openflow:${switch}
+        Log    ${resp.content}
+        Should Be Equal As Strings    ${resp.status_code}    200
+        Should Contain    ${resp.content}    flow-capable-node-connector-statistics
+        Should Contain    ${resp.content}    flow-table-statistics
+    END
+
+Check Switches In Topology
+    [Arguments]    ${switches}
+    [Documentation]    Check switches are in the topology.
+    ${resp}=    RequestsLibrary.Get Request    session    ${OPERATIONAL_TOPO_API}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${count}=    Get Count    ${resp.content}    "node-id":"openflow:
+    BuiltIn.Should Be Equal As Numbers    ${count}    ${switches}
+
+Check Number Of Links
+    [Arguments]    ${links}
+    [Documentation]    Check number of links in the topolgy.
+    ${resp}=    RequestsLibrary.Get Request    session    ${OPERATIONAL_TOPO_API}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${count}=    Get Count    ${resp.content}    "link-id":"openflow:
+    Should Be Equal As Integers    ${count}    ${links}
+
+Check Linear Topology
+    [Arguments]    ${switches}
+    [Documentation]    Check Linear topology.
+    ${resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_TOPO_API}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    FOR    ${switch}    IN RANGE    1    ${switches+1}
+        Should Contain    ${resp.content}    "node-id":"openflow:${switch}"
+        Should Contain    ${resp.content}    "tp-id":"openflow:${switch}:1"
+        Should Contain    ${resp.content}    "tp-id":"openflow:${switch}:2"
+        Should Contain    ${resp.content}    "source-tp":"openflow:${switch}:2"
+        Should Contain    ${resp.content}    "dest-tp":"openflow:${switch}:2"
+        ${edge}    Evaluate    ${switch}==1 or ${switch}==${switches}
+        Run Keyword Unless    ${edge}    Should Contain    ${resp.content}    "tp-id":"openflow:${switch}:3"
+        Run Keyword Unless    ${edge}    Should Contain    ${resp.content}    "source-tp":"openflow:${switch}:3"
+        Run Keyword Unless    ${edge}    Should Contain    ${resp.content}    "dest-tp":"openflow:${switch}:3"
+    END
+
+Check Flows Operational Datastore
+    [Arguments]    ${flow_count}    ${controller_ip}=${ODL_SYSTEM_IP}
+    [Documentation]    Check if number of Operational Flows on member of given index is equal to ${flow_count}.
+    ${sw}    ${reported_flow}    ${found_flow}=    ScaleClient.Flow Stats Collected    controller=${controller_ip}
+    Should_Be_Equal_As_Numbers    ${flow_count}    ${found_flow}
+
+Check Number Of Flows
+    [Arguments]    ${flows}
+    [Documentation]    Check number of flows in the inventory.
+    ${resp}=    RequestsLibrary.Get Request    session    ${OPERATIONAL_NODES_API}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${count}=    Get Count    ${resp.content}    "priority"
+    Should Be Equal As Integers    ${count}    ${flows}
+
+Check Number Of Groups
+    [Arguments]    ${groups}
+    [Documentation]    Check number of groups in the inventory.
+    ${resp}=    RequestsLibrary.Get Request    session    ${OPERATIONAL_NODES_API}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${group_count}=    Get Count    ${resp.content}    "group-type"
+    Should Be Equal As Integers    ${group_count}    ${groups}
+
 Check Flow Stats Are Available
     [Arguments]    ${node_id}    ${flows}
     [Documentation]    A GET on the /node/${node_id} inventory API is made and flow stats string is checked for existence.
@@ -21,6 +111,38 @@ Check Flow Stats Are Available
     Should Be Equal As Strings    ${resp.status_code}    200
     Should Contain X Times    ${resp.content}    priority    ${flows}
 
+Check Number Of Hosts
+    [Arguments]    ${hosts}
+    [Documentation]    Check number of hosts in topology
+    ${resp}=    RequestsLibrary.Get Request    session    ${OPERATIONAL_TOPO_API}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${count}=    Get Count    ${resp.content}    "node-id":"host:
+    Should Be Equal As Integers    ${count}    ${hosts}
+
+Check No Hosts
+    [Documentation]    Check if all hosts are deleted from inventory
+    ${resp}=    RequestsLibrary.Get Request    session    ${OPERATIONAL_TOPO_API}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    Should Not Contain    ${resp.content}    "node-id":"host:
+
+Add Table Miss Flows
+    [Arguments]    ${switches}
+    [Documentation]    Add table miss flows to switches.
+    ${switches}=    Convert To Integer    ${switches}
+    ${data}=    OperatingSystem.Get File    ${CURDIR}/../variables/openflowplugin/table_miss_flow.json
+    FOR    ${switch}    IN RANGE    1    ${switches+1}
+        TemplatedRequests.Put As Json To Uri    ${CONFIG_NODES_API}/node/openflow:${switch}/table/0/flow/default    ${data}    session
+    END
+
+Check Table Miss Flows
+    [Arguments]    ${switches}
+    [Documentation]    Check table miss flows in switches.
+    ${switches}=    Convert To Integer    ${switches}
+    FOR    ${switch}    IN RANGE    1    ${switches+1}
+        TemplatedRequests.Get As Json From Uri    ${OPERATIONAL_NODES_API}/node/openflow:${switch}/table/0/flow/default    session
+    END
+
 Create Inventory Flow
     [Documentation]    Calls FlowLib.Make_Inventory_Flow function and initializes and sanitizes
     ...    the basic flow elements that can be given to flow:inventory
@@ -177,8 +299,9 @@ Verify Flow On Mininet Switch
     Sleep    1
     Write    dpctl dump-flows -O OpenFlow13
     ${switchoutput}    Read Until    >
-    : FOR    ${flowElement}    IN    @{flow_elements}
-    \    Should Contain    ${switchoutput}    ${flowElement}
+    FOR    ${flowElement}    IN    @{flow_elements}
+        Should Contain    ${switchoutput}    ${flowElement}
+    END
 
 Remove Group From Controller And Verify
     [Arguments]    ${node_id}    ${group_id}
@@ -208,8 +331,9 @@ Verify Flow Does Not Exist On Mininet Switch
     Sleep    1
     Write    dpctl dump-flows -O OpenFlow13
     ${switchoutput}    Read Until    >
-    : FOR    ${flowElement}    IN    @{flow_elements}
-    \    Should Not Contain    ${switchoutput}    ${flowElement}
+    FOR    ${flowElement}    IN    @{flow_elements}
+        Should Not Contain    ${switchoutput}    ${flowElement}
+    END
 
 Remove Default Flows
     [Arguments]    ${node_id}
@@ -397,3 +521,11 @@ Delete Flow Via Restconf
     Log    ${resp.content}
     ${msg}=    Set Variable    Delete flow for ${CONFIG_NODES_API}/node/openflow:${node_id}/table/${table_id}/flow/${flow_id} failed, http response ${resp.status_code} received.
     Should Be Equal As Strings    ${resp.status_code}    200    msg=${msg}
+
+Get Flow Id
+    [Arguments]    ${dpnid}    ${table_id}    ${flow_element}
+    [Documentation]    This verifies specific flow-id for particular table-id matching from the flow element
+    ${resp} =    RequestsLibrary.Get Request    session    ${CONFIG_NODES_API}/node/openflow:${dpnid}/table/${table_id}
+    BuiltIn.Log    ${resp.content}
+    @{flow_id} =    String.Get Regexp Matches    ${resp.content}    id\":\"(\\d+${flow_element})    1
+    [Return]    @{flow_id}[0]