New L2Switch suite to catch standing issues
[integration/test.git] / test / csit / libraries / Utils.txt
index d62daf0389b4850694eab5f4c0cab3ac3e54bebc..199c58e00c55b8e9b4eaaef2719d1cfd42ce5875 100644 (file)
@@ -1,30 +1,34 @@
 *** Settings ***
 Library           SSHLibrary
+Library           ./UtilLibrary.py
+Resource          KarafKeywords.txt
 
 *** Variables ***
 ${start}          sudo mn --controller=remote,ip=${CONTROLLER} --topo tree,1 --switch ovsk,protocols=OpenFlow13
+${linux_prompt}    >
 
 *** Keywords ***
 Start Suite
     [Documentation]    Basic setup/cleanup work that can be done safely before any system
     ...    is run.
     Log    Start the test on the base edition
-    Open Connection    ${MININET}    prompt=>    timeout=30s
+    ${mininet_conn_id}=    Open Connection    ${MININET}    prompt=${linux_prompt}    timeout=30s
+    Set Suite Variable    ${mininet_conn_id}
     Login With Public Key    ${MININET_USER}    ${USER_HOME}/.ssh/id_rsa    any
-    Write    sudo ovs-vsctl set-manager ptcp:6644
-    Write    sudo mn -c
-    Read Until    >
+    Execute Command    sudo ovs-vsctl set-manager ptcp:6644
+    Execute Command    sudo mn -c
     Write    ${start}
     Read Until    mininet>
-    Sleep   6
+    Sleep    6
 
 Stop Suite
     [Documentation]    Cleanup/Shutdown work that should be done at the completion of all
     ...    tests
     Log    Stop the test on the base edition
+    Switch Connection    ${mininet_conn_id}
     Read
     Write    exit
-    Read Until    >
+    Read Until    ${linux_prompt}
     Close Connection
 
 Ensure All Nodes Are In Response
@@ -34,7 +38,7 @@ Ensure All Nodes Are In Response
     ...    specific but any list of strings can be given in ${node_list}. Refactoring of this
     ...    to make it more generic should be done. (see keyword "Check For Elements At URI")
     : FOR    ${node}    IN    @{node_list}
-    \    ${resp}    Get    session    ${URI}
+    \    ${resp}    RequestsLibrary.Get    session    ${URI}
     \    Should Be Equal As Strings    ${resp.status_code}    200
     \    Should Contain    ${resp.content}    ${node}
 
@@ -42,7 +46,7 @@ Check Nodes Stats
     [Arguments]    ${node}
     [Documentation]    A GET on the /node/${node} API is made and specific flow stat
     ...    strings are checked for existence.
-    ${resp}    Get    session    ${REST_CONTEXT}/node/${node}
+    ${resp}    RequestsLibrary.Get    session    ${OPERATIONAL_NODES_API}/node/${node}
     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
@@ -52,7 +56,7 @@ Check That Port Count Is Ok
     [Documentation]    A GET on the /port API is made and the specified port ${count} is
     ...    verified. A more generic Keyword "Check For Specific Number Of Elements At URI"
     ...    also does this work and further consolidation should be done.
-    ${resp}    Get    session    ${REST_CONTEXT}/${CONTAINER}/port
+    ${resp}    RequestsLibrary.Get    session    ${OPERATIONAL_NODES_API}/${CONTAINER}/port
     Log    ${resp.content}
     Should Be Equal As Strings    ${resp.status_code}    200
     Should Contain X Times    ${resp.content}    ${node}    ${count}
@@ -61,7 +65,7 @@ Check For Specific Number Of Elements At URI
     [Arguments]    ${uri}    ${element}    ${expected_count}
     [Documentation]    A GET is made to the specified ${URI} and the specific count of a
     ...    given element is done (as supplied by ${element} and ${expected_count})
-    ${resp}    Get    session    ${uri}
+    ${resp}    RequestsLibrary.Get    session    ${uri}
     Log    ${resp.content}
     Should Be Equal As Strings    ${resp.status_code}    200
     Should Contain X Times    ${resp.content}    ${element}    ${expected_count}
@@ -70,7 +74,7 @@ Check For Elements At URI
     [Arguments]    ${uri}    ${elements}
     [Documentation]    A GET is made at the supplied ${URI} and every item in the list of
     ...    ${elements} is verified to exist in the response
-    ${resp}    Get    session    ${uri}
+    ${resp}    RequestsLibrary.Get    session    ${uri}
     Log    ${resp.content}
     Should Be Equal As Strings    ${resp.status_code}    200
     : FOR    ${i}    IN    @{elements}
@@ -80,8 +84,54 @@ Check For Elements Not At URI
     [Arguments]    ${uri}    ${elements}
     [Documentation]    A GET is made at the supplied ${URI} and every item in the list of
     ...    ${elements} is verified to NOT exist in the response
-    ${resp}    Get    session    ${uri}
+    ${resp}    RequestsLibrary.Get    session    ${uri}
     Log    ${resp.content}
     Should Be Equal As Strings    ${resp.status_code}    200
     : FOR    ${i}    IN    @{elements}
     \    Should Not Contain    ${resp.content}    ${i}
+
+Clean Mininet System
+    [Arguments]     ${mininet_system}=${MININET}
+    Run Command On Remote System    ${mininet_system}   sudo mn -c
+    Run Command On Remote System    ${mininet_system}   sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh
+
+Extract Value From Content
+    [Arguments]    ${content}    ${index}    ${strip}=nostrip
+    [Documentation]    Will take the given response content and return the value at the given index as a string
+    ${value}=    Get Json Value    ${content}    ${index}
+    ${value}=    Convert To String    ${value}
+    ${value}=    Run Keyword If    '${strip}' == 'strip'    Strip Quotes    ${value}
+    [Return]    ${value}
+
+Strip Quotes
+    [Arguments]    ${string_to_strip}
+    [Documentation]    Will strip ALL quotes from given string and return the new string
+    ${string_to_return}=    Replace String    ${string_to_strip}    "    \    count=-1
+    [Return]    ${string_to_return}
+
+Run Command On Remote System
+    [Arguments]    ${remote_system}    ${cmd}    ${user}=${MININET_USER}    ${prompt}=${LINUX_PROMPT}    ${prompt_timeout}=30s
+    [Documentation]    Reduces the common work of running a command on a remote system to a single higher level robot keyword,
+    ...    taking care to log in with a public key and. The command given is written and the output returned. No test conditions
+    ...    are checked.
+    Log    Attempting to execute ${cmd} on ${remote_system}
+    ${conn_id}=    Open Connection    ${remote_system}    prompt=${prompt}    timeout=${prompt_timeout}
+    Login With Public Key    ${user}    ${USER_HOME}/.ssh/id_rsa    any
+    Write    ${cmd}
+    ${output}=    Read Until    ${linux_prompt}
+    Close Connection
+    [Return]    ${output}
+
+Verify File Exists On Remote System
+    [Arguments]    ${remote_system}    ${file}    ${user}=${MININET_USER}    ${prompt}=${LINUX_PROMPT}    ${prompt_timeout}=5s
+    [Documentation]    Will create connection with public key and will PASS if the given ${file} exists, otherwise will FAIL
+    ${conn_id}=    Open Connection    ${remote_system}    prompt=${prompt}    timeout=${prompt_timeout}
+    Login With Public Key    ${user}    ${USER_HOME}/.ssh/id_rsa    any
+    SSHLibrary.File Should Exist    ${file}
+    Close Connection
+
+Verify Controller Is Not Dead
+    [Arguments]    ${controller_ip}=${CONTROLLER}
+    [Documentation]    Will execute any tests to verify the controller is not dead. Some checks are
+    ...    Out Of Memory Execptions.
+    Check Karaf Log File Does Not Have Messages    ${controller_ip}    java.lang.OutOfMemoryError