Adds test suits for Cluster HA Leader follower failover
[integration/test.git] / csit / libraries / ClusterKeywords.robot
index 72862959e0149c7ea982ecf945392a012eca03af..1f8ab31c540be6c408b64642960c9038a6556c76 100644 (file)
@@ -25,7 +25,7 @@ Create Controller Sessions
     ${NUM_ODL_SYSTEM}=    Convert to Integer    ${NUM_ODL_SYSTEM}
     : FOR    ${i}    IN RANGE    ${NUM_ODL_SYSTEM}
     \    Log    Create Session ${ODL_SYSTEM_${i+1}_IP}
-    \    Create Session    controller${i+1}    http://${ODL_SYSTEM_${i+1}_IP}:${RESTCONFPORT}    auth=${AUTH}
+    \    RequestsLibrary.Create Session    controller${i+1}    http://${ODL_SYSTEM_${i+1}_IP}:${RESTCONFPORT}    auth=${AUTH}
 
 Get Cluster Shard Status
     [Arguments]    ${controller_index_list}    ${shard_type}    ${shard}
@@ -38,9 +38,9 @@ Get Cluster Shard Status
     ${leader}=    Set Variable    0
     ${follower_list}=    Create List
     : FOR    ${i}    IN    @{controller_index_list}
-    \    ${data}=    Get Data From URI    controller${i}    ${jolokia_read}:Category=Shards,name=member-${i}-shard-${shard}-${shard_type},type=${type}
+    \    ${data}=    Utils.Get Data From URI    controller${i}    ${jolokia_read}:Category=Shards,name=member-${i}-shard-${shard}-${shard_type},type=${type}
     \    Log    ${data}
-    \    ${json}=    To Json    ${data}
+    \    ${json}=    RequestsLibrary.To Json    ${data}
     \    ${status}=    Get From Dictionary    &{json}[value]    RaftState
     \    Log    Controller ${ODL_SYSTEM_${i}_IP} is ${status} for shard ${shard}
     \    Run Keyword If    '${status}' == 'Leader'    Set Test Variable    ${leader}    ${i}
@@ -49,23 +49,23 @@ Get Cluster Shard Status
     Length Should Be    ${follower_list}    ${lenght-1}    Not enough or too many Followers in shard ${shard_type} ${shard}
     [Return]    ${leader}    ${follower_list}
 
-Get Cluster Entity Owner Status
+Get Cluster Entity Owner
     [Arguments]    ${controller_index_list}    ${device_type}    ${device}
     [Documentation]    Checks Entity Owner status for a ${device} and returns owner index and list of candidates from a ${controller_index_list}.
-    ...    ${device_type} is openflow, ovsdb, etc...
+    ...    ${device_type} can be openflow, ovsdb, etc.
     ${length}=    Get Length    ${controller_index_list}
     ${candidates_list}=    Create List
-    ${data}=    Get Data From URI    controller@{controller_index_list}[0]    /restconf/operational/entity-owners:entity-owners
+    ${data}=    Utils.Get Data From URI    controller@{controller_index_list}[0]    /restconf/operational/entity-owners:entity-owners
     Log    ${data}
-    ${data}=    Replace String    ${data}    /general-entity:entity[general-entity:name='    ${EMPTY}
-    ${clear_data}=    Replace String    ${data}    ']    ${EMPTY}
-    Log    ${clear_data}
-    ${json}=    To Json    ${clear_data}
+    ${clear_data}=    Run Keyword If    '${device_type}' == 'openflow'    Extract OpenFlow Device Data    ${data}
+    ...    ELSE IF    '${device_type}' == 'ovsdb'    Extract Ovsdb Device Data    ${data}
+    ...    ELSE    Fail    Not recognized device type: ${device_type}
+    ${json}=    RequestsLibrary.To Json    ${clear_data}
     ${entity_type_list}=    Get From Dictionary    &{json}[entity-owners]    entity-type
     ${entity_type_index}=    Get Index From List Of Dictionaries    ${entity_type_list}    type    ${device_type}
     Should Not Be Equal    ${entity_type_index}    -1    No Entity Owner found for ${device_type}
     ${entity_list}=    Get From Dictionary    @{entity_type_list}[${entity_type_index}]    entity
-    ${entity_index}=    Get Index From List Of Dictionaries    ${entity_list}    id    ${device}
+    ${entity_index}=    Utils.Get Index From List Of Dictionaries    ${entity_list}    id    ${device}
     Should Not Be Equal    ${entity_index}    -1    Device ${device} not found in Entity Owner ${device_type}
     ${entity_owner}=    Get From Dictionary    @{entity_list}[${entity_index}]    owner
     Should Not Be Empty    ${entity_owner}    No owner found for ${device}
@@ -77,63 +77,83 @@ Get Cluster Entity Owner Status
     : FOR    ${entity_candidate}    IN    @{entity_candidates_list}
     \    ${candidate}=    Replace String    &{entity_candidate}[name]    member-    ${EMPTY}
     \    ${candidate}=    Convert To Integer    ${candidate}
-    \    List Should Contain Value    ${controller_index_list}    ${candidate}    Candidate ${candidate} not exisiting in ${controller_index_list}
-    \    Run Keyword If    '${candidate}' != '${owner}'    Append To List    ${candidates_list}    ${candidate}
+    \    Append To List    ${candidates_list}    ${candidate}
+    List Should Contain Sublist    ${candidates_list}    ${controller_index_list}    Candidates are missing in ${candidates_list}
+    Remove Values From List    ${candidates_list}    ${owner}
     [Return]    ${owner}    ${candidates_list}
 
+Extract OpenFlow Device Data
+    [Arguments]    ${data}
+    [Documentation]    Remove superfluous OpenFlow device data from Entity Owner printout.
+    ${clear_data}=    Replace String    ${data}    /general-entity:entity[general-entity:name='    ${EMPTY}
+    ${clear_data}=    Replace String    ${clear_data}    ']    ${EMPTY}
+    Log    ${clear_data}
+    [Return]    ${clear_data}
+
+Extract Ovsdb Device Data
+    [Arguments]    ${data}
+    [Documentation]    Remove superfluous OVSDB device data from Entity Owner printout.
+    ${clear_data}=    Replace String    ${data}    /network-topology:network-topology/network-topology:topology[network-topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-id='    ${EMPTY}
+    ${clear_data}=    Replace String    ${clear_data}    ']    ${EMPTY}
+    Log    ${clear_data}
+    [Return]    ${clear_data}
+
 Check Item Occurrence At URI In Cluster
-    [Arguments]    ${controller_index_list}    ${dictionary_item_occurrence}    ${uri}    ${headers}=${HEADERS}
+    [Arguments]    ${controller_index_list}    ${dictionary_item_occurrence}    ${uri}
     [Documentation]    Send a GET with the supplied ${uri} to all cluster instances in ${controller_index_list}
     ...    and check for occurrences of items expressed in a dictionary ${dictionary_item_occurrence}.
     : FOR    ${i}    IN    @{controller_index_list}
-    \    ${data}    Get Data From URI    controller${i}    ${uri}    ${headers}
+    \    ${data}    Utils.Get Data From URI    controller${i}    ${uri}
     \    Log    ${data}
-    \    Check Item Occurrence    ${data}    ${dictionary_item_occurrence}
+    \    Utils.Check Item Occurrence    ${data}    ${dictionary_item_occurrence}
 
 Put And Check At URI In Cluster
-    [Arguments]    ${controller_index_list}    ${controller_index}    ${uri}    ${body}    ${headers}=${HEADERS}
-    [Documentation]    Send a PUT with the supplied ${uri} and ${body} to a ${controller_index}
+    [Arguments]    ${controller_index_list}    ${controller_index}    ${uri}    ${body}
+    [Documentation]    Send a PUT with the supplied ${uri} and ${body} (json string) to a ${controller_index}
     ...    and check the data is replicated in all instances in ${controller_index_list}.
     ${expected_body}=    Hsf Json    ${body}
-    ${resp}    RequestsLibrary.Put Request    controller${controller_index}    ${uri}    ${body}    ${headers}
+    Log    ${body}
+    ${resp}    RequestsLibrary.Put Request    controller${controller_index}    ${uri}    data=${body}    headers=${HEADERS_YANG_JSON}
+    Log    ${resp.content}
+    Log    ${resp.status_code}
     ${status_code}=    Convert To String    ${resp.status_code}
     Should Match Regexp    ${status_code}    20(0|1)
     : FOR    ${i}    IN    @{controller_index_list}
     \    ${data}    Wait Until Keyword Succeeds    5s    1s    Get Data From URI    controller${i}
-    \    ...    ${uri}    ${headers}
+    \    ...    ${uri}
     \    Log    ${data}
     \    ${received_body}    Hsf Json    ${data}
     \    Should Be Equal    ${expected_body}    ${received_body}
 
 Delete And Check At URI In Cluster
-    [Arguments]    ${controller_index_list}    ${controller_index}    ${uri}    ${headers}=${HEADERS}
+    [Arguments]    ${controller_index_list}    ${controller_index}    ${uri}
     [Documentation]    Send a DELETE with the supplied ${uri} to a ${controller_index}
     ...    and check the data is removed from all instances in ${controller_index_list}.
-    ${resp}    RequestsLibrary.Delete Request    controller${controller_index}    ${uri}    ${headers}
+    ${resp}    RequestsLibrary.Delete Request    controller${controller_index}    ${uri}
     Should Be Equal As Strings    ${resp.status_code}    200
     : FOR    ${i}    IN    @{controller_index_list}
     \    Wait Until Keyword Succeeds    5s    1s    No Content From URI    controller${i}    ${uri}
-    \    ...    ${headers}
 
 Kill Multiple Controllers
     [Arguments]    @{controller_index_list}
     [Documentation]    Give this keyword a scalar or list of controllers to be stopped.
     : FOR    ${i}    IN    @{controller_index_list}
-    \    ${output}=    Run Command On Controller    ${ODL_SYSTEM_${i}_IP}    ps axf | grep karaf | grep -v grep | awk '{print \"kill -9 \" $1}' | sh
-    \    Controller Down Check    ${ODL_SYSTEM_${i}_IP}
+    \    ${output}=    Utils.Run Command On Controller    ${ODL_SYSTEM_${i}_IP}    ps axf | grep karaf | grep -v grep | awk '{print \"kill -9 \" $1}' | sh
+    \    ClusterKeywords.Controller Down Check    ${ODL_SYSTEM_${i}_IP}
 
 Start Multiple Controllers
     [Arguments]    ${timeout}    @{controller_index_list}
     [Documentation]    Give this keyword a scalar or list of controllers to be started.
     : FOR    ${i}    IN    @{controller_index_list}
-    \    ${output}=    Run Command On Controller    ${ODL_SYSTEM_${i}_IP}    ${WORKSPACE}/${BUNDLEFOLDER}/bin/start
-    \    Wait For Controller Sync    ${timeout}    ${ODL_SYSTEM_${i}_IP}
+    \    ${output}=    Utils.Run Command On Controller    ${ODL_SYSTEM_${i}_IP}    ${WORKSPACE}/${BUNDLEFOLDER}/bin/start
+    : FOR    ${i}    IN    @{controller_index_list}
+    \    ClusterKeywords.Wait For Controller Sync    ${timeout}    ${ODL_SYSTEM_${i}_IP}
 
 Get Controller List
     [Arguments]    ${exclude_controller}=${EMPTY}
     [Documentation]    Creates a list of all controllers minus any excluded controller.
     Log    ${exclude_controller}
-    @{searchlist}    Create List    ${CONTROLLER}    ${CONTROLLER1}    ${CONTROLLER2}
+    @{searchlist}    Create List    ${ODL_SYSTEM_IP}    ${ODL_SYSTEM_2_IP}    ${ODL_SYSTEM_3_IP}
     Remove Values From List    ${searchlist}    ${exclude_controller}
     Log    ${searchlist}
     [Return]    ${searchlist}