<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-26T00:21:27.480505" rpa="false" schemaversion="5">
<suite id="s1" name="controller-rest-clust-cars-perf-ask.txt">
<suite id="s1-s1" name="010 Crud Mdsal Perf" source="/w/workspace/controller-csit-3node-rest-clust-cars-perf-ask-only-vanadium/test/csit/suites/controller/ThreeNodes_Datastore/010_crud_mdsal_perf.robot">
<kw name="Start Suite" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.111087" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.107088" elapsed="0.004078"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-26T00:21:28.106561" elapsed="0.004690"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.116213" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-26T00:21:28.112793" elapsed="0.003453"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-26T00:21:28.116557" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.116375" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.116340" elapsed="0.000306"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.117214" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.116814" elapsed="0.000447"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.117773" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-26T00:21:28.117443" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-26T00:21:28.118379" elapsed="0.000319"/>
</kw>
<msg time="2026-04-26T00:21:28.118809" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:21:28.118857" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:21:28.117973" elapsed="0.000908"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.119465" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.119047" elapsed="0.000446"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.121013" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.120730" elapsed="0.000312"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.121466" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.121188" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.122152" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:21:28.121645" elapsed="0.000535"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.124585" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.124393" elapsed="0.000267"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.122245" elapsed="0.002446"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.125261" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.124852" elapsed="0.000470"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.125888" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.125482" elapsed="0.000449"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.126491" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.126086" elapsed="0.000461"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-26T00:21:28.120239" elapsed="0.006371"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-26T00:21:28.112422" elapsed="0.014250"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.126857" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.126741" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.126720" elapsed="0.000206"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.129893" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.129508" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.130446" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.130132" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:21:28.130520" elapsed="0.000075"/>
</return>
<msg time="2026-04-26T00:21:28.130735" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:21:28.129156" elapsed="0.001604"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.131101" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.130932" elapsed="0.000229"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.130815" elapsed="0.000373"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-26T00:21:28.127153" elapsed="0.004089"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-26T00:21:28.131403" elapsed="0.000211"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.131924" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.131793" elapsed="0.000195"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.131667" elapsed="0.000348"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-26T00:21:28.111678" elapsed="0.020393"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.134537" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.134412" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.134392" elapsed="0.000222"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.138927" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.138819" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.138800" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.139936" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.139553" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.140426" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.140114" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:21:28.140496" elapsed="0.000035"/>
</return>
<msg time="2026-04-26T00:21:28.140657" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:21:28.139215" elapsed="0.001466"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.141027" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.141264" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:21:28.141126" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:21:28.141108" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.140891" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.140733" elapsed="0.000678"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-26T00:21:28.138507" elapsed="0.002958"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-26T00:21:28.132647" elapsed="0.008873"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:21:28.132218" elapsed="0.009343"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-26T00:21:28.106158" elapsed="0.035452"/>
</kw>
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.142500" level="INFO">${already_done} = True</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-26T00:21:28.142155" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="PASS" start="2026-04-26T00:21:28.142757" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-04-26T00:21:28.142653" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.142633" elapsed="0.000210"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.142995" elapsed="0.000021"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.143165" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.143349" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.143522" elapsed="0.000019"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.143762" elapsed="0.000024"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-26T00:21:28.141865" elapsed="0.001982"/>
</kw>
<kw name="Set_Variables_For_Shard" owner="CarPeople">
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.150179" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.149794" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.150679" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.150374" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:21:28.150752" elapsed="0.000033"/>
</return>
<msg time="2026-04-26T00:21:28.150911" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:21:28.149480" elapsed="0.001456"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-26T00:21:28.151181" elapsed="0.000215"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.151893" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.151553" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.152328" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.152071" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.152732" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.152495" elapsed="0.000263"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.153151" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.153411" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:21:28.153256" elapsed="0.000211"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.153632" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:21:28.153494" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.153844" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:21:28.153710" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:21:28.153237" elapsed="0.000679"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.152992" elapsed="0.000949"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.152806" elapsed="0.001160"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-26T00:21:28.154005" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:21:28.154210" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-26T00:21:28.154256" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-26T00:21:28.148751" elapsed="0.005542"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.154869" level="INFO">Length is 0.</msg>
<msg time="2026-04-26T00:21:28.154986" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:21:28.154457" elapsed="0.000554"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.155617" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.155315" elapsed="0.000428">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-26T00:21:28.155085" elapsed="0.000742">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-26T00:21:28.155065" elapsed="0.000795">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.156011" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.156177" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.156244" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.144711" elapsed="0.011663">No leader found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${${shard_name}_leader_index}</arg>
<arg>${leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.156545" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${${shard_name}_follower_indices}</arg>
<arg>${follower_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.156712" elapsed="0.000020"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${first_follower_index}</var>
<arg>${follower_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.156871" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${${shard_name}_first_follower_index}</arg>
<arg>${first_follower_index}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.157039" elapsed="0.000020"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${leader_session}</var>
<arg>member_index=${leader}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.157258" elapsed="0.000038"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${${shard_name}_leader_session}</arg>
<arg>${leader_session}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.157447" elapsed="0.000020"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${sessions}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.157603" elapsed="0.000152"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${follower_session}</var>
<arg>member_index=${follower_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.158045" elapsed="0.000024"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${sessions}</arg>
<arg>${follower_session}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.158211" elapsed="0.000020"/>
</kw>
<var name="${follower_index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.157867" elapsed="0.000398"/>
</iter>
<var>${follower_index}</var>
<value>@{follower_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.157806" elapsed="0.000501"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${${shard_name}_follower_sessions}</arg>
<arg>${sessions}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.158456" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${first_follower_session}</var>
<arg>${sessions}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.158630" elapsed="0.000025"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>\${${shard_name}_first_follower_session}</arg>
<arg>${first_follower_session}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.158804" elapsed="0.000020"/>
</kw>
<arg>shard_name=car</arg>
<doc>Get leader and followers for given shard name and
set several suite variables related to member indices and sessions.
ClusterManagement Resource is assumed to be initialized.
TODO: car-people shard name causes dash in variable names. Should we convert to underscores?</doc>
<status status="FAIL" start="2026-04-26T00:21:28.144114" elapsed="0.014803">No leader found.</status>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${CONTROLLER_LOG_LEVEL}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.159254" elapsed="0.000039"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.159522" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.159696" elapsed="0.000020"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.159896" elapsed="0.000022"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/controller-csit-3node-rest-clust-cars-perf-ask-only-vanadium/test/csit/suites/controller/ThreeNodes_Datastore/../../../../tools/odl-mdsal-clustering-tests/scripts/cluster_rest_script.py</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.160058" elapsed="0.000020"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>ls</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.160223" elapsed="0.000020"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>session</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.160481" elapsed="0.000021"/>
</kw>
<doc>Suite setup keyword</doc>
<status status="FAIL" start="2026-04-26T00:21:28.105749" elapsed="0.054880">No leader found.</status>
</kw>
<test id="s1-s1-t1" name="Add Cars" line="57">
<doc>Request to add 10000 cars (timeout in 5m).</doc>
<status status="FAIL" start="2026-04-26T00:21:28.160776" elapsed="0.000381">Parent suite setup failed:
No leader found.</status>
</test>
<test id="s1-s1-t2" name="Verify Cars" line="63">
<doc>Store logs and verify result</doc>
<status status="FAIL" start="2026-04-26T00:21:28.161381" elapsed="0.000305">Parent suite setup failed:
No leader found.</status>
</test>
<test id="s1-s1-t3" name="Add People" line="71">
<doc>Request to add 10000 people (timeout in 5m).</doc>
<status status="FAIL" start="2026-04-26T00:21:28.161926" elapsed="0.000312">Parent suite setup failed:
No leader found.</status>
</test>
<test id="s1-s1-t4" name="Verify People" line="76">
<doc>Store logs and verify result</doc>
<status status="FAIL" start="2026-04-26T00:21:28.162429" elapsed="0.000340">Parent suite setup failed:
No leader found.</status>
</test>
<test id="s1-s1-t5" name="Purchase Cars" line="84">
<doc>Request to purchase 10000 cars (timeout in 5m).</doc>
<status status="FAIL" start="2026-04-26T00:21:28.163012" elapsed="0.000336">Parent suite setup failed:
No leader found.</status>
</test>
<test id="s1-s1-t6" name="Verify Purchases" line="89">
<doc>Store logs and verify result</doc>
<status status="FAIL" start="2026-04-26T00:21:28.163530" elapsed="0.000307">Parent suite setup failed:
No leader found.</status>
</test>
<test id="s1-s1-t7" name="Delete Cars" line="96">
<doc>Remove cars from the datastore</doc>
<status status="FAIL" start="2026-04-26T00:21:28.164008" elapsed="0.000309">Parent suite setup failed:
No leader found.</status>
</test>
<test id="s1-s1-t8" name="Delete People" line="102">
<doc>Remove people from the datastore</doc>
<status status="FAIL" start="2026-04-26T00:21:28.164495" elapsed="0.000311">Parent suite setup failed:
No leader found.</status>
</test>
<test id="s1-s1-t9" name="Delete CarPeople" line="108">
<doc>Remove car-people entries from the datastore</doc>
<status status="FAIL" start="2026-04-26T00:21:28.164983" elapsed="0.000324">Parent suite setup failed:
No leader found.</status>
</test>
<kw name="Stop Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-26T00:21:28.165998" elapsed="0.000100"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-26T00:21:28.166335" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-26T00:21:28.166237" elapsed="0.000150"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-26T00:21:28.165783" elapsed="0.000654"/>
</kw>
<doc>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</doc>
<status status="FAIL" start="2026-04-26T00:21:27.529875" elapsed="0.636592">Suite setup failed:
No leader found.</status>
</suite>
<suite id="s1-s2" name="Puts During Isolation" source="/w/workspace/controller-csit-3node-rest-clust-cars-perf-ask-only-vanadium/test/csit/suites/controller/ThreeNodes_Datastore/puts_during_isolation.robot">
<kw name="Start Suite" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.244139" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.240227" elapsed="0.003971"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-26T00:21:28.240011" elapsed="0.004257"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.248680" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-26T00:21:28.245370" elapsed="0.003338"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-26T00:21:28.248917" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.248794" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.248769" elapsed="0.000215"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.249505" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.249135" elapsed="0.000413"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.250020" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-26T00:21:28.249701" elapsed="0.000345"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-26T00:21:28.250557" elapsed="0.000312"/>
</kw>
<msg time="2026-04-26T00:21:28.250972" level="INFO">${status} = PASS</msg>
<msg time="2026-04-26T00:21:28.251019" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:21:28.250203" elapsed="0.000839"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.251587" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.251199" elapsed="0.000414"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.252569" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.252303" elapsed="0.000293"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.252990" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.252737" elapsed="0.000278"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.253472" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-26T00:21:28.253163" elapsed="0.000393"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.256090" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.255904" elapsed="0.000259"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.253618" elapsed="0.002573"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.256769" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.256362" elapsed="0.000451"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.257384" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.256968" elapsed="0.000459"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.257958" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-26T00:21:28.257579" elapsed="0.000421"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-26T00:21:28.251851" elapsed="0.006206"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-26T00:21:28.245018" elapsed="0.013094"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.258301" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.258176" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.258158" elapsed="0.000212"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.261466" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.261071" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.261930" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.261645" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:21:28.262000" elapsed="0.000037"/>
</return>
<msg time="2026-04-26T00:21:28.262162" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:21:28.260754" elapsed="0.001433"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.262545" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.262377" elapsed="0.000256"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.262244" elapsed="0.000416"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-26T00:21:28.258581" elapsed="0.004133"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-26T00:21:28.262858" elapsed="0.000207"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.263381" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.263236" elapsed="0.000209"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.263115" elapsed="0.000355"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-26T00:21:28.244582" elapsed="0.018939"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.265926" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.265815" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.265797" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.270204" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.270100" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.270082" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.271242" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.270861" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.271767" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.271476" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:21:28.271838" elapsed="0.000029"/>
</return>
<msg time="2026-04-26T00:21:28.271991" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:21:28.270506" elapsed="0.001510"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.272361" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.272593" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-26T00:21:28.272458" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-04-26T00:21:28.272442" elapsed="0.000225"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.272211" elapsed="0.000483"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.272066" elapsed="0.000652"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-26T00:21:28.269820" elapsed="0.002950"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-26T00:21:28.264063" elapsed="0.008761"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:21:28.263661" elapsed="0.009205"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-26T00:21:28.239709" elapsed="0.033210"/>
</kw>
<kw name="Setup_Logging_For_Debug_Purposes_On_List_Or_All" owner="SetupUtils">
<for flavor="IN">
<iter>
<kw name="Run_Karaf_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.276637" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.276249" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.277097" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-26T00:21:28.276814" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-26T00:21:28.277166" elapsed="0.000030"/>
</return>
<msg time="2026-04-26T00:21:28.277338" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-26T00:21:28.275940" elapsed="0.001423"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.277662" elapsed="0.000021"/>
</kw>
<kw name="Safe_Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<arg>${command}</arg>
<arg>${member_ip}</arg>
<arg>timeout=${timeout}</arg>
<doc>Run Issue_Command_On_Karaf_Console but restore previous connection afterwards.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.279391" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-26T00:21:28.277535" elapsed="0.001924"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.277415" elapsed="0.002070"/>
</for>
<arg>log:set ${log_level} ${logger}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run karaf command on each.</doc>
<status status="PASS" start="2026-04-26T00:21:28.275328" elapsed="0.004211"/>
</kw>
<var name="${logger}">org.opendaylight.controller</var>
<status status="PASS" start="2026-04-26T00:21:28.275112" elapsed="0.004460"/>
</iter>
<var>${logger}</var>
<value>@{loggers_list}</value>
<status status="PASS" start="2026-04-26T00:21:28.274985" elapsed="0.004617"/>
</for>
<arg>${TEST_LOG_LEVEL}</arg>
<arg>${TEST_LOG_COMPONENTS}</arg>
<doc>Set the log level for given loggers on node nodes of the cluster</doc>
<status status="PASS" start="2026-04-26T00:21:28.273127" elapsed="0.006524"/>
</kw>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-26T00:21:28.284139" level="INFO">${tools_connection} = 1</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-26T00:21:28.283708" elapsed="0.000459"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.285800" level="INFO">Length is 0.</msg>
<msg time="2026-04-26T00:21:28.285878" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-26T00:21:28.285513" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-26T00:21:28.286055" elapsed="0.000339"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-26T00:21:28.287263" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-26T00:21:28.287873" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.286940" elapsed="0.003764">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-26T00:21:28.290769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.286558" elapsed="0.004263"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.285067" elapsed="0.005866">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-26T00:21:28.290982" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.284687" elapsed="0.006338"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.284357" elapsed="0.006759">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${tools_connection}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.291166" elapsed="0.000018"/>
</return>
<var>${mininet_conn_id}</var>
<arg>prompt=~]&gt;</arg>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.283375" elapsed="0.007888">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.291451" elapsed="0.000022"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/controller-csit-3node-rest-clust-cars-perf-ask-only-vanadium/test/csit/suites/controller/ThreeNodes_Datastore/../../../../tools/odl-mdsal-clustering-tests/scripts/${TOOL_NAME}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.291626" elapsed="0.000028"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>ls</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.291804" elapsed="0.000019"/>
</kw>
<kw name="Get Log File Name" owner="Utils">
<var>${out_file}</var>
<arg>${TOOL_NAME}</arg>
<doc>Get the name of the suite sanitized to be usable as a part of filename.
These names are used to constructs names of the log files produced
by the testing tools so two suites using a tool wont overwrite the
log files if they happen to run in one job.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.292057" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${out_file}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.292230" elapsed="0.000020"/>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.292462" elapsed="0.000023"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>requests</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.292655" elapsed="0.000022"/>
</kw>
<kw name="Set_Variables_For_Shard" owner="CarPeople">
<arg>${SHARD_NAME}</arg>
<arg>shard_type=${SHARD_TYPE}</arg>
<doc>Get leader and followers for given shard name and
set several suite variables related to member indices and sessions.
ClusterManagement Resource is assumed to be initialized.
TODO: car-people shard name causes dash in variable names. Should we convert to underscores?</doc>
<status status="NOT RUN" start="2026-04-26T00:21:28.292951" elapsed="0.000024"/>
</kw>
<doc>Upload the script file and create a virtual env</doc>
<status status="FAIL" start="2026-04-26T00:21:28.239422" elapsed="0.053643">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s2-t1" name="Start_Adding_Cars_To_Follower" line="47">
<doc>Start the script to configure 10000 cars in the background.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-26T00:21:28.293184" elapsed="0.000462">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t2" name="Isolate_Current_Car_Leader" line="55">
<doc>Isolating cluster node which is the car shard leader.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-26T00:21:28.293828" elapsed="0.000359">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t3" name="Verify_New_Car_Leader_Elected" line="61">
<doc>Verify new owner of the car shard is elected.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-26T00:21:28.294376" elapsed="0.000383">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t4" name="Verify_Cars_Configured" line="77">
<doc>Verify that all cars are configured.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-26T00:21:28.294930" elapsed="0.000317">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t5" name="Rejoin_Isolated_Member" line="83">
<doc>Rejoin isolated node</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-26T00:21:28.295433" elapsed="0.000302">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t6" name="Delete Cars" line="87">
<doc>Remove cars from the datastore</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-26T00:21:28.295902" elapsed="0.000294">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop Suite" type="TEARDOWN">
<kw name="Stop_Tool">
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-26T00:21:28.297461" level="INFO">${output} = None</msg>
<msg time="2026-04-26T00:21:28.297506" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<var>${output}</var>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.297260" elapsed="0.000709">Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.298405" level="INFO">None</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:21:28.298131" elapsed="0.000320"/>
</kw>
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.299166" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-26T00:21:28.298858" elapsed="0.000336"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<msg time="2026-04-26T00:21:28.299547" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.299355" elapsed="0.000614">Cannot open session, you need to establish a connection first.</status>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.298655" elapsed="0.001472">Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-26T00:21:28.300479" level="INFO">${output} = None</msg>
<msg time="2026-04-26T00:21:28.300521" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.300294" elapsed="0.000806">Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.301531" level="INFO">None</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:21:28.301262" elapsed="0.000316"/>
</kw>
<kw name="Virtual_Env_Deactivate_On_Current_Session" owner="SSHKeywords">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-26T00:21:28.302298" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>deactivate</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.302118" elapsed="0.000642">Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-26T00:21:28.303095" level="INFO">${output} = None</msg>
<msg time="2026-04-26T00:21:28.303137" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.302922" elapsed="0.000775">Cannot open session, you need to establish a connection first.</status>
</kw>
<if>
<branch type="IF" condition="${log_output}==${True}">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.304307" level="INFO">None</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:21:28.304029" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-26T00:21:28.303783" elapsed="0.000606"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.303763" elapsed="0.000652"/>
</if>
<arg>log_output=${True}</arg>
<doc>Deactivates virtual environment.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.301818" elapsed="0.002703">Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.</status>
</kw>
<doc>Stop the tool if still running.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.296840" elapsed="0.007801">Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Cannot open session, you need to establish a connection first.

4) Cannot open session, you need to establish a connection first.

5) Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<msg time="2026-04-26T00:21:28.308664" level="INFO">${session} = None</msg>
<msg time="2026-04-26T00:21:28.308696" level="FAIL">Variable '${new_leader_index}' not found.</msg>
<var>${session}</var>
<arg>member_index=${new_leader_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.304826" elapsed="0.003901">Variable '${new_leader_index}' not found.</status>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-26T00:21:28.309132" level="INFO">${rsp} = None</msg>
<msg time="2026-04-26T00:21:28.309173" level="FAIL">No sessions created</msg>
<var>${rsp}</var>
<arg>${session}</arg>
<arg>url=${CARURL}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.308883" elapsed="0.000849">No sessions created</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.312043" level="FAIL">Resolving variable '${rsp.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${rsp.status_code} : ${rsp.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.309905" elapsed="0.002171">Resolving variable '${rsp.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.317176" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-26T00:21:28.316849" elapsed="0.000355"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-26T00:21:28.318643" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-26T00:21:28.318796" level="INFO">${stdout} = None</msg>
<msg time="2026-04-26T00:21:28.318840" level="INFO">${stderr} = None</msg>
<msg time="2026-04-26T00:21:28.318880" level="INFO">${rc} = None</msg>
<msg time="2026-04-26T00:21:28.318918" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.318430" elapsed="0.000787">Connection not open</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.320371" level="FAIL">Could not get length of 'None'.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.319750" elapsed="0.000752">Could not get length of 'None'.</status>
</kw>
<msg time="2026-04-26T00:21:28.320610" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-04-26T00:21:28.320654" level="INFO">${result} = Could not get length of 'None'.</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-26T00:21:28.319415" elapsed="0.001262"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.321257" level="INFO">${success} = False</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-26T00:21:28.320843" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.322320" level="INFO">None</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:21:28.322055" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.322811" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:21:28.322554" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.323239" level="INFO">None</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-26T00:21:28.322999" elapsed="0.000299"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-26T00:21:28.321716" elapsed="0.001638"/>
</kw>
<status status="PASS" start="2026-04-26T00:21:28.321379" elapsed="0.002011"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.321358" elapsed="0.002059"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.323577" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.323475" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.323458" elapsed="0.000188"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-26T00:21:28.323786" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-26T00:21:28.323697" elapsed="0.000131"/>
</branch>
<status status="PASS" start="2026-04-26T00:21:28.323682" elapsed="0.000168"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-26T00:21:28.324358" level="FAIL">Got rc: None or stderr was not empty: None</msg>
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.323983" elapsed="0.000437">Got rc: None or stderr was not empty: None</status>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="FAIL" start="2026-04-26T00:21:28.317877" elapsed="0.006669">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-26T00:21:28.324602" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.317368" elapsed="0.007293"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.316251" elapsed="0.008526">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-26T00:21:28.324831" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.312844" elapsed="0.012041"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.312508" elapsed="0.012488">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.312270" elapsed="0.012828">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<kw name="Store_File_To_Workspace">
<msg time="2026-04-26T00:21:28.336040" level="FAIL">Variable '${out_file}' not found. Did you mean:
    ${OUTPUT_FILE}
    ${LOG_FILE}</msg>
<arg>${out_file}</arg>
<arg>${out_file}</arg>
<doc>Store the ${source_file_name} to the workspace as ${target_file_name}.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.332499" elapsed="0.003578">Variable '${out_file}' not found. Did you mean:
    ${OUTPUT_FILE}
    ${LOG_FILE}</status>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-26T00:21:28.336246" elapsed="0.000155"/>
</kw>
<doc>Stop the tool, remove virtual env and close ssh connection towards tools vm.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.296623" elapsed="0.039916">Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Cannot open session, you need to establish a connection first.

4) Cannot open session, you need to establish a connection first.

5) Cannot open session, you need to establish a connection first.

6) Variable '${new_leader_index}' not found.

7) No sessions created

8) Resolving variable '${rsp.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

9) Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None

10) Variable '${out_file}' not found. Did you mean:
    ${OUTPUT_FILE}
    ${LOG_FILE}</status>
</kw>
<doc>Test when a car shard leader is isolated while configuring cars.

Copyright (c) 2017 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
PUTing car items while the car shard leader is isolated.</doc>
<status status="FAIL" start="2026-04-26T00:21:28.167208" elapsed="0.169416">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Cannot open session, you need to establish a connection first.

4) Cannot open session, you need to establish a connection first.

5) Cannot open session, you need to establish a connection first.

6) Variable '${new_leader_index}' not found.

7) No sessions created

8) Resolving variable '${rsp.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

9) Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None

10) Variable '${out_file}' not found. Did you mean:
    ${OUTPUT_FILE}
    ${LOG_FILE}</status>
</suite>
<status status="FAIL" start="2026-04-26T00:21:27.482080" elapsed="0.855654"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="15" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="6" skip="0">critical</stat>
</tag>
<suite>
<stat name="controller-rest-clust-cars-perf-ask.txt" id="s1" pass="0" fail="15" skip="0">controller-rest-clust-cars-perf-ask.txt</stat>
<stat name="010 Crud Mdsal Perf" id="s1-s1" pass="0" fail="9" skip="0">controller-rest-clust-cars-perf-ask.txt.010 Crud Mdsal Perf</stat>
<stat name="Puts During Isolation" id="s1-s2" pass="0" fail="6" skip="0">controller-rest-clust-cars-perf-ask.txt.Puts During Isolation</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
