--- /dev/null
+*** Settings ***
+Documentation Test suite for Connection Manager
+Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
+Suite Teardown Delete All Sessions
+Library OperatingSystem
+Library String
+Library Collections
+Library SSHLibrary
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/Utils.txt
+Resource ../../../libraries/OVSDB.robot
+
+*** Variables ***
+${OVSDB_PORT} 6634
+${OVSDB_CONFIG_DIR} ${CURDIR}/../../../variables/ovsdb
+@{node_list1} ovsdb://${MININET1}:${OVSDB_PORT} ${MININET1} ${OVSDB_PORT} ovsdb://${MININET}:${OVSDB_PORT} ${MININET} ${OVSDB_PORT} br-int
+${start1} sudo mn --controller=remote,ip=${CONTROLLER} --switch=ovsk,protocols=OpenFlow13 --custom ovsdb.py --topo host,1
+${start2} sudo mn --controller=remote,ip=${CONTROLLER} --switch=ovsk,protocols=OpenFlow13 --custom ovsdb.py --topo host,2
+
+*** Test Cases ***
+Make the OVS instance to listen for connection
+ [Tags] Southbound
+ Run Command On Remote System ${MININET1} sudo ovs-vsctl del-manager
+ Run Command On Remote System ${MININET1} sudo ovs-vsctl set-manager ptcp:6634
+ Run Command On Remote System ${MININET} sudo ovs-vsctl del-manager
+ Run Command On Remote System ${MININET} sudo ovs-vsctl set-manager ptcp:6634
+
+Connect controller to OVSDB Node1 and OVSDB Node2
+ [Documentation] Initiate the connection to OVSDB node from controller
+ [Tags] Southbound
+ Connect To Ovsdb Node ${MININET1}
+ Connect To Ovsdb Node ${MININET}
+
+Get Operational Topology from OVSDB Node1 and OVSDB Node2
+ [Documentation] This request will fetch the operational topology from the connected OVSDB nodes
+ [Tags] Southbound
+ Wait Until Keyword Succeeds 8s 2s Check For Elements At URI ${OPERATIONAL_TOPO_API} ${node_list1}
+
+Delete the integration Bridge from OVSDB node 1 and 2 and Verify it
+ [Documentation] This request will delete the integation bridge node from the OVSDB as we don't need it and verify the operation.
+ [Tags] Southbound
+ Delete Bridge From Ovsdb Node ${MININET} br-int
+ Delete Bridge From Ovsdb Node ${MININET1} br-int
+ @{list} Create List br-int
+ Wait Until Keyword Succeeds 8s 2s Check For Elements Not At URI ${OPERATIONAL_TOPO_API} ${list}
+
+Start the Mininet and create custom topology
+ [Documentation] This will start mininet with custom topology on both the Virtual Machines
+ [Tags] Southbound
+ ${conn_id1} Start Mininet ${MININET1} ${start1} ${OVSDB_CONFIG_DIR}/ovsdb.py
+ Set Global Variable ${conn_id1}
+ ${conn_id2} Start Mininet ${MININET} ${start2} ${OVSDB_CONFIG_DIR}/ovsdb.py
+ Set Global Variable ${conn_id2}
+
+Get Operational Topology with custom topology
+ [Documentation] This request will fetch the operational topology from the connected OVSDB nodes to make sure the mininet created custom topology
+ [Tags] Southbound
+ @{list} Create List s1 s2
+ Wait Until Keyword Succeeds 8s 2s Check For Elements At URI ${OPERATIONAL_TOPO_API} ${list}
+
+Add the bridge s1 in the config datastore of OVSDB Node1
+ [Documentation] This request will add already operational bridge to the config data store of the OVSDB node.
+ [Tags] Southbound
+ Add Bridge To Ovsdb Node ${MININET1} s1 0000000000000001
+
+Add the bridge s2 in the config datastore of OVSDB Node2
+ [Documentation] This request will add already operational bridge to the config data store of the OVSDB node.
+ [Tags] Southbound
+ Add Bridge To Ovsdb Node ${MININET} s2 0000000000000002
+
+Get Config Topology with s1 and s2 Bridges
+ [Documentation] This will fetch the configuration topology from configuration data store to verify the bridge is added to the config data store
+ [Tags] Southbound
+ @{list} Create List s1 s2
+ Wait Until Keyword Succeeds 8s 2s Check For Elements At URI ${CONFIG_TOPO_API} ${list}
+
+Create Vxlan Port and attach to s1 Bridge
+ [Documentation] This request will create vxlan port/interface for vxlan tunnel and attach it to the specific bridge s1 of OVSDB node 1
+ [Tags] Southbound
+ Add Vxlan To Bridge ${MININET} s2 vxlanport ${MININET1} create_port_key.json
+
+Create Vxlan Port and attach to s2 Bridge
+ [Documentation] This request will create vxlan port/interface for vxlan tunnel and attach it to the specific bridge s2 of OVSDB node 2
+ [Tags] Southbound
+ Add Vxlan To Bridge ${MININET1} s1 vxlanport ${MININET} create_port_key.json
+
+Get Operational Topology with vxlan tunnel
+ [Documentation] This request will fetch the operational topology from the connected OVSDB nodes to verify that the vxlan tunnel is created
+ [Tags] Southbound
+ @{list} Create List vxlanport ${MININET1} ${MININET}
+ Wait Until Keyword Succeeds 8s 2s Check For Elements At URI ${OPERATIONAL_TOPO_API} ${list}
+
+Add Flow1 Rule for s1 and verify
+ [Documentation] This request will add flow to the switch and after that verify through the config datastore flow
+ [Tags] Southbound
+ ${body} OperatingSystem.Get File ${OVSDB_CONFIG_DIR}/add_flow_rule3.xml
+ Set Suite Variable ${body}
+ Log URL is ${CONFIG_NODES_API}/node/openflow:1/table/0/flow/1
+ ${resp} RequestsLibrary.Put session ${CONFIG_NODES_API}/node/openflow:1/table/0/flow/1 headers=${HEADERS_XML} data=${body}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ ${resp} RequestsLibrary.Get session ${CONFIG_NODES_API}/node/openflow:1/table/0/flow/1 headers=${ACCEPT_XML}
+ Should Be Equal As Strings ${resp.status_code} 200
+ compare xml ${body} ${resp.content}
+
+Add Flow2 Rule for s1 and verify
+ [Documentation] This request will add flow to the switch and after that verify through the config datastore flow
+ [Tags] Southbound
+ ${body} OperatingSystem.Get File ${OVSDB_CONFIG_DIR}/add_flow_rule4.xml
+ Log URL is ${CONFIG_NODES_API}/node/openflow:1/table/0/flow/2
+ ${resp} RequestsLibrary.Put session ${CONFIG_NODES_API}/node/openflow:1/table/0/flow/2 headers=${HEADERS_XML} data=${body}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ ${resp} RequestsLibrary.Get session ${CONFIG_NODES_API}/node/openflow:1/table/0/flow/2 headers=${ACCEPT_XML}
+ Should Be Equal As Strings ${resp.status_code} 200
+ compare xml ${body} ${resp.content}
+
+Get Operational Topology to verify the flows successfully installed in the bridge s1
+ [Documentation] This request will fetch the operational topology and verify that the flows has been installed in the switch
+ [Tags] Southbound
+ @{list} Create List openflow:1
+ Wait Until Keyword Succeeds 8s 2s Check For Elements At URI ${OPERATIONAL_TOPO_API} ${list}
+
+Add Flow1 Rule for s2 and verify
+ [Documentation] This request will add flow to the switch and after that verify through the config datastore flow
+ [Tags] Southbound
+ ${body} OperatingSystem.Get File ${OVSDB_CONFIG_DIR}/add_flow_rule3.xml
+ Log URL is ${CONFIG_NODES_API}/node/openflow:2/table/0/flow/1
+ ${resp} RequestsLibrary.Put session ${CONFIG_NODES_API}/node/openflow:2/table/0/flow/1 headers=${HEADERS_XML} data=${body}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ ${resp} RequestsLibrary.Get session ${CONFIG_NODES_API}/node/openflow:2/table/0/flow/1 headers=${ACCEPT_XML}
+ Should Be Equal As Strings ${resp.status_code} 200
+ compare xml ${body} ${resp.content}
+
+Add Flow2 Rule for s2 and verify
+ [Documentation] This request will add flow to the switch and after that verify through the config datastore flow
+ [Tags] Southbound
+ ${body} OperatingSystem.Get File ${OVSDB_CONFIG_DIR}/add_flow_rule4.xml
+ Log URL is ${CONFIG_NODES_API}/node/openflow:2/table/0/flow/2
+ ${resp} RequestsLibrary.Put session ${CONFIG_NODES_API}/node/openflow:2/table/0/flow/2 headers=${HEADERS_XML} data=${body}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ ${resp} RequestsLibrary.Get session ${CONFIG_NODES_API}/node/openflow:2/table/0/flow/2 headers=${ACCEPT_XML}
+ Should Be Equal As Strings ${resp.status_code} 200
+ compare xml ${body} ${resp.content}
+
+Get Operational Topology to verify the flows successfully installed in the bridge s2
+ [Documentation] This request will fetch the operational topology and verify that the flows has been installed in the switch
+ [Tags] Southbound
+ @{list} Create List openflow:2
+ Wait Until Keyword Succeeds 8s 2s Check For Elements At URI ${OPERATIONAL_TOPO_API} ${list}
+
+Ping host2 to IP of host1
+ [Documentation] This step will verify the functionality of the vxlan tunnel between two OVSDB nodes. Ping h2(10.0.0.2)---> 10.0.0.1 , verify no packet loss
+ Switch Connection ${conn_id2}
+ SSHLibrary.Write h2 ping -w 1 10.0.0.1
+ ${result} Read Until mininet>
+ Should Contain ${result} 1 received, 0% packet loss
+
+Cleanup work after test completed
+ [Documentation] Cleanup/Shutdown work that should be done at the completion of all tests
+ Stop Mininet ${conn_id2}
+ Stop Mininet ${conn_id1}
+
+Disconnect controller connection from the connected OVSDBs nodes
+ [Documentation] This request will disconnect the controller from the connected OVSDB node for clean startup for next suite.
+ [Tags] Southbound
+ Disconnect From Ovsdb Node ${MININET}
+ Disconnect From Ovsdb Node ${MININET1}
+
+Verify that the operational topology is clean
+ [Documentation] This request will verify the operational toplogy after the mininet is cleaned.
+ [Tags] Southbound
+ @{list} Create List ${MININET} ${MININET1} s1 s2
+ Wait Until Keyword Succeeds 8s 2s Check For Elements Not At URI ${OPERATIONAL_TOPO_API} ${list}