Migrate Get Requests invocations(libraries)
[integration/test.git] / csit / libraries / SxpLib.robot
index 9ee9157c892c3002f0b9013f954f907a9277b5c6..7a3a431029f541fdff86c61a58f5b6e3b7d18dc7 100644 (file)
 *** Settings ***
-Documentation     Library containing Keywords used for SXP testing
-Library           RequestsLibrary
-Library           SSHLibrary
-Library           String
-Library           ./Sxp.py
-Resource          KarafKeywords.robot
-Variables         ../variables/Variables.py
+Documentation       Library containing Keywords used for SXP testing
+
+Library             Collections
+Library             RequestsLibrary
+Library             ./Sxp.py
+Resource            KarafKeywords.robot
+Resource            TemplatedRequests.robot
+Resource            Utils.robot
+Resource            ../variables/Variables.robot
+
 
 *** Variables ***
-${REST_CONTEXT}    /restconf/operations/sxp-controller
+${REST_CONTEXT}     /restconf/operations/sxp-controller
+
 
 *** Keywords ***
+Post To Controller
+    [Documentation]    Post request to Controller and checks response
+    [Arguments]    ${session}    ${path}    ${data}    ${rest_context}=${REST_CONTEXT}
+    ${resp} =    RequestsLibrary.Post Request
+    ...    ${session}
+    ...    ${rest_context}:${path}
+    ...    data=${data}
+    ...    headers=${HEADERS_XML}
+    Log    ${resp.text}
+    Log    ${session}
+    Log    ${path}
+    Log    ${data}
+    BuiltIn.Should be Equal As Strings    ${resp.status_code}    200
+    ${content} =    BuiltIn.Evaluate    json.loads('''${resp.text}''')    json
+    ${output} =    collections.Get From Dictionary    ${content}    output
+    ${result} =    collections.Get From Dictionary    ${output}    result
+    BuiltIn.Should Be True    ${result}    RPC result is False
+
+Add Node
+    [Documentation]    Add node via RPC to ODL
+    [Arguments]    ${node}    ${password}=${EMPTY}    ${version}=version4    ${port}=64999    ${session}=session    ${ip}=${node}
+    ...    ${ssl_stores}=${EMPTY}    ${retry_open_timer}=1
+    ${data} =    Sxp.Add Node Xml    ${node}    ${port}    ${password}    ${version}    ${ip}
+    ...    keystores=${ssl_stores}    retry_open_timer=${retry_open_timer}
+    Post To Controller    ${session}    add-node    ${data}
+
+Delete Node
+    [Documentation]    Delete connection via RPC from node
+    [Arguments]    ${node}    ${session}=session
+    ${data} =    Sxp.Delete Node Xml    ${node}
+    Post To Controller    ${session}    delete-node    ${data}
+
 Add Connection
-    [Arguments]    ${version}    ${mode}    ${ip}    ${port}   ${node}=127.0.0.1    ${password}=none    ${session}=session
-    [Documentation]    Add connection via RCP to node
-    ${DATA}    Add Connection Xml   ${version}    ${mode}    ${ip}    ${port}   ${node}     ${password}
-    ${resp}    RequestsLibrary.Post    ${session}    ${REST_CONTEXT}:add-connection    data=${DATA}    headers=${HEADERS_XML}
-    Should be Equal As Strings    ${resp.status_code}    200
+    [Documentation]    Add connection via RPC to node
+    [Arguments]    ${version}    ${mode}    ${ip}    ${port}    ${node}=127.0.0.1    ${password}=${EMPTY}
+    ...    ${session}=session    ${domain}=global    ${security_mode}=${EMPTY}
+    ${data} =    Sxp.Add Connection Xml    ${version}    ${mode}    ${ip}    ${port}    ${node}
+    ...    ${password}    ${domain}    security_mode=${security_mode}
+    Post To Controller    ${session}    add-connection    ${data}
 
 Get Connections
-    [Arguments]   ${node}=127.0.0.1    ${session}=session
-    [Documentation]    Gets all connections vie RPC from node
-    ${DATA}    Get Connections From Node Xml   ${node}
-    ${resp}    RequestsLibrary.Post    ${session}    ${REST_CONTEXT}:get-connections    data=${DATA}    headers=${HEADERS_XML}
-    Should be Equal As Strings    ${resp.status_code}    200
-    [Return]    ${resp.content}
+    [Documentation]    Gets all connections via RPC from node
+    [Arguments]    ${node}=127.0.0.1    ${session}=session    ${domain}=global
+    ${data} =    Sxp.Get Connections From Node Xml    ${node}    ${domain}
+    ${resp} =    RequestsLibrary.Post Request
+    ...    ${session}
+    ...    ${REST_CONTEXT}:get-connections
+    ...    data=${data}
+    ...    headers=${HEADERS_XML}
+    BuiltIn.Should be Equal As Strings    ${resp.status_code}    200
+    RETURN    ${resp.text}
 
 Delete Connections
-    [Arguments]    ${ip}    ${port}      ${node}=127.0.0.1     ${session}=session
     [Documentation]    Delete connection via RPC from node
-    ${DATA}    Delete Connections Xml       ${ip}    ${port}    ${node}
-    ${resp}    RequestsLibrary.Post    ${session}    ${REST_CONTEXT}:delete-connection    data=${DATA}    headers=${HEADERS_XML}
-    Should be Equal As Strings    ${resp.status_code}    200
+    [Arguments]    ${ip}    ${port}    ${node}=127.0.0.1    ${session}=session    ${domain}=global
+    ${data} =    Sxp.Delete Connections Xml    ${ip}    ${port}    ${node}    ${domain}
+    Post To Controller    ${session}    delete-connection    ${data}
 
 Clean Connections
-    [Arguments]     ${node}=127.0.0.1    ${session}=session
-    [Documentation]     Delete all connections via RPC from node
-    ${resp}     Get Connections     ${node}    ${session}
-    @{connections}  Parse Connections   ${resp}
-    :FOR    ${connection}   IN  @{connections}
-    \   delete connections  ${connection['peer-address']}   ${connection['tcp-port']}   ${node}    ${session}
-
-Add Binding
-    [Arguments]    ${sgt}    ${prefix}      ${node}=127.0.0.1      ${session}=session
-    [Documentation]    Add binding via RPC to Master DB of node
-    ${DATA}    Add Entry Xml    ${sgt}    ${prefix}     ${node}
-    ${resp}    RequestsLibrary.Post    ${session}    ${REST_CONTEXT}:add-entry    data=${DATA}    headers=${HEADERS_XML}
-    Should be Equal As Strings    ${resp.status_code}    200
+    [Documentation]    Delete all connections via RPC from node
+    [Arguments]    ${node}=127.0.0.1    ${session}=session    ${domain}=global
+    ${resp} =    Get Connections    ${node}    ${session}    ${domain}
+    @{connections} =    Sxp.Parse Connections    ${resp}
+    FOR    ${connection}    IN    @{connections}
+        Delete Connections
+        ...    ${connection['peer-address']}
+        ...    ${connection['tcp-port']}
+        ...    ${node}
+        ...    ${session}
+        ...    ${domain}
+    END
+
+Verify Connection
+    [Documentation]    Verify that connection is ON
+    [Arguments]    ${version}    ${mode}    ${ip}    ${port}=64999    ${node}=127.0.0.1    ${state}=on
+    ...    ${session}=session    ${domain}=global
+    ${resp} =    Get Connections    ${node}    ${session}    ${domain}
+    Should Contain Connection    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}
+
+Add Bindings
+    [Documentation]    Based on ODL version decide if bindings will be added with or without origin type (introduced in Fluorine)
+    [Arguments]    ${sgt}    ${prefixes}    ${node}=127.0.0.1    ${session}=session    ${domain}=global    ${origin}=LOCAL
+    Add Bindings Fluorine
+    ...    ${sgt}
+    ...    ${prefixes}
+    ...    ${node}
+    ...    ${session}
+    ...    ${domain}
+    ...    ${origin}
+
+Add Bindings Fluorine
+    [Documentation]    Add/Update one or more bindings with origin type via RPC to Master DB of the node
+    [Arguments]    ${sgt}    ${prefixes}    ${node}    ${session}    ${domain}    ${origin}
+    ${data} =    Sxp.Add Bindings Xml Fluorine    ${node}    ${domain}    ${sgt}    ${prefixes}    ${origin}
+    Post To Controller    ${session}    add-bindings    ${data}
 
 Get Bindings
-    [Arguments]       ${node}=127.0.0.1    ${session}=session
     [Documentation]    Gets all binding via RPC from Master DB of node
-    ${DATA}    Get Bindings From Node Xml   ${node}
-    ${resp}    RequestsLibrary.Post    ${session}    ${REST_CONTEXT}:get-node-bindings    data=${DATA}    headers=${HEADERS_XML}
-    Should be Equal As Strings    ${resp.status_code}    200
-    [Return]    ${resp.content}
+    [Arguments]    ${node}=127.0.0.1    ${session}=session    ${domain}=global    ${scope}=all
+    ${data} =    Sxp.Get Bindings From Node Xml    ${node}    ${scope}    ${domain}
+    ${resp} =    TemplatedRequests.Post_To_Uri
+    ...    ${REST_CONTEXT}:get-node-bindings
+    ...    data=${data}
+    ...    accept=${ACCEPT_JSON}
+    ...    content_type=${HEADERS_XML}
+    ...    session=${session}
+    RETURN    ${resp}
 
 Clean Bindings
-    [Arguments]       ${node}=127.0.0.1    ${session}=session
     [Documentation]    Delete all bindings via RPC from Master DB of node
-    ${resp}     Get Bindings Master Database    ${node}    ${session}
-    @{prefixes}     Parse Prefix Groups  ${resp}    local
-    :FOR    ${prefix}  IN  @{prefixes}
-    \       Clean Binding   ${prefix}       ${prefix['binding']}    ${node}    ${session}
-
-Clean Binding
-    [Documentation]     Used for nester FOR loop
-    [Arguments]     ${prefix}       ${bindings}     ${node}    ${session}
-    :FOR    ${binding}  IN  @{bindings}
-    \   Delete Binding  ${prefix['sgt']}     ${binding['ip-prefix']}     ${node}    ${session}
-
-Get Bindings Master Database
-    [Arguments]     ${node}=127.0.0.1    ${session}=session
-    [Documentation]     Gets content of Master DB from node
-    ${resp}    RequestsLibrary.Get    ${session}    /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/master-database/    headers=${HEADERS_XML}
-    Should be Equal As Strings    ${resp.status_code}    200
-    [Return]    ${resp.content}
-
-Update Binding
-    [Arguments]    ${sgtOld}    ${prefixOld}    ${sgtNew}    ${prefixNew}  ${node}=127.0.0.1     ${session}=session
-    [Documentation]    Updates value of binding via RPC in Master DB of node
-    ${DATA}    Update Binding Xml       ${sgtOld}    ${prefixOld}    ${sgtNew}    ${prefixNew}  ${node}
-    ${resp}    RequestsLibrary.Post    ${session}    ${REST_CONTEXT}:update-entry    data=${DATA}    headers=${HEADERS_XML}
-    Should be Equal As Strings    ${resp.status_code}    200
-
-Delete Binding
-    [Arguments]    ${sgt}    ${prefix}      ${node}=127.0.0.1       ${session}=session
-    [Documentation]    Delete binding via RPC from Master DB of node
-    ${DATA}    Delete Binding Xml        ${sgt}    ${prefix}    ${node}
-    ${resp}    RequestsLibrary.Post    ${session}    ${REST_CONTEXT}:delete-entry    data=${DATA}    headers=${HEADERS_XML}
-    Should be Equal As Strings    ${resp.status_code}    200
+    [Arguments]    ${node}=127.0.0.1    ${session}=session    ${domain}=global    ${scope}=local
+    ${resp} =    Get Bindings    ${node}    ${session}    ${domain}    ${scope}
+    @{bindings} =    Sxp.Parse Bindings    ${resp}
+    FOR    ${binding}    IN    @{bindings}
+        @{prefixes_list} =    collections.Get From Dictionary    ${binding}    ip-prefix
+        ${prefixes} =    BuiltIn.Catenate    SEPARATOR=,    @{prefixes_list}
+        Delete Bindings    ${binding['sgt']}    ${prefixes}    ${node}    ${domain}    ${session}
+    END
+
+Delete Bindings
+    [Documentation]    Delete one or more bindings via RPC from Master DB of node
+    [Arguments]    ${sgt}    ${prefixes}    ${node}=127.0.0.1    ${domain}=global    ${session}=session
+    ${data} =    Sxp.Delete Bindings Xml    ${node}    ${domain}    ${sgt}    ${prefixes}
+    Post To Controller    ${session}    delete-bindings    ${data}
+
+Add PeerGroup
+    [Documentation]    Adds new PeerGroup via RPC to Node
+    [Arguments]    ${name}    ${peers}=    ${node}=127.0.0.1    ${session}=session
+    ${data} =    Sxp.Add Peer Group Xml    ${name}    ${peers}    ${node}
+    Post To Controller    ${session}    add-peer-group    ${data}
+
+Delete Peer Group
+    [Documentation]    Delete PeerGroup via RPC from Node
+    [Arguments]    ${name}    ${node}=127.0.0.1    ${session}=session
+    ${data} =    Sxp.Delete Peer Group Xml    ${name}    ${node}
+    Post To Controller    ${session}    delete-peer-group    ${data}
+
+Get Peer Groups
+    [Documentation]    Gets all PeerGroups via RPC from node
+    [Arguments]    ${node}=127.0.0.1    ${session}=session
+    ${data} =    Sxp.Get Peer Groups From Node Xml    ${node}
+    ${resp} =    RequestsLibrary.Post Request
+    ...    ${session}
+    ...    ${REST_CONTEXT}:get-peer-groups
+    ...    data=${data}
+    ...    headers=${HEADERS_XML}
+    BuiltIn.Should be Equal As Strings    ${resp.status_code}    200
+    RETURN    ${resp.text}
+
+Clean Peer Groups
+    [Documentation]    Delete all PeerGroups via RPC from node
+    [Arguments]    ${node}=127.0.0.1    ${session}=session
+    ${resp} =    Get Peer Groups    ${node}    ${session}
+    @{prefixes} =    Sxp.Parse Peer Groups    ${resp}
+    FOR    ${group}    IN    @{prefixes}
+        Delete Peer Group    ${group['name']}    ${node}    ${session}
+    END
+
+Add Filter
+    [Documentation]    Add Filter via RPC from Node
+    [Arguments]    ${name}    ${type}    ${entries}    ${node}=127.0.0.1    ${session}=session    ${policy}=auto-update
+    ${data} =    Prepare Add/Update Filter Data    ${name}    ${type}    ${entries}    ${node}    ${policy}
+    Post To Controller    ${session}    add-filter    ${data}
+
+Update Filter
+    [Documentation]    Update Filter via RPC
+    [Arguments]    ${name}    ${type}    ${entries}    ${node}=127.0.0.1    ${session}=session    ${policy}=auto-update
+    ${data} =    Prepare Add/Update Filter Data    ${name}    ${type}    ${entries}    ${node}    ${policy}
+    Post To Controller    ${session}    update-filter    ${data}
+
+Prepare Add/Update Filter Data
+    [Documentation]    Prepare XML payload for add-filter and update-filter RPCs. Payloads for both RPCs are the same.
+    [Arguments]    ${name}    ${type}    ${entries}    ${node}=127.0.0.1    ${policy}=auto-update
+    ${data} =    Add Filter Xml
+    ...    ${name}
+    ...    ${type}
+    ...    ${entries}
+    ...    ${node}
+    ...    ${policy}
+    RETURN    ${data}
+
+Add Domain Filter
+    [Documentation]    Add Domain Filter via RPC from Node
+    [Arguments]    ${name}    ${domains}    ${entries}    ${node}=127.0.0.1    ${filter_name}=base-domain-filter    ${session}=session
+    ${data} =    Sxp.Add Domain Filter Xml    ${name}    ${domains}    ${entries}    ${node}    ${filter_name}
+    Post To Controller    ${session}    add-domain-filter    ${data}
+
+Delete Filter
+    [Documentation]    Delete Filter via RPC from Node
+    [Arguments]    ${name}    ${type}    ${node}=127.0.0.1    ${session}=session
+    ${data} =    Sxp.Delete Filter Xml    ${name}    ${type}    ${node}
+    Post To Controller    ${session}    delete-filter    ${data}
+
+Delete Domain Filter
+    [Documentation]    Delete Filter via RPC from Node
+    [Arguments]    ${name}    ${node}=127.0.0.1    ${filter_name}=base-domain-filter    ${session}=session
+    ${data} =    Sxp.Delete Domain Filter Xml    ${name}    ${node}    ${filter_name}
+    Post To Controller    ${session}    delete-domain-filter    ${data}
 
 Should Contain Binding
-    [Documentation]     Tests if data contains specified binding
-    [Arguments]    ${resp}    ${sgt}    ${prefix}   ${db_source}=local
-    ${out}  Find Binding        ${resp}    ${sgt}    ${prefix}      ${db_source}       add
-    Should Be True      ${out}  Doesn't have ${sgt} ${prefix}
-    ${out}  Find Binding        ${resp}    ${sgt}    ${prefix}      ${db_source}       delete
-    Should Not Be True      ${out}  Should't have ${sgt} ${prefix}
+    [Documentation]    Tests if data contains specified binding
+    [Arguments]    ${resp}    ${sgt}    ${prefix}
+    ${out} =    Sxp.Find Binding    ${resp}    ${sgt}    ${prefix}
+    BuiltIn.Should Be True    ${out}    Doesn't have ${sgt} ${prefix}
 
 Should Not Contain Binding
-    [Documentation]     Tests if data doesn't contains specified binding
-    [Arguments]    ${resp}    ${sgt}    ${prefix}   ${db_source}=local
-    ${out}  Find Binding        ${resp}    ${sgt}    ${prefix}      ${db_source}       add
-    Should Not Be True      ${out}  Should't have ${sgt} ${prefix}
-
-Should Contain Binding With Peer Sequence
-    [Documentation]     Tests if data contains specified binding with peer sequence
-    [Arguments]    ${resp}    ${sgt}    ${prefix}   ${source}   ${seq}=0    ${db_source}=local
-    ${out}  Find Binding With Peer Sequence     ${resp}    ${sgt}    ${prefix}      ${db_source}       add    ${source}   ${seq}
-    Should Be True      ${out}  Doesn't have ${sgt} ${prefix} ${source} ${seq} ${db_source}
-
-Should Not Contain Binding With Peer Sequence
-    [Documentation]     Tests if data doesn't contains specified binding with peer sequence
-    [Arguments]    ${resp}    ${sgt}    ${prefix}   ${source}   ${seq}=0    ${db_source}=local
-    ${out}  Find Binding With Peer Sequence        ${resp}    ${sgt}    ${prefix}      ${db_source}       add    ${source}   ${seq}
-    Should Not Be True      ${out}  Should't have ${sgt} ${prefix} ${source} ${seq} ${db_source}
+    [Documentation]    Tests if data doesn't contains specified binding
+    [Arguments]    ${resp}    ${sgt}    ${prefix}
+    ${out} =    Sxp.Find Binding    ${resp}    ${sgt}    ${prefix}
+    BuiltIn.Should Not Be True    ${out}    Should't have ${sgt} ${prefix}
 
 Should Contain Connection
-    [Documentation]     Test if data contains specified connection
-    [Arguments]    ${resp}    ${ip}    ${port}    ${mode}    ${version}     ${state}=none
-    ${out}  Find Connection     ${resp}     ${version}    ${mode}    ${ip}    ${port}   ${state}
-    Should Be True  ${out}  Doesn't have ${ip}:${port} ${mode} ${version}
+    [Documentation]    Test if data contains specified connection
+    [Arguments]    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}=none
+    ${out} =    Sxp.Find Connection    ${resp}    ${version}    ${mode}    ${ip}    ${port}
+    ...    ${state}
+    BuiltIn.Should Be True    ${out}    Doesn't have ${ip}:${port} ${mode} ${version} in state ${state}
 
 Should Not Contain Connection
-    [Documentation]     Test if data doesn't contains specified connection
-    [Arguments]    ${resp}    ${ip}    ${port}    ${mode}    ${version}     ${state}=none
-    ${out}  Find Connection     ${resp}     ${version}    ${mode}    ${ip}    ${port}   ${state}
-    Should Not Be True  ${out}  Shouldn't have ${ip}:${port} ${mode} ${version}
+    [Documentation]    Test if data doesn't contains specified connection
+    [Arguments]    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}=none
+    ${out} =    Sxp.Find Connection    ${resp}    ${version}    ${mode}    ${ip}    ${port}
+    ...    ${state}
+    BuiltIn.Should Not Be True    ${out}    Shouldn't have ${ip}:${port} ${mode} ${version}
+
+Bindings Should Contain
+    [Documentation]    Retrieves bindings and verifies they contain given binding
+    [Arguments]    ${sgt}    ${prefix}    ${domain}=global    ${scope}=all
+    ${resp} =    Get Bindings    domain=${domain}    scope=${scope}
+    Should Contain Binding    ${resp}    ${sgt}    ${prefix}
+
+Bindings Should Not Contain
+    [Documentation]    Retrieves bindings and verifies they do not contain given binding
+    [Arguments]    ${sgt}    ${prefix}    ${domain}=global    ${scope}=all
+    ${resp} =    Get Bindings    domain=${domain}    scope=${scope}
+    Should Not Contain Binding    ${resp}    ${sgt}    ${prefix}
+
+Connections Should Contain
+    [Documentation]    Retrieves connections and verifies they contain given connection
+    [Arguments]    ${ip}    ${port}    ${mode}    ${version}    ${state}=none
+    ${resp} =    Get Connections
+    Should Contain Connection    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}
+
+Connections Should Not Contain
+    [Documentation]    Retrieves connections and verifies they do not contain given connection
+    [Arguments]    ${ip}    ${port}    ${mode}    ${version}    ${state}=none
+    ${resp} =    Get Connections
+    Should Not Contain Connection    ${resp}    ${ip}    ${port}    ${mode}    ${version}    ${state}
+
+Setup Topology Complex
+    [Arguments]    ${version}=version4    ${password}=none
+    FOR    ${node}    IN RANGE    2    6
+        Add Connection    ${version}    both    127.0.0.1    64999    127.0.0.${node}
+        ...    ${password}
+        Add Connection    ${version}    both    127.0.0.${node}    64999    127.0.0.1
+        ...    ${password}
+        BuiltIn.Wait Until Keyword Succeeds    15    1    Verify Connection    ${version}    both
+        ...    127.0.0.${node}
+        Add Bindings    ${node}0    10.10.10.${node}0/32    127.0.0.${node}
+        Add Bindings    ${node}0    10.10.${node}0.0/24    127.0.0.${node}
+        Add Bindings    ${node}0    10.${node}0.0.0/16    127.0.0.${node}
+        Add Bindings    ${node}0    ${node}0.0.0.0/8    127.0.0.${node}
+    END
+    Add Bindings    10    10.10.10.10/32    127.0.0.1
+    Add Bindings    10    10.10.10.0/24    127.0.0.1
+    Add Bindings    10    10.10.0.0/16    127.0.0.1
+    Add Bindings    10    10.0.0.0/8    127.0.0.1
+
+Verify Snapshot Was Pushed
+    [Documentation]    Will succeed if the ${snapshot_string} is found in the karaf logs
+    [Arguments]    ${snapshot_string}=22-sxp-controller-one-node.xml
+    ${output} =    Utils.Run Command On Controller
+    ...    ${ODL_SYSTEM_IP}
+    ...    cat ${WORKSPACE}/${BUNDLEFOLDER}/data/log/karaf.log* | grep -c 'Successfully pushed configuration snapshot.*${snapshot_string}'
+    BuiltIn.Should Not Be Equal As Strings    ${output}    0
+
+Add Domain
+    [Documentation]    Based on ODL version decide if domain's bindings will be added with or without origin type (introduced in Fluorine)
+    [Arguments]    ${domain_name}    ${sgt}=None    ${prefixes}=None    ${origin}=LOCAL    ${node}=127.0.0.1    ${session}=session
+    Add Domain Fluorine
+    ...    ${domain_name}
+    ...    ${sgt}
+    ...    ${prefixes}
+    ...    ${origin}
+    ...    ${node}
+    ...    ${session}
+
+Add Domain Fluorine
+    [Documentation]    Add Domain with bindings (with origin) via RPC
+    [Arguments]    ${domain_name}    ${sgt}    ${prefixes}    ${origin}    ${node}    ${session}
+    ${data} =    Sxp.Add Domain Xml Fluorine    ${node}    ${domain_name}    ${sgt}    ${prefixes}    ${origin}
+    Post To Controller    ${session}    add-domain    ${data}
+
+Delete Domain
+    [Documentation]    Delete Domain via RPC
+    [Arguments]    ${domain_name}    ${node}=127.0.0.1    ${session}=session
+    ${data} =    Sxp.Delete Domain Xml    ${node}    ${domain_name}
+    Post To Controller    ${session}    delete-domain    ${data}
+
+Add Bindings Range
+    [Documentation]    Add Bindings to Node specified by range
+    [Arguments]    ${sgt}    ${start}    ${size}    ${node}=127.0.0.1
+    ${prefixes} =    Sxp.Prefix Range    ${start}    ${size}
+    Add Bindings    ${sgt}    ${prefixes}    ${node}
+
+Delete Bindings Range
+    [Documentation]    Delete Bindings to Node specified by range
+    [Arguments]    ${sgt}    ${start}    ${size}    ${node}=127.0.0.1
+    ${prefixes} =    Sxp.Prefix Range    ${start}    ${size}
+    Delete Bindings    ${sgt}    ${prefixes}    ${node}
+
+Check Binding Range
+    [Documentation]    Check if Node contains Bindings specified by range
+    [Arguments]    ${sgt}    ${start}    ${end}    ${node}=127.0.0.1
+    ${resp} =    Get Bindings    ${node}
+    FOR    ${num}    IN RANGE    ${start}    ${end}
+        ${ip} =    Sxp.Get Ip From Number    ${num}
+        Should Contain Binding    ${resp}    ${sgt}    ${ip}/32
+    END
+
+Check Binding Range Negative
+    [Documentation]    Check if Node does not contains Bindings specified by range
+    [Arguments]    ${sgt}    ${start}    ${end}    ${node}=127.0.0.1
+    ${resp} =    Get Bindings    ${node}
+    FOR    ${num}    IN RANGE    ${start}    ${end}
+        ${ip} =    Sxp.Get Ip From Number    ${num}
+        Should Not Contain Binding    ${resp}    ${sgt}    ${ip}/32
+    END
 
 Setup SXP Environment
-    [Documentation]    Create session to Controller
-    Verify Feature Is Installed     odl-sxp-all
-    Create Session    session    url=http://${CONTROLLER}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS_XML}
-    Wait Until Keyword Succeeds     15      3   Get Bindings Master Database
+    [Documentation]    Create session to Controller, ${node_range} parameter specifies number of localhost nodes to be created on ${ODL_SYSTEM_IP}.
+    [Arguments]    ${node_range}=1
+    RequestsLibrary.Create Session
+    ...    session
+    ...    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
+    ...    auth=${AUTH}
+    ...    timeout=${DEFAULT_TIMEOUT_HTTP}
+    ...    max_retries=0
+    FOR    ${num}    IN RANGE    1    ${node_range}+1
+        ${node} =    Sxp.Get Ip From Number    ${num}
+        Add Node    ${node}    retry_open_timer=${num}
+        BuiltIn.Wait Until Keyword Succeeds    20    1    Check Node Started    ${node}    system=${ODL_SYSTEM_IP}
+    END
+
+Check Node Started
+    [Documentation]    Verify that SxpNode has data writen to Operational datastore and is running
+    [Arguments]    ${node}    ${port}=64999    ${system}=${node}    ${session}=session    ${ip}=${node}
+    ${resp} =    RequestsLibrary.GET On Session
+    ...    ${session}
+    ...    /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/
+    ...    expected_status=200
+    ${rc} =    Get Node Running Status    ${node}    ${port}    ${system}    ${session}    ${ip}
+    BuiltIn.Should Be Equal As Strings    ${rc}    0
+
+Check Node Stopped
+    [Documentation]    Verify that SxpNode has data removed from Operational datastore and is not running
+    [Arguments]    ${node}    ${port}=64999    ${system}=${node}    ${session}=session    ${ip}=${node}
+    ${resp} =    RequestsLibrary.GET On Session
+    ...    ${session}
+    ...    /restconf/operational/network-topology:network-topology/topology/sxp/node/${node}/
+    ...    expected_status=404
+    ${rc} =    Get Node Running Status    ${node}    ${port}    ${system}    ${session}    ${ip}
+    BuiltIn.Should Be Equal As Strings    ${rc}    1
+
+Get Node Running Status
+    [Documentation]    Get status if node is running by checking that netty server is running
+    [Arguments]    ${node}    ${port}    ${system}    ${session}    ${ip}
+    ${rc} =    Utils.Run Command On Remote System
+    ...    ${system}
+    ...    netstat -tln | grep -q ${ip}:${port} && echo 0 || echo 1
+    ...    ${ODL_SYSTEM_USER}
+    ...    ${ODL_SYSTEM_PASSWORD}
+    ...    prompt=${ODL_SYSTEM_PROMPT}
+    RETURN    ${rc}
 
 Clean SXP Environment
     [Documentation]    Destroy created sessions
-    Delete All Sessions
+    [Arguments]    ${node_range}=1
+    FOR    ${num}    IN RANGE    1    ${node_range}+1
+        ${ip} =    Sxp.Get Ip From Number    ${num}
+        Delete Node    ${ip}
+        BuiltIn.Wait Until Keyword Succeeds    12x    10s    Check Node Stopped    ${ip}    system=${ODL_SYSTEM_IP}
+    END
+    RequestsLibrary.Delete All Sessions
+
+Get Routing Configuration From Controller
+    [Documentation]    Get Routing configuration from config DS
+    [Arguments]    ${session}
+    ${resp} =    RequestsLibrary.GET On Session
+    ...    ${session}
+    ...    /restconf/config/sxp-cluster-route:sxp-cluster-route/
+    ...    headers=${ACCEPT_XML}
+    ${data} =    BuiltIn.Set Variable If    "${resp.status_code}" == "200"    ${resp.text}    ${EMPTY}
+    RETURN    ${data}
+
+Put Routing Configuration To Controller
+    [Documentation]    Put Routing configuration to Config DS
+    [Arguments]    ${data}    ${session}
+    ${resp} =    RequestsLibrary.Put Request
+    ...    ${session}
+    ...    /restconf/config/sxp-cluster-route:sxp-cluster-route/
+    ...    data=${data}
+    ...    headers=${HEADERS_XML}
+    BuiltIn.Log    ${resp}
+    BuiltIn.Should Match    "${resp.status_code}"    "20?"
+
+Clean Routing Configuration To Controller
+    [Documentation]    Delete Routing configuration from Config DS
+    [Arguments]    ${session}
+    ${resp} =    RequestsLibrary.GET On Session
+    ...    ${session}
+    ...    /restconf/config/sxp-cluster-route:sxp-cluster-route/
+    ...    headers=${ACCEPT_XML}
+    IF    "${resp.status_code}" == "200"
+        RequestsLibrary.Delete Request    ${session}    /restconf/config/sxp-cluster-route:sxp-cluster-route/
+    END