From 6332d0333a521277d75f80ff24339c038ffe51a4 Mon Sep 17 00:00:00 2001 From: Peter Gubka Date: Mon, 8 Feb 2016 14:03:10 +0100 Subject: [PATCH] car people performace suite for 3 node controller the robot is basically taken from suites/controller/OneNode_Datastore/010_crud_mdsal_perf.robot and adapted for 3 nodes setup the perf script is adapted to use more controller ip addresses Change-Id: I085ae94b0b920cb171ec48d9328abd5d988fc1d8 Signed-off-by: Peter Gubka --- .../010_crud_mdsal_perf.robot | 150 ++++++++++++++++++ .../controller-rest-clust-cars-perf.txt | 8 + .../scripts/cluster_rest_script.py | 11 +- 3 files changed, 166 insertions(+), 3 deletions(-) create mode 100644 csit/suites/controller/ThreeNodes_Datastore/010_crud_mdsal_perf.robot create mode 100644 csit/testplans/controller-rest-clust-cars-perf.txt diff --git a/csit/suites/controller/ThreeNodes_Datastore/010_crud_mdsal_perf.robot b/csit/suites/controller/ThreeNodes_Datastore/010_crud_mdsal_perf.robot new file mode 100644 index 0000000000..ad14914a70 --- /dev/null +++ b/csit/suites/controller/ThreeNodes_Datastore/010_crud_mdsal_perf.robot @@ -0,0 +1,150 @@ +*** Settings *** +Documentation Test for measuring execution time of MD-SAL DataStore operations in cluster. +... +... Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. +... +... This program and the accompanying materials are made available under the +... terms of the Eclipse Public License v1.0 which accompanies this distribution, +... and is available at http://www.eclipse.org/legal/epl-v10.html +... +... This test suite requires odl-restconf and odl-clustering-test-app modules. +... The script cluster_rest_script.py is used for generating requests for +... operations on people, car and car-people DataStore test models. +... (see the https://wiki.opendaylight.org/view/MD-SAL_Clustering_Test_Plan) +... +... Reported bugs: +... https://bugs.opendaylight.org/show_bug.cgi?id=4220 +Suite Setup Start Suite +Suite Teardown Stop Suite +Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing +Library RequestsLibrary +Library SSHLibrary +Library XML +Variables ../../../variables/Variables.py +Resource ../../../libraries/Utils.robot +Resource ../../../libraries/SetupUtils.robot +Resource ../../../libraries/ClusterKeywords.robot + +*** Variables *** +${ITEM_COUNT} ${10000} +${ITEM_BATCH} ${10000} +${PROCEDURE_TIMEOUT} 5m +${threads} 6 # threads are assigned to cluster nodes in round robin way +${addcarcmd} python cluster_rest_script.py --port ${RESTCONFPORT} add --itemtype car --itemcount ${ITEM_COUNT} --ipr ${ITEM_BATCH} +${addpeoplecmd} python cluster_rest_script.py --port ${RESTCONFPORT} add --itemtype people --itemcount ${ITEM_COUNT} --ipr ${ITEM_BATCH} +${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 +${CONTROLLER_LOG_LEVEL} INFO +${TOOL_OPTIONS} ${EMPTY} +${SHARD_CAR_NAME} shard-car-config +${SHARD_PEOPLE_NAME} shard-people-config +${SHARD_CAR_PERSON_NAME} shard-car-people-config + +*** Test Cases *** +Add Cars + [Documentation] Request to add ${ITEM_COUNT} cars (timeout in ${PROCEDURE_TIMEOUT}). + ${car_leader}= ClusterKeywords.Get Leader And Verify ${SHARD_CAR_NAME} + Start Tool ${addcarcmd} --host ${car_leader} ${TOOL_OPTIONS} + Wait Until Tool Finish ${PROCEDURE_TIMEOUT} + +Verify Cars + [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} + ${count}= XML.Get Element Count ${rsp.content} xpath=car-entry + Should Be Equal As Numbers ${count} ${ITEM_COUNT} + +Add People + [Documentation] Request to add ${ITEM_COUNT} people (timeout in ${PROCEDURE_TIMEOUT}). + ${people_leader}= ClusterKeywords.Get Leader And Verify ${SHARD_PEOPLE_NAME} + Start Tool ${addpeoplecmd} --host ${people_leader} ${TOOL_OPTIONS} + Wait Until Tool Finish ${PROCEDURE_TIMEOUT} + +Verify People + [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} + ${count}= XML.Get Element Count ${rsp.content} xpath=person + Should Be Equal As Numbers ${count} ${ITEM_COUNT} + +Purchase Cars + [Documentation] Request to purchase ${ITEM_COUNT} cars (timeout in ${PROCEDURE_TIMEOUT}). + Start Tool ${purchasecmd} --host ${ODL_SYSTEM_1_IP},${ODL_SYSTEM_2_IP},${ODL_SYSTEM_3_IP} ${TOOL_OPTIONS} + Wait Until Tool Finish ${PROCEDURE_TIMEOUT} + +Verify Purchases + [Documentation] Store logs and verify result + Stop Tool + Store File To Workspace cluster_rest_script.log cluster_rest_script_purchase_cars.log + ${rsp}= RequestsLibrary.Get Request session ${carpeopleurl} headers=${ACCEPT_XML} + ${count}= XML.Get Element Count ${rsp.content} xpath=car-person + Should Be Equal As Numbers ${count} ${ITEM_COUNT} + [Teardown] Report_Failure_Due_To_Bug 4220 + +Delete Cars + [Documentation] Remove cars from the datastore + ${rsp}= RequestsLibrary.Delete session ${carurl} + Should Be Equal As Numbers 200 ${rsp.status_code} + ${rsp}= RequestsLibrary.Get Request session ${carurl} + Should Be Equal As Numbers 404 ${rsp.status_code} + +Delete People + [Documentation] Remove people from the datastore + ${rsp}= RequestsLibrary.Delete session ${peopleurl} + Should Be Equal As Numbers 200 ${rsp.status_code} + ${rsp}= RequestsLibrary.Get Request session ${peopleurl} + Should Be Equal As Numbers 404 ${rsp.status_code} + +Delete CarPeople + [Documentation] Remove car-people entries from the datastore + ${rsp}= RequestsLibrary.Delete session ${carpeopleurl} + Should Be Equal As Numbers 200 ${rsp.status_code} + ${rsp}= RequestsLibrary.Get Request session ${carpeopleurl} + Should Be Equal As Numbers 404 ${rsp.status_code} + +*** Keywords *** +Start Suite + [Documentation] Suite setup keyword + SetupUtils.Setup_Utils_For_Setup_And_Teardown + KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set ${CONTROLLER_LOG_LEVEL} + ${mininet_conn_id}= SSHLibrary.Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=6s + Builtin.Set Suite Variable ${mininet_conn_id} + Utils.Flexible Mininet Login ${TOOLS_SYSTEM_USER} + 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 + SSHLibrary.Close All Connections + RequestsLibrary.Delete All Sessions + +Start_Tool + [Arguments] ${command} ${tool_opt} + [Documentation] Start the tool ${command} ${tool_opt} + BuiltIn.Log ${command} + ${output}= SSHLibrary.Write ${command} ${tool_opt} + BuiltIn.Log ${output} + +Wait_Until_Tool_Finish + [Arguments] ${timeout} + [Documentation] Wait ${timeout} for the tool exit. + BuiltIn.Wait Until Keyword Succeeds ${timeout} 1s SSHLibrary.Read Until Prompt + +Stop_Tool + [Documentation] Stop the tool if still running. + Utils.Write_Bare_Ctrl_C + ${output}= SSHLibrary.Read delay=1s + BuiltIn.Log ${output} + +Store_File_To_Workspace + [Arguments] ${source_file_name} ${target_file_name} + [Documentation] Store the ${source_file_name} to the workspace as ${target_file_name}. + ${output_log}= SSHLibrary.Execute_Command cat ${source_file_name} + BuiltIn.Log ${output_log} + Create File ${target_file_name} ${output_log} diff --git a/csit/testplans/controller-rest-clust-cars-perf.txt b/csit/testplans/controller-rest-clust-cars-perf.txt new file mode 100644 index 0000000000..bfda0c5935 --- /dev/null +++ b/csit/testplans/controller-rest-clust-cars-perf.txt @@ -0,0 +1,8 @@ +# Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License v1.0 which accompanies this distribution, +# and is available at http://www.eclipse.org/legal/epl-v10.html + +# Place the suites in run order: +integration/test/csit/suites/controller/ThreeNodes_Datastore/010_crud_mdsal_perf.robot diff --git a/tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py b/tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py index ce6342d37b..7a6d060a96 100644 --- a/tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py +++ b/tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py @@ -241,7 +241,7 @@ def _task_executor(preparing_function, odl_ip="127.0.0.1", port="8181", Args: :param preparing_function: function to prepare http request object - :param odl_ip: ip address of ODL; default="127.0.0.1" + :param odl_ip: ip address of ODL or comma separated addesses; default="127.0.0.1" :param port: restconf port; default="8181" @@ -258,6 +258,10 @@ def _task_executor(preparing_function, odl_ip="127.0.0.1", port="8181", {"http_status_code1: "count1", etc.} """ + # geting hosts + hosts = odl_ip.split(',') + nrhosts = len(hosts) + items = [i+1 for i in range(item_count)] item_groups = [] for i in range(0, item_count, items_per_request): @@ -279,7 +283,7 @@ def _task_executor(preparing_function, odl_ip="127.0.0.1", port="8181", thr = threading.Thread(target=_request_sender, args=(i, preparing_function, auth), kwargs={"in_queue": send_queue, "exit_event": exit_event, - "odl_ip": odl_ip, "port": port, + "odl_ip": hosts[i % nrhosts], "port": port, "out_queue": result_queue}) threads.append(thr) thr.start() @@ -628,7 +632,8 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description="Cluster datastore" "performance test script") parser.add_argument("--host", default="127.0.0.1", - help="Host where odl controller is running" + help="Host where odl controller is running." + "Or comma separated list of hosts." "(default is 127.0.0.1)") parser.add_argument("--port", default="8181", help="Port on which odl's RESTCONF is listening" -- 2.36.6