...
... TODO: Unify capitalization of Leaders and Followers.
-Library RequestsLibrary # for Create_Session and To_Json
+Library RequestsLibrary # for Create_Session
Library Collections
Library String
Library ClusterEntities.py
... uri=${uri}
... session=${session}
... http_timeout=${http_timeout}
- ${data_object} = RequestsLibrary.To_Json ${data_text}
+ ${data_object} = Utils.Json Parse From String ${data_text}
${value} = Collections.Get_From_Dictionary ${data_object} value
${raft_property} = Collections.Get_From_Dictionary ${value} ${property}
RETURN ${raft_property}
[Documentation] Return sync status parsed out of given text. Called twice by Get_Sync_Status_Of_Member.
[Arguments] ${shard_manager_text}
BuiltIn.Log ${shard_manager_text}
- ${manager_object} = RequestsLibrary.To_Json ${shard_manager_text}
+ ${manager_object} = Utils.Json Parse From String ${shard_manager_text}
${value_object} = Collections.Get_From_Dictionary dictionary=${manager_object} key=value
${sync_status} = Collections.Get_From_Dictionary dictionary=${value_object} key=SyncStatus
RETURN ${sync_status}
def getCars(hostname, port, ignore):
"""Uses the GET on car:cars resource to get all cars in the store using RESTCONF"""
- resp = UtilLibrary.get(SettingsLibrary.getCarsUrl(hostname, port), "admin", "admin")
+ resp = UtilLibrary.get(
+ SettingsLibrary.getCarsUrl(hostname, port) + "?content=config", "admin", "admin"
+ )
resp.encoding = "utf-8"
print(resp.text)
return resp
</note>
"""
resp = UtilLibrary.get(
- SettingsLibrary.getPersonsUrl(hostname, port), "admin", "admin"
+ SettingsLibrary.getPersonsUrl(hostname, port) + "?content=config",
+ "admin",
+ "admin",
)
resp.encoding = "utf-8"
print(resp.text)
</note>
"""
resp = UtilLibrary.get(
- SettingsLibrary.getCarPersonUrl(hostname, port), "admin", "admin"
+ SettingsLibrary.getCarPersonUrl(hostname, port) + "?content=config",
+ "admin",
+ "admin",
)
resp.encoding = "utf-8"
print(resp)
def getCarsUrl(hostname, port):
"""Cars resource URL for GET"""
- return "http://" + hostname + ":" + port + "/restconf/config/car:cars"
+ return "http://" + hostname + ":" + port + "/rests/data/car:cars"
def getPersonsUrl(hostname, port):
"""People resouce URL for GET"""
- return "http://" + hostname + ":" + port + "/restconf/config/people:people"
+ return "http://" + hostname + ":" + port + "/rests/data/people:people"
def getCarPersonUrl(hostname, port):
"""GET cars persons mapping resource URL"""
- return "http://" + hostname + ":" + port + "/restconf/config/car-people:car-people"
+ return "http://" + hostname + ":" + port + "/rests/data/car-people:car-people"
def getAddCarInitUrl(hostname, port):
"""POST or DELETE URL"""
- return "http://" + hostname + ":" + port + "/restconf/config"
+ return "http://" + hostname + ":" + port + "/rests/data"
def getAddCarUrl(hostname, port):
"""POST or DELETE URL"""
- return "http://" + hostname + ":" + port + "/restconf/config/car:cars"
+ return "http://" + hostname + ":" + port + "/rests/data/car:cars"
def getAddPersonUrl(hostname, port):
"""POST or DELETE URL"""
- return "http://" + hostname + ":" + port + "/restconf/config"
+ return "http://" + hostname + ":" + port + "/rests/data"
def getAddPersonRpcUrl(hostname, port):
"""POST URL -using rpc"""
- return "http://" + hostname + ":" + port + "/restconf/operations/people:add-person"
+ return "http://" + hostname + ":" + port + "/rests/operations/people:add-person"
def getAddCarPersonUrl(hostname, port):
"""POST URL for car person mapping"""
- return "http://" + hostname + ":" + port + "/restconf/config"
+ return "http://" + hostname + ":" + port + "/rests/data"
def getBuyCarRpcUrl(hostname, port):
"""POST URL for buy car rpc"""
- return (
- "http://" + hostname + ":" + port + "/restconf/operations/car-purchase:buy-car"
- )
+ return "http://" + hostname + ":" + port + "/rests/operations/car-purchase:buy-car"
def getJolokiaURL(hostname, port, shardIndex, shardName):
... python cluster_rest_script.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} add-rpc --itemtype people --itemcount ${ITEM_COUNT} --threads 5
${purchasecmd}
... python cluster_rest_script.py --host ${ODL_SYSTEM_IP} --port ${RESTCONFPORT} add-rpc --itemtype car-people --itemcount ${ITEM_COUNT} --threads 5
-${carurl} /restconf/config/car:cars
-${peopleurl} /restconf/config/people:people
-${carpeopleurl} /restconf/config/car-people:car-people
+${carurl} /rests/data/car:cars
+${carurl_config} /rests/data/car:cars?content=config
+${peopleurl} /rests/data/people:people
+${peopleurl_config} /rests/data/people:people?content=config
+${carpeopleurl} /rests/data/car-people:car-people
+${carpeopleurl_config} /rests/data/car-people:car-people?content=config
${CONTROLLER_LOG_LEVEL} INFO
${TOOL_OPTIONS} ${EMPTY}
[Documentation] Store logs and verify result
Stop Tool
Store File To Workspace cluster_rest_script.log cluster_rest_script_add_cars.log
- ${rsp}= RequestsLibrary.Get Request session ${carurl} headers=${ACCEPT_XML}
+ ${rsp}= RequestsLibrary.GET On Session session url=${carurl_config} headers=${ACCEPT_XML}
${count}= XML.Get Element Count ${rsp.content} xpath=car-entry
Should Be Equal As Numbers ${count} ${ITEM_COUNT}
[Documentation] Store logs and verify result
Stop Tool
Store File To Workspace cluster_rest_script.log cluster_rest_script_add_people.log
- ${rsp}= RequestsLibrary.Get Request session ${peopleurl} headers=${ACCEPT_XML}
+ ${rsp}= RequestsLibrary.GET On Session session url=${peopleurl_config} headers=${ACCEPT_XML}
${count}= XML.Get Element Count ${rsp.content} xpath=person
Should Be Equal As Numbers ${count} ${ITEM_COUNT}
Delete Cars
[Documentation] Remove cars from the datastore
- ${rsp}= RequestsLibrary.Delete Request session ${carurl}
- Should Be Equal As Numbers 200 ${rsp.status_code}
- ${rsp}= RequestsLibrary.Get Request session ${carurl}
+ ${rsp}= RequestsLibrary.DELETE On Session session url=${carurl} expected_status=200
+ ${rsp}= RequestsLibrary.GET On Session session url=${carurl_config} expected_status=anything
Should Contain ${DELETED_STATUS_CODES} ${rsp.status_code}
Delete People
[Documentation] Remove people from the datastore
- ${rsp}= RequestsLibrary.Delete Request session ${peopleurl}
- Should Be Equal As Numbers 200 ${rsp.status_code}
- ${rsp}= RequestsLibrary.Get Request session ${peopleurl}
+ ${rsp}= RequestsLibrary.DELETE On Session session url=${peopleurl} expected_status=200
+ ${rsp}= RequestsLibrary.GET On Session session url=${peopleurl_config} expected_status=anything
Should Contain ${DELETED_STATUS_CODES} ${rsp.status_code}
Delete CarPeople
[Documentation] Remove car-people entries from the datastore
- ${rsp}= RequestsLibrary.Delete Request session ${carpeopleurl}
- Should Be Equal As Numbers 200 ${rsp.status_code}
- ${rsp}= RequestsLibrary.Get Request session ${carpeopleurl}
+ ${rsp}= RequestsLibrary.DELETE On Session session url=${carpeopleurl} expected_status=200
+ ${rsp}= RequestsLibrary.GET On Session session url=${carpeopleurl_config} expected_status=anything
Should Contain ${DELETED_STATUS_CODES} ${rsp.status_code}
Purchase Is Completed
[Documentation] Check purchase of ${item_count} is completed.
[Arguments] ${item_count}
- ${rsp}= RequestsLibrary.Get Request session ${carpeopleurl} headers=${ACCEPT_XML}
+ ${rsp}= RequestsLibrary.GET On Session session url=${carpeopleurl_config} headers=${ACCEPT_XML}
${count}= XML.Get Element Count ${rsp.content} xpath=car-person
Should Be Equal As Numbers ${count} ${item_count}
... python cluster_rest_script.py --port ${RESTCONFPORT} add-rpc --itemtype people --itemcount ${ITEM_COUNT} --threads 6
${purchasecmd}
... python cluster_rest_script.py --port ${RESTCONFPORT} add-rpc --itemtype car-people --itemcount ${ITEM_COUNT} --threads 6
-${carurl} /restconf/config/car:cars
-${peopleurl} /restconf/config/people:people
-${carpeopleurl} /restconf/config/car-people:car-people
+${carurl} /rests/data/car:cars
+${carurl_config} /rests/data/car:cars?content=config
+${peopleurl} /rests/data/people:people
+${peopleurl_config} /rests/data/people:people?content=config
+${carpeopleurl} /rests/data/car-people:car-people
+${carpeopleurl_config} /rests/data/car-people:car-people?content=config
${CONTROLLER_LOG_LEVEL} INFO
${TOOL_OPTIONS} ${EMPTY}
[Documentation] Store logs and verify result
Stop Tool
Store File To Workspace cluster_rest_script.log cluster_rest_script_add_cars.log
- ${rsp}= RequestsLibrary.Get Request ${car_leader_session} ${carurl} headers=${ACCEPT_XML}
+ ${rsp}= RequestsLibrary.GET On Session session url=${carurl_config} headers=${ACCEPT_XML}
${count}= XML.Get Element Count ${rsp.content} xpath=car-entry
Should Be Equal As Numbers ${count} ${ITEM_COUNT}
[Documentation] Store logs and verify result
Stop Tool
Store File To Workspace cluster_rest_script.log cluster_rest_script_add_people.log
- ${rsp}= RequestsLibrary.Get Request ${car_leader_session} ${peopleurl} headers=${ACCEPT_XML}
+ ${rsp}= RequestsLibrary.GET On Session session url=${peopleurl_config} headers=${ACCEPT_XML}
${count}= XML.Get Element Count ${rsp.content} xpath=person
Should Be Equal As Numbers ${count} ${ITEM_COUNT}
Delete Cars
[Documentation] Remove cars from the datastore
- ${rsp}= RequestsLibrary.Delete Request ${car_leader_session} ${carurl}
- Should Be Equal As Numbers 200 ${rsp.status_code}
- ${rsp}= RequestsLibrary.Get Request ${car_leader_session} ${carurl}
+ ${rsp}= RequestsLibrary.DELETE On Session session url=${carurl} expected_status=200
+ ${rsp}= RequestsLibrary.GET On Session session url=${carurl_config} expected_status=anything
Should Contain ${DELETED_STATUS_CODES} ${rsp.status_code}
Delete People
[Documentation] Remove people from the datastore
- ${rsp}= RequestsLibrary.Delete Request ${car_leader_session} ${peopleurl}
- Should Be Equal As Numbers 200 ${rsp.status_code}
- ${rsp}= RequestsLibrary.Get Request ${car_leader_session} ${peopleurl}
+ ${rsp}= RequestsLibrary.DELETE On Session session url=${peopleurl} expected_status=200
+ ${rsp}= RequestsLibrary.GET On Session session url=${peopleurl_config} expected_status=anything
Should Contain ${DELETED_STATUS_CODES} ${rsp.status_code}
Delete CarPeople
[Documentation] Remove car-people entries from the datastore
- ${rsp}= RequestsLibrary.Delete Request ${car_leader_session} ${carpeopleurl}
- Should Be Equal As Numbers 200 ${rsp.status_code}
- ${rsp}= RequestsLibrary.Get Request ${car_leader_session} ${carpeopleurl}
+ ${rsp}= RequestsLibrary.DELETE On Session session url=${carpeopleurl} expected_status=200
+ ${rsp}= RequestsLibrary.GET On Session session url=${carpeopleurl_config} expected_status=anything
Should Contain ${DELETED_STATUS_CODES} ${rsp.status_code}
SSHLibrary.Put File ${CURDIR}/../../../../tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py .
${stdout} ${stderr} ${rc}= SSHLibrary.Execute Command ls return_stdout=True return_stderr=True
... return_rc=True
+ RequestsLibrary.Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
Stop Suite
[Documentation] Suite teardown keyword
Purchase Is Completed
[Documentation] Check purchase of ${item_count} is completed.
[Arguments] ${item_count}
- ${rsp}= RequestsLibrary.Get Request ${car_leader_session} ${carpeopleurl} headers=${ACCEPT_XML}
+ ${rsp}= RequestsLibrary.GET On Session session url=${carpeopleurl_config} headers=${ACCEPT_XML}
${count}= XML.Get Element Count ${rsp.content} xpath=car-person
Should Be Equal As Numbers ${count} ${item_count}
${THREADS} 10
${ADDCMD}
... python ${TOOL_NAME} --port ${RESTCONFPORT} add-with-retries --itemtype car --itemcount ${ITEM_COUNT} --threads ${THREADS}
-${CARURL} /restconf/config/car:cars
+${CARURL} /rests/data/car:cars
+${CARURL_CONFIG} /rests/data/car:cars?content=config
${SHARD_NAME} car
${SHARD_TYPE} config
${TEST_LOG_LEVEL} info
Delete Cars
[Documentation] Remove cars from the datastore
${session} = Resolve_Http_Session_For_Member member_index=${new_leader_index}
- ${rsp} = RequestsLibrary.Delete Request ${session} ${CARURL}
- Should Be Equal As Numbers 200 ${rsp.status_code}
- ${rsp} = RequestsLibrary.Get Request ${session} ${CARURL}
+ ${rsp} = RequestsLibrary.DELETE On Session ${session} url=${CARURL} expected_status=200
+ ${rsp} = RequestsLibrary.GET On Session ${session} url=${CARURL_CONFIG} expected_status=anything
Should Contain ${DELETED_STATUS_CODES} ${rsp.status_code}
Stop_Tool
${session} = Resolve_Http_Session_For_Member member_index=${new_leader_index}
# best effort to make sure cars are deleted in case more suites will run after this and the delete test case had trouble
- ${rsp} = RequestsLibrary.Delete Request ${session} ${CARURL}
+ ${rsp} = RequestsLibrary.DELETE On Session ${session} url=${CARURL} expected_status=anything
BuiltIn.Log ${rsp.status_code} : ${rsp.text}
SSHKeywords.Virtual_Env_Delete
Store_File_To_Workspace ${out_file} ${out_file}
Get_Cars_Count
[Documentation] Count car items in config ds.
[Arguments] ${session}
- ${resp} = RequestsLibrary.Get_Request ${session} ${CARURL}
+ ${resp} = RequestsLibrary.GET On Session ${session} url=${CARURL_CONFIG}
${count} = BuiltIn.Evaluate len(${resp.json()}[cars][car-entry])
RETURN ${count}
*** Variables ***
-${RPC_URL} /restconf/operations/basic-rpc-test:basic-global
+${RPC_URL} /rests/operations/basic-rpc-test:basic-global
&{EMPTY_DICT}
${SERVICE} Basic-rpc-test']
${TEST_LOG_LEVEL} info
@{TEST_LOG_COMPONENTS} org.opendaylight.controller.remote.rpc
-${EOS_URL} /restconf/operational/entity-owners:entity-owners
+${EOS_URL} /rests/data/entity-owners:entity-owners?content=nonconfig
${active_nodes} ${EMPTY}
*** Variables ***
-${RPC_URL} /restconf/operations/basic-rpc-test:basic-global
+${RPC_URL} /rests/operations/basic-rpc-test:basic-global
&{EMPTY_DICT}
${SERVICE} Basic-rpc-test']
${TEST_LOG_LEVEL} info
@{TEST_LOG_COMPONENTS} org.opendaylight.controller.remote.rpc
-${EOS_URL} /restconf/operational/entity-owners:entity-owners
+${EOS_URL} /rests/data/entity-owners:entity-owners?content=nonconfig
${RPC_STATUS_ISOLATED} 501
${session} = Resolve_Http_Session_For_Member member_index=${old_brt_owner}
BuiltIn.Run_Keyword_And_Ignore_Error Get_And_Log_EOS_Output_To_Karaf_Log ${session}
BuiltIn.Pass_Execution Rpc on isolated node may work for some time(bug 8207), then will fail (bug 8214)
- ${resp} = RequestsLibrary.Post Request ${session} ${RPC_URL} data=${EMPTY}
- BuiltIn.Should_Be_Equal_As_Numbers ${resp.status_code} ${RPC_STATUS_ISOLATED}
+ ${resp} = RequestsLibrary.POST On Session ${session} url=${RPC_URL} data=${EMPTY}
+ ... expected_status=${RPC_STATUS_ISOLATED}
Rpc_On_Non_Isolated_Cluster_Nodes
[Documentation] Run rpc on remained cluster nodes.
*** Variables ***
-${RPC_URL} /restconf/operations/basic-rpc-test:basic-global
+${RPC_URL} /rests/operations/basic-rpc-test:basic-global
&{EMPTY_DICT}
${SERVICE} Basic-rpc-test']
${TEST_LOG_LEVEL} info
@{TEST_LOG_COMPONENTS} org.opendaylight.controller.remote.rpc
-${EOS_URL} /restconf/operational/entity-owners:entity-owners
+${EOS_URL} /rests/data/entity-owners:entity-owners?content=nonconfig
*** Test Cases ***
-/restconf/config/car-people:car-people
+/rests/data/car-people:car-people
-/restconf/config/car:cars
+/rests/data/car:cars
-/restconf/config/car:cars/car-entry/boogie
+/rests/data/car:cars/car-entry/boogie
-/restconf/config/car-people:car-people/car-person/boogie/joe
+/rests/data/car-people:car-people/car-person/boogie/joe
-/restconf/config/car:cars
+/rests/data/car:cars
-/restconf/config/car-people:car-people
+/rests/data/car-people:car-people