<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-25T01:07:08.816495" rpa="false" schemaversion="5">
<suite id="s1" name="openflowplugin-clustering-bulkomatic.txt" source="/w/workspace/openflowplugin-csit-3node-clustering-bulkomatic-only-vanadium/test/csit/suites/openflowplugin/Clustering_Bulkomatic">
<suite id="s1-s1" name="Cluster Reconcilliation Multi DPN" source="/w/workspace/openflowplugin-csit-3node-clustering-bulkomatic-only-vanadium/test/csit/suites/openflowplugin/Clustering_Bulkomatic/010__Cluster_Reconcilliation_Multi_DPN.robot">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils" type="SETUP">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.521991" 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-25T01:07:09.517517" elapsed="0.004548"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T01:07:09.517034" elapsed="0.005120"/>
</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-25T01:07:09.527593" 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-25T01:07:09.523650" elapsed="0.003978"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T01:07:09.527877" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:09.527738" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:09.527708" elapsed="0.000249"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.528531" 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-25T01:07:09.528146" elapsed="0.000435"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.529272" 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-25T01:07:09.528769" elapsed="0.000534"/>
</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-25T01:07:09.529898" elapsed="0.000328"/>
</kw>
<msg time="2026-04-25T01:07:09.530340" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T01:07:09.530390" 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-25T01:07:09.529491" elapsed="0.000923"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.531011" 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-25T01:07:09.530598" elapsed="0.000442"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.532783" 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-25T01:07:09.532493" elapsed="0.000319"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.533294" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:09.533026" elapsed="0.000295"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.533979" 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-25T01:07:09.533485" elapsed="0.000525"/>
</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-25T01:07:09.536568" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:09.536363" elapsed="0.000280"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.534076" elapsed="0.002599"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.537300" 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-25T01:07:09.536848" elapsed="0.000498"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.537909" 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-25T01:07:09.537516" elapsed="0.000438"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.538522" 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-25T01:07:09.538137" elapsed="0.000430"/>
</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-25T01:07:09.531997" elapsed="0.006632"/>
</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-25T01:07:09.523265" elapsed="0.015427"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.538882" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:09.538763" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:09.538742" 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-25T01:07:09.542129" 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-25T01:07:09.541722" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.542678" 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-25T01:07:09.542377" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:09.542752" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:07:09.542930" 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-25T01:07:09.541379" elapsed="0.001576"/>
</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-25T01:07:09.543330" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:09.543146" elapsed="0.000246"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.543027" elapsed="0.000393"/>
</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-25T01:07:09.539206" elapsed="0.004269"/>
</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-25T01:07:09.543630" elapsed="0.000213"/>
</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-25T01:07:09.544182" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:09.544040" elapsed="0.000207"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.543896" elapsed="0.000379"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T01:07:09.522581" elapsed="0.021750"/>
</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-25T01:07:09.547047" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:09.546919" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:09.546899" elapsed="0.000219"/>
</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-25T01:07:09.551946" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:09.551829" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:09.551809" elapsed="0.000228"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.553076" 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-25T01:07:09.552625" elapsed="0.000479"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.553562" 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-25T01:07:09.553269" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:09.553633" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:07:09.553801" 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-25T01:07:09.552288" elapsed="0.001538"/>
</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-25T01:07:09.554207" 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-25T01:07:09.554459" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.554310" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:09.554292" elapsed="0.000245"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:09.554061" elapsed="0.000501"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.553880" elapsed="0.000709"/>
</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-25T01:07:09.551513" elapsed="0.003131"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T01:07:09.544996" elapsed="0.009703"/>
</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-25T01:07:09.544485" elapsed="0.010256"/>
</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-25T01:07:09.516568" elapsed="0.038224"/>
</kw>
<test id="s1-s1-t1" name="Check Shards Status And Initialize Variables" line="29">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:09.558150" elapsed="0.000261"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:09.557860" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:09.559501" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:09.559384" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:09.559364" elapsed="0.000207"/>
</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-25T01:07:09.564478" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:09.564366" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:09.564347" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.565580" 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-25T01:07:09.565196" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.566076" 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-25T01:07:09.565771" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:09.566148" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:07:09.566305" 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-25T01:07:09.564775" elapsed="0.001555"/>
</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-25T01:07:09.566686" 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-25T01:07:09.566937" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.566788" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:09.566768" elapsed="0.000263"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:09.566540" elapsed="0.000515"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.566383" elapsed="0.000698"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:09.564003" elapsed="0.003132"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:09.559088" elapsed="0.008101"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:09.558623" elapsed="0.008610"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:09.555466" elapsed="0.011820"/>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:07:09.588991" elapsed="0.000266"/>
</kw>
<msg time="2026-04-25T01:07:09.589314" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:07:09.588206" elapsed="0.001166"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:07:09.587719" elapsed="0.001730"/>
</kw>
<msg time="2026-04-25T01:07:09.589498" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:07:09.579178" elapsed="0.010368"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:07:09.578754" elapsed="0.010866"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.590605" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:07:09.590341" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:07:09.597178" 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-25T01:07:09.596710" elapsed="0.000497"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.597764" 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-25T01:07:09.597409" elapsed="0.000382"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:09.597839" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:07:09.598023" 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-25T01:07:09.596317" elapsed="0.001733"/>
</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-25T01:07:09.598208" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.598883" level="INFO">${ds_type} = operational</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-25T01:07:09.598539" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.599341" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:09.599095" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.599767" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:09.599518" elapsed="0.000275"/>
</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-25T01:07:09.600227" elapsed="0.000025"/>
</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-25T01:07:09.600485" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.600334" elapsed="0.000207"/>
</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-25T01:07:09.600709" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.600565" elapsed="0.000198"/>
</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-25T01:07:09.600950" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.600787" elapsed="0.000237"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:09.600316" elapsed="0.000731"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:09.600053" elapsed="0.001018"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.599843" elapsed="0.001253"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:09.601134" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:07:09.601343" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:09.601389" 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-25T01:07:09.595563" elapsed="0.005849"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.601991" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:09.602073" 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-25T01:07:09.601585" elapsed="0.000512"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.602712" 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-25T01:07:09.602400" elapsed="0.000404">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:09.602173" elapsed="0.000707">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:09.602155" elapsed="0.000757">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-25T01:07:09.603084" elapsed="0.000023"/>
</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-25T01:07:09.603262" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.603327" elapsed="0.000016"/>
</return>
<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>
<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-25T01:07:09.591646" elapsed="0.011798">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:07:09.591418" elapsed="0.012099">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:07:09.591280" elapsed="0.012295">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:07:09.590874" elapsed="0.012792">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:09.603905" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:09.567506" elapsed="0.036583">No leader found.</status>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<var>${temp_json_config_add}</var>
<arg>${orig_json_config_add}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Add json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:09.604369" elapsed="0.000025"/>
</kw>
<kw name="Set DPN And Flow Count In Json Get" owner="BulkomaticKeywords">
<var>${temp_json_config_get}</var>
<arg>${orig_json_config_get}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Get json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:09.604648" elapsed="0.000023"/>
</kw>
<kw name="Set DPN And Flow Count In Json Del" owner="BulkomaticKeywords">
<var>${temp_json_config_del}</var>
<arg>${orig_json_config_del}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Del json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:09.604959" elapsed="0.000038"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_add}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:09.605202" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_get}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:09.605400" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_del}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:09.605598" elapsed="0.000020"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:09.554858" elapsed="0.050918">No leader found.</status>
</test>
<test id="s1-s1-t2" name="Get Inventory Follower and Leader Before Cluster Restart" line="48">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:09.609554" elapsed="0.000239"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:09.609237" elapsed="0.000618"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:09.611047" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:09.610913" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:09.610894" 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-25T01:07:09.616047" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:09.615921" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:09.615902" elapsed="0.000212"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.617155" 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-25T01:07:09.616725" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.617651" 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-25T01:07:09.617361" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:09.617722" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:07:09.617880" 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-25T01:07:09.616343" elapsed="0.001562"/>
</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-25T01:07:09.618319" elapsed="0.000025"/>
</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-25T01:07:09.618570" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.618422" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:09.618405" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:09.618153" elapsed="0.000516"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.617981" elapsed="0.000713"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:09.615558" elapsed="0.003190"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:09.610576" elapsed="0.008227"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:09.610062" elapsed="0.008786"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:09.606600" elapsed="0.012301"/>
</kw>
<kw name="Get InventoryConfig Shard Status" owner="ClusterOpenFlow">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<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-25T01:07:09.626378" 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-25T01:07:09.625938" elapsed="0.000470"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.626866" 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-25T01:07:09.626574" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:09.626937" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:07:09.627116" 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-25T01:07:09.625561" elapsed="0.001579"/>
</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-25T01:07:09.627299" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.627989" 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-25T01:07:09.627638" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.628415" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:09.628177" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.628825" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:09.628587" elapsed="0.000262"/>
</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-25T01:07:09.629342" 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-25T01:07:09.629599" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.629451" elapsed="0.000204"/>
</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-25T01:07:09.629820" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.629679" elapsed="0.000200"/>
</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-25T01:07:09.630062" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:09.629902" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:09.629432" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:09.629165" elapsed="0.000996"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.628897" elapsed="0.001289"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:09.630225" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:07:09.630434" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:09.630480" 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-25T01:07:09.624704" elapsed="0.005799"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.631043" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:09.631122" 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-25T01:07:09.630676" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:09.631730" 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-25T01:07:09.631436" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:09.631217" elapsed="0.000670">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:09.631198" elapsed="0.000721">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-25T01:07:09.632090" elapsed="0.000022"/>
</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-25T01:07:09.632266" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:09.632333" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:09.622091" elapsed="0.010352">No leader found.</status>
</kw>
<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-25T01:07:10.643593" 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-25T01:07:10.642894" elapsed="0.000744"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:10.644425" 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-25T01:07:10.643993" elapsed="0.000469"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:10.644531" elapsed="0.000054"/>
</return>
<msg time="2026-04-25T01:07:10.644771" 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-25T01:07:10.642311" elapsed="0.002494"/>
</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-25T01:07:10.645061" elapsed="0.000246"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:10.646054" 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-25T01:07:10.645536" elapsed="0.000555"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:10.646659" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:10.646319" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:10.647344" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:10.646907" elapsed="0.000484"/>
</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-25T01:07:10.648156" elapsed="0.000037"/>
</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-25T01:07:10.648527" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:10.648317" elapsed="0.000288"/>
</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-25T01:07:10.648838" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:10.648640" elapsed="0.000291"/>
</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-25T01:07:10.649195" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:10.648964" elapsed="0.000303"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:10.648288" elapsed="0.001010"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:10.647852" elapsed="0.001480"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:10.647490" elapsed="0.001878"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:10.649460" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:07:10.649751" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:10.649816" 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-25T01:07:10.640858" elapsed="0.008991"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:10.650524" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:10.650634" 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-25T01:07:10.650115" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:10.651592" 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-25T01:07:10.651150" elapsed="0.000565">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:10.650766" elapsed="0.001049">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:10.650739" elapsed="0.001121">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-25T01:07:10.652102" elapsed="0.000032"/>
</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-25T01:07:10.652351" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:10.652442" elapsed="0.000021"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:10.633658" elapsed="0.018934">No leader found.</status>
</kw>
<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-25T01:07:11.663026" 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-25T01:07:11.662542" elapsed="0.000517"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:11.663590" 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-25T01:07:11.663230" elapsed="0.000386"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:11.663666" elapsed="0.000082"/>
</return>
<msg time="2026-04-25T01:07:11.663928" 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-25T01:07:11.662146" elapsed="0.001810"/>
</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-25T01:07:11.664136" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:11.665022" 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-25T01:07:11.664482" elapsed="0.000569"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:11.665461" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:11.665217" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:11.665872" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:11.665636" elapsed="0.000261"/>
</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-25T01:07:11.666332" 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-25T01:07:11.666589" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:11.666442" elapsed="0.000201"/>
</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-25T01:07:11.666808" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:11.666668" elapsed="0.000193"/>
</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-25T01:07:11.667039" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:11.666884" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:11.666422" elapsed="0.000692"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:11.666159" elapsed="0.000978"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:11.665948" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:11.667204" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:11.667407" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:11.667452" 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-25T01:07:11.660751" elapsed="0.006728"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:11.667991" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:11.668072" 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-25T01:07:11.667683" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:11.668721" 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-25T01:07:11.668394" elapsed="0.000442">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:11.668170" elapsed="0.000779">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:11.668150" elapsed="0.000869">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-25T01:07:11.669211" elapsed="0.000024"/>
</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-25T01:07:11.669406" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:11.669494" elapsed="0.000018"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:11.653753" elapsed="0.015856">No leader found.</status>
</kw>
<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-25T01:07:12.681809" 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-25T01:07:12.681088" elapsed="0.000756"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:12.682365" 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-25T01:07:12.682041" elapsed="0.000351"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:12.682513" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:07:12.682694" 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-25T01:07:12.680437" elapsed="0.002283"/>
</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-25T01:07:12.682882" elapsed="0.000198"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:12.683616" 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-25T01:07:12.683256" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:12.684081" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:12.683814" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:12.684536" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:12.684285" elapsed="0.000277"/>
</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-25T01:07:12.685051" elapsed="0.000027"/>
</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-25T01:07:12.685337" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:12.685178" elapsed="0.000216"/>
</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-25T01:07:12.685570" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:12.685420" elapsed="0.000206"/>
</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-25T01:07:12.685794" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:12.685650" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:12.685151" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:12.684825" elapsed="0.001067"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:12.684618" elapsed="0.001301"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:12.685975" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:07:12.686197" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:12.686246" 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-25T01:07:12.679311" elapsed="0.006958"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:12.686745" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:12.686825" 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-25T01:07:12.686446" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:12.687478" 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-25T01:07:12.687165" elapsed="0.000411">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:12.686919" elapsed="0.000728">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:12.686900" elapsed="0.000780">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-25T01:07:12.687836" elapsed="0.000022"/>
</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-25T01:07:12.688067" elapsed="0.000028"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:12.688160" elapsed="0.000021"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:12.670829" elapsed="0.017465">No leader found.</status>
</kw>
<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-25T01:07:13.694897" 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-25T01:07:13.694327" elapsed="0.000611"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:13.695546" 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-25T01:07:13.695176" elapsed="0.000403"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:13.695639" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T01:07:13.695842" 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-25T01:07:13.693825" elapsed="0.002048"/>
</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-25T01:07:13.696160" elapsed="0.000211"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:13.697064" 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-25T01:07:13.696583" elapsed="0.000515"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:13.697611" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:13.697305" elapsed="0.000339"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:13.698223" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:13.697901" elapsed="0.000354"/>
</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-25T01:07:13.698776" elapsed="0.000030"/>
</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-25T01:07:13.699121" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:13.698912" elapsed="0.000279"/>
</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-25T01:07:13.699407" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:13.699224" elapsed="0.000249"/>
</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-25T01:07:13.699689" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:13.699504" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:13.698888" elapsed="0.000892"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:13.698559" elapsed="0.001252"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:13.698319" elapsed="0.001526"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:13.699895" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:07:13.700161" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:13.700217" 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-25T01:07:13.692884" elapsed="0.007361"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:13.700814" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:13.700930" 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-25T01:07:13.700466" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:13.701707" 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-25T01:07:13.701340" elapsed="0.000468">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:13.701064" elapsed="0.000826">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:13.701041" elapsed="0.000887">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-25T01:07:13.702142" elapsed="0.000027"/>
</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-25T01:07:13.702363" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:13.702444" elapsed="0.000019"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:13.689102" elapsed="0.013480">No leader found.</status>
</kw>
<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-25T01:07:14.709363" 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-25T01:07:14.708737" elapsed="0.000665"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:14.710004" 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-25T01:07:14.709622" elapsed="0.000416"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:14.710097" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:07:14.710300" 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-25T01:07:14.708255" elapsed="0.002076"/>
</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-25T01:07:14.710600" elapsed="0.000211"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:14.711452" 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-25T01:07:14.711039" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:14.712004" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:14.711693" elapsed="0.000343"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:14.712518" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:14.712227" elapsed="0.000322"/>
</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-25T01:07:14.713119" elapsed="0.000030"/>
</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-25T01:07:14.713448" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:14.713256" elapsed="0.000262"/>
</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-25T01:07:14.713733" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:14.713550" elapsed="0.000249"/>
</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-25T01:07:14.714026" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:14.713828" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:14.713232" elapsed="0.000887"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:14.712849" elapsed="0.001309"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:14.712611" elapsed="0.001581"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:14.714242" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:07:14.714493" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:14.714551" 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-25T01:07:14.707314" elapsed="0.007265"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:14.715309" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:14.715401" 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-25T01:07:14.714811" elapsed="0.000619"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:14.716165" 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-25T01:07:14.715797" elapsed="0.000471">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:14.715517" elapsed="0.000835">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:14.715494" elapsed="0.000896">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-25T01:07:14.716586" elapsed="0.000027"/>
</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-25T01:07:14.716811" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:14.716912" elapsed="0.000022"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:14.703456" elapsed="0.013619">No leader found.</status>
</kw>
<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-25T01:07:15.728405" 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-25T01:07:15.727380" elapsed="0.001094"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:15.729619" 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-25T01:07:15.728855" elapsed="0.000822"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:15.729730" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:07:15.729908" 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-25T01:07:15.726482" elapsed="0.003452"/>
</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-25T01:07:15.730114" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:15.730946" 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-25T01:07:15.730532" elapsed="0.000470"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:15.731583" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:15.731246" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:15.732190" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:15.731826" elapsed="0.000400"/>
</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-25T01:07:15.732820" elapsed="0.000036"/>
</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-25T01:07:15.733224" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:15.733017" elapsed="0.000285"/>
</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-25T01:07:15.733537" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:15.733334" elapsed="0.000278"/>
</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-25T01:07:15.733840" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:15.733644" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:15.732987" elapsed="0.000958"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:15.732569" elapsed="0.001429"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:15.732298" elapsed="0.001739"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:15.734094" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:07:15.734369" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:15.734431" 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-25T01:07:15.724753" elapsed="0.009711"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:15.735116" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:15.735226" 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-25T01:07:15.734705" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:15.736089" 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-25T01:07:15.735663" elapsed="0.000558">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:15.735358" elapsed="0.000959">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:15.735332" elapsed="0.001029">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-25T01:07:15.736568" elapsed="0.000028"/>
</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-25T01:07:15.736767" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:15.736836" elapsed="0.000017"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:15.718191" elapsed="0.018795">No leader found.</status>
</kw>
<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-25T01:07:16.745751" 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-25T01:07:16.745125" elapsed="0.000670"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:16.746460" 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-25T01:07:16.746050" elapsed="0.000446"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:16.746564" elapsed="0.000050"/>
</return>
<msg time="2026-04-25T01:07:16.746799" 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-25T01:07:16.744538" elapsed="0.002296"/>
</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-25T01:07:16.747071" elapsed="0.000232"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:16.748012" 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-25T01:07:16.747528" elapsed="0.000522"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:16.748678" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:16.748342" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:16.749365" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:16.748927" elapsed="0.000475"/>
</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-25T01:07:16.749999" elapsed="0.000036"/>
</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-25T01:07:16.750361" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:16.750154" elapsed="0.000285"/>
</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-25T01:07:16.750671" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:16.750473" elapsed="0.000291"/>
</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-25T01:07:16.751039" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:16.750811" elapsed="0.000303"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:16.750127" elapsed="0.001019"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:16.749739" elapsed="0.001440"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:16.749474" elapsed="0.001742"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:16.751272" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:07:16.751550" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:16.751614" 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-25T01:07:16.743473" elapsed="0.008173"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:16.752292" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:16.752400" 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-25T01:07:16.751886" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:16.753395" 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-25T01:07:16.752907" elapsed="0.000598">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:16.752528" elapsed="0.001071">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:16.752503" elapsed="0.001139">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-25T01:07:16.753820" elapsed="0.000022"/>
</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-25T01:07:16.754012" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:16.754080" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:16.738088" elapsed="0.016097">No leader found.</status>
</kw>
<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-25T01:07:17.765349" 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-25T01:07:17.764312" elapsed="0.001107"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:17.766108" 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-25T01:07:17.765792" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:17.766183" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:07:17.766349" 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-25T01:07:17.763432" elapsed="0.002942"/>
</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-25T01:07:17.766532" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:17.767223" 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-25T01:07:17.766865" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:17.767650" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:17.767409" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:17.768199" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:17.767923" elapsed="0.000303"/>
</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-25T01:07:17.768705" elapsed="0.000025"/>
</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-25T01:07:17.768982" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:17.768818" elapsed="0.000242"/>
</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-25T01:07:17.769227" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:17.769085" elapsed="0.000196"/>
</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-25T01:07:17.769444" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:17.769303" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:17.768798" elapsed="0.000718"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:17.768526" elapsed="0.001015"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:17.768280" elapsed="0.001286"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:17.769606" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:17.769807" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:17.769852" 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-25T01:07:17.761747" elapsed="0.008128"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:17.770343" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:17.770420" 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-25T01:07:17.770062" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:17.771041" 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-25T01:07:17.770745" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:17.770515" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:17.770497" elapsed="0.000716">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-25T01:07:17.771365" 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-25T01:07:17.771537" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:17.771603" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:17.755320" elapsed="0.016386">No leader found.</status>
</kw>
<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-25T01:07:18.780898" 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-25T01:07:18.780279" elapsed="0.000663"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:18.781622" 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-25T01:07:18.781214" elapsed="0.000445"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:18.781725" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:07:18.781953" 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-25T01:07:18.779727" elapsed="0.002282"/>
</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-25T01:07:18.782229" elapsed="0.000228"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:18.783170" 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-25T01:07:18.782683" elapsed="0.000524"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:18.783762" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:18.783429" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:18.784357" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:18.784025" elapsed="0.000368"/>
</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-25T01:07:18.785064" elapsed="0.000035"/>
</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-25T01:07:18.785424" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:18.785218" elapsed="0.000285"/>
</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-25T01:07:18.785738" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:18.785537" elapsed="0.000277"/>
</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-25T01:07:18.786073" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:18.785847" elapsed="0.000301"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:18.785192" elapsed="0.000988"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:18.784791" elapsed="0.001421"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:18.784524" elapsed="0.001723"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:18.786303" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:07:18.786583" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:18.786648" 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-25T01:07:18.778701" elapsed="0.007980"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:18.787349" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:18.787458" 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-25T01:07:18.786927" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:18.788308" 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-25T01:07:18.787895" elapsed="0.000510">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:18.787588" elapsed="0.000907">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:18.787562" elapsed="0.000977">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-25T01:07:18.788752" elapsed="0.000031"/>
</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-25T01:07:18.789017" elapsed="0.000061"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:18.789148" elapsed="0.000022"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:18.772784" elapsed="0.016510">No leader found.</status>
</kw>
<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-25T01:07:19.800745" 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-25T01:07:19.799856" elapsed="0.000947"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.801739" 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-25T01:07:19.801189" elapsed="0.000598"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.801875" elapsed="0.000066"/>
</return>
<msg time="2026-04-25T01:07:19.802200" 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-25T01:07:19.799091" elapsed="0.003158"/>
</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-25T01:07:19.802552" elapsed="0.000306"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.803772" 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-25T01:07:19.803178" elapsed="0.000641"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.804565" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:19.804130" elapsed="0.000479"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.805461" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:19.804899" elapsed="0.000614"/>
</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-25T01:07:19.806203" elapsed="0.000035"/>
</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-25T01:07:19.806656" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.806444" elapsed="0.000291"/>
</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-25T01:07:19.806995" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.806774" elapsed="0.000297"/>
</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-25T01:07:19.807285" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.807104" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.806414" elapsed="0.000952"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.805933" elapsed="0.001458"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.805617" elapsed="0.001802"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:19.807461" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:07:19.807670" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:19.807716" 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-25T01:07:19.797864" elapsed="0.009875"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.808223" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:19.808302" 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-25T01:07:19.807915" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.808922" 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-25T01:07:19.808620" elapsed="0.000401">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:19.808397" elapsed="0.000709">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:19.808379" elapsed="0.000785">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-25T01:07:19.809345" elapsed="0.000024"/>
</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-25T01:07:19.809545" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.809624" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:19.790598" elapsed="0.019155">No leader found.</status>
</kw>
<msg time="2026-04-25T01:07:19.809871" level="FAIL">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</msg>
<var>${inv_conf_leader}</var>
<var>${inv_conf_followers_list}</var>
<arg>10s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Get_Leader_And_Followers_For_Shard</arg>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:07:09.621431" elapsed="10.188590">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>config inventory Leader is ${inv_conf_leader} and followers are ${inv_conf_followers_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.810276" elapsed="0.000028"/>
</kw>
<return>
<value>${inv_conf_leader}</value>
<value>${inv_conf_followers_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.810353" elapsed="0.000016"/>
</return>
<var>${inventory_leader}</var>
<var>${inventory_followers}</var>
<doc>Check Status for Inventory Config shard in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:09.619148" elapsed="10.191320">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_1}</var>
<arg>${Inventory_Followers}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.810679" elapsed="0.000024"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_2}</var>
<arg>${Inventory_Followers}</arg>
<arg>1</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.810882" elapsed="0.000021"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${Inventory_Leader_List}</var>
<arg>${inventory_leader}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.811088" elapsed="0.000022"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${Inventory_Follower_Node1_List}</var>
<arg>${Follower_Node_1}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.811274" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_1}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.811472" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_2}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.811660" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.811888" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader_List}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.812092" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Follower_Node1_List}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:19.812280" elapsed="0.000020"/>
</kw>
<doc>Find a follower in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:07:09.606044" elapsed="10.206412">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s1-t3" name="Start Mininet Connect To Follower Node1" line="61">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.816095" elapsed="0.000259"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.815811" elapsed="0.000605"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.817643" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.817508" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.817487" elapsed="0.000236"/>
</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-25T01:07:19.823283" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.823171" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.823150" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.824386" 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-25T01:07:19.823982" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.824865" 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-25T01:07:19.824577" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.824936" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T01:07:19.825170" 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-25T01:07:19.823588" elapsed="0.001627"/>
</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-25T01:07:19.825594" 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-25T01:07:19.825836" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.825691" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.825675" elapsed="0.000237"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.825446" elapsed="0.000489"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.825278" elapsed="0.000698"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.822756" elapsed="0.003294"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.817163" elapsed="0.008968"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.816590" elapsed="0.009600"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.813441" elapsed="0.012809"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:07:19.831182" level="FAIL">Variable '${Follower_Node_1}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_1}_IP}</arg>
<arg>--topo linear,${switch_count}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.826627" elapsed="0.004600">Variable '${Follower_Node_1}' not found.</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-25T01:07:19.831448" elapsed="0.000022"/>
</kw>
<doc>Start mininet with connection to Follower Node1.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.812701" elapsed="0.018926">Variable '${Follower_Node_1}' not found.</status>
</test>
<test id="s1-s1-t4" name="Add Bulk Flow From Follower" line="69">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.835656" elapsed="0.000240"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.835274" elapsed="0.000680"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.836990" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.836857" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.836837" elapsed="0.000300"/>
</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-25T01:07:19.842182" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.842054" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.842025" elapsed="0.000228"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.843304" 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-25T01:07:19.842884" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.843783" 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-25T01:07:19.843493" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.843854" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:07:19.844032" 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-25T01:07:19.842503" elapsed="0.001554"/>
</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-25T01:07:19.844422" 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-25T01:07:19.844664" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.844519" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.844503" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.844278" elapsed="0.000490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.844116" elapsed="0.000678"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.841645" elapsed="0.003204"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.836563" elapsed="0.008344"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.836129" elapsed="0.008823"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.832689" elapsed="0.012335"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:07:19.853774" level="FAIL">Variable '${temp_json_config_add}' not found.</msg>
<arg>${temp_json_config_add}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.849416" elapsed="0.004407">Variable '${temp_json_config_add}' not found.</status>
</kw>
<doc>10000 Flows ( 10000 per DPN) in 1 DPN added via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.832016" elapsed="0.022011">Variable '${temp_json_config_add}' not found.</status>
</test>
<test id="s1-s1-t5" name="Get Bulk Flows and Verify In Inventory Leader" line="73">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.857930" elapsed="0.000336"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.857614" elapsed="0.000731"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.859472" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.859328" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.859304" elapsed="0.000245"/>
</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-25T01:07:19.864834" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.864709" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.864688" elapsed="0.000220"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.866307" 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-25T01:07:19.865775" elapsed="0.000569"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.866908" 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-25T01:07:19.866552" elapsed="0.000387"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.867015" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:07:19.867222" 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-25T01:07:19.865292" elapsed="0.001958"/>
</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-25T01:07:19.867723" elapsed="0.000111"/>
</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-25T01:07:19.868134" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.867933" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.867912" elapsed="0.000309"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.867539" elapsed="0.000710"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.867342" elapsed="0.000939"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.864276" elapsed="0.004072"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.859010" elapsed="0.009402"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.858516" elapsed="0.009950"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.854903" elapsed="0.013625"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:07:19.881993" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.877706" elapsed="0.004328">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Initiate get operation and check flow count across cluster nodes</doc>
<status status="FAIL" start="2026-04-25T01:07:19.854287" elapsed="0.027924">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s1-t6" name="Verify Flows In Switch Before Cluster Restart" line="81">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.885636" elapsed="0.000216"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.885369" elapsed="0.000538"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.886905" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.886793" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.886774" elapsed="0.000215"/>
</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-25T01:07:19.891884" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.891776" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.891758" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.892954" 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-25T01:07:19.892571" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.893463" 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-25T01:07:19.893174" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.893534" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:07:19.893688" 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-25T01:07:19.892194" elapsed="0.001519"/>
</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-25T01:07:19.894154" 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-25T01:07:19.894399" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.894252" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.894235" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.893917" elapsed="0.000580"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.893765" elapsed="0.000757"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.891416" elapsed="0.003158"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.886508" elapsed="0.008120"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.886075" elapsed="0.008597"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.883051" elapsed="0.011672"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:07:19.899087" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:07:19.894987" elapsed="0.004138">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch before cluster restart.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.882454" elapsed="0.016811">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s1-t7" name="Stop Mininet Connected To Follower Node1 and Exit" line="88">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.902599" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.902329" elapsed="0.000535"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.903848" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.903738" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.903719" elapsed="0.000198"/>
</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-25T01:07:19.908828" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.908721" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.908703" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.909906" 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-25T01:07:19.909526" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.910399" 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-25T01:07:19.910112" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.910470" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:19.910622" 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-25T01:07:19.909146" elapsed="0.001501"/>
</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-25T01:07:19.911012" elapsed="0.000023"/>
</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-25T01:07:19.911266" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.911119" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.911102" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.910845" elapsed="0.000520"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.910698" elapsed="0.000691"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.908363" elapsed="0.003078"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.903456" elapsed="0.008039"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.903033" elapsed="0.008506"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.899953" elapsed="0.011638"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:07:19.919889" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:07:19.915805" elapsed="0.004122">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:07:19.920155" elapsed="0.000025"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.899462" elapsed="0.020838">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s1-t8" name="Start Mininet Reconnect To Follower Node1" line="93">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.923609" elapsed="0.000216"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.923343" elapsed="0.000537"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.924860" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.924751" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.924732" 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-25T01:07:19.929864" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.929758" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.929740" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.930979" 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-25T01:07:19.930585" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.931468" 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-25T01:07:19.931172" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.931541" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:07:19.931696" 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-25T01:07:19.930207" elapsed="0.001515"/>
</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-25T01:07:19.932090" elapsed="0.000024"/>
</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-25T01:07:19.932338" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.932191" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.932174" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.931927" elapsed="0.000511"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.931774" elapsed="0.000690"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.929397" elapsed="0.003120"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.924467" elapsed="0.008106"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.924044" elapsed="0.008574"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.921022" elapsed="0.011650"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:07:19.937170" level="FAIL">Variable '${Follower_Node_1}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_1}_IP}</arg>
<arg>--topo linear,${switch_count}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.932996" elapsed="0.004212">Variable '${Follower_Node_1}' not found.</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-25T01:07:19.937427" elapsed="0.000022"/>
</kw>
<doc>Start mininet with reconnection to follower node1.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.920501" elapsed="0.017084">Variable '${Follower_Node_1}' not found.</status>
</test>
<test id="s1-s1-t9" name="Verify Flows In Switch Reconnected To Follower Node1" line="101">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.941021" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.940741" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.942296" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.942183" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.942164" elapsed="0.000200"/>
</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-25T01:07:19.947263" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.947156" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.947138" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.948327" 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-25T01:07:19.947931" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.948804" 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-25T01:07:19.948514" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.948875" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:07:19.949041" 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-25T01:07:19.947552" elapsed="0.001513"/>
</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-25T01:07:19.949431" 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-25T01:07:19.949721" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.949570" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.949552" elapsed="0.000245"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.949282" elapsed="0.000539"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.949116" elapsed="0.000729"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.946783" elapsed="0.003115"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.941881" elapsed="0.008071"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.941457" elapsed="0.008710"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.938440" elapsed="0.011780"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:07:19.954534" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:07:19.950422" elapsed="0.004152">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify 10000 flows per DPN installed in switch after it is reconnected to follower node1.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.937837" elapsed="0.016873">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s1-t10" name="Stop Mininet Connected To Follower Node1" line="108">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.957899" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.957635" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.959159" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.959050" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.959032" elapsed="0.000194"/>
</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-25T01:07:19.964158" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.964049" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.964031" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.965309" 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-25T01:07:19.964837" elapsed="0.000500"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.965790" 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-25T01:07:19.965501" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.965862" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:07:19.966036" 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-25T01:07:19.964450" elapsed="0.001611"/>
</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-25T01:07:19.966433" 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-25T01:07:19.966743" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.966594" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.966575" elapsed="0.000245"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.966278" elapsed="0.000565"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.966113" elapsed="0.000756"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.963662" elapsed="0.003260"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.958749" elapsed="0.008243"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.958331" elapsed="0.008708"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.955380" elapsed="0.011710"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:07:19.975819" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:07:19.971649" elapsed="0.004220">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:07:19.976241" elapsed="0.000026"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.954901" elapsed="0.021505">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s1-t11" name="Start Mininet Connect To Follower Node2" line="113">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.979789" elapsed="0.000260"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.979518" elapsed="0.000588"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.981157" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.981016" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.980994" elapsed="0.000235"/>
</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-25T01:07:19.986213" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.986106" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.986088" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.987320" 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-25T01:07:19.986917" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:19.987793" 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-25T01:07:19.987508" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:19.987863" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:07:19.988035" 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-25T01:07:19.986532" elapsed="0.001529"/>
</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-25T01:07:19.988414" 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-25T01:07:19.988656" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:19.988511" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:19.988494" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:19.988270" elapsed="0.000486"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:19.988116" elapsed="0.000666"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:19.985711" elapsed="0.003124"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.980709" elapsed="0.008181"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.980261" elapsed="0.008672"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.977174" elapsed="0.011827"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:07:19.993517" level="FAIL">Variable '${Follower_Node_2}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_2}_IP}</arg>
<arg>--topo linear,${switch_count}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.989309" elapsed="0.004247">Variable '${Follower_Node_2}' not found.</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-25T01:07:19.993777" elapsed="0.000022"/>
</kw>
<doc>Start mininet with connection to follower node2.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.976631" elapsed="0.017288">Variable '${Follower_Node_2}' not found.</status>
</test>
<test id="s1-s1-t12" name="Verify Flows In Switch Connected To Follower Node2" line="121">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:19.997287" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:19.997002" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:19.998546" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:19.998437" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:19.998419" elapsed="0.000194"/>
</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-25T01:07:20.003479" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.003373" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.003355" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.004626" 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-25T01:07:20.004195" elapsed="0.000459"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.005121" 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-25T01:07:20.004818" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.005218" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:07:20.005373" 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-25T01:07:20.003764" elapsed="0.001634"/>
</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-25T01:07:20.005736" 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-25T01:07:20.005991" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.005834" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.005817" elapsed="0.000251"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.005595" elapsed="0.000496"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.005449" elapsed="0.000666"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.003014" elapsed="0.003152"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:19.998141" elapsed="0.008079"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:19.997703" elapsed="0.008561"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:19.994721" elapsed="0.011595"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:07:20.010573" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:07:20.006525" elapsed="0.004085">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify 10000 flows per DPN installed in switch after it is connected to follower node2.</doc>
<status status="FAIL" start="2026-04-25T01:07:19.994160" elapsed="0.016583">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s1-t13" name="Stop Mininet Connected To Follower Node2" line="128">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:20.013935" elapsed="0.000224"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:20.013673" elapsed="0.000540"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:20.015193" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.015084" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.015066" elapsed="0.000194"/>
</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-25T01:07:20.020155" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.020049" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.020032" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.021236" 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-25T01:07:20.020823" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.021712" 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-25T01:07:20.021426" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.021787" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.021937" 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-25T01:07:20.020444" elapsed="0.001531"/>
</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-25T01:07:20.022318" 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-25T01:07:20.022557" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.022414" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.022398" elapsed="0.000265"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.022176" elapsed="0.000514"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.022029" elapsed="0.000686"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.019679" elapsed="0.003089"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.014785" elapsed="0.008037"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:20.014364" elapsed="0.008502"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:20.011408" elapsed="0.011509"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:07:20.031148" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:07:20.027099" elapsed="0.004086">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:07:20.031395" elapsed="0.000024"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.010936" elapsed="0.020596">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s1-t14" name="Start Mininet Connect To Inventory Leader" line="133">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:20.035716" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:20.035450" elapsed="0.000550"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:20.036985" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.036861" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.036842" elapsed="0.000214"/>
</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-25T01:07:20.041976" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.041858" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.041840" elapsed="0.000206"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.043037" 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-25T01:07:20.042640" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.043511" 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-25T01:07:20.043224" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.043581" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.043734" 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-25T01:07:20.042267" elapsed="0.001493"/>
</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-25T01:07:20.044112" 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-25T01:07:20.044352" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.044208" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.044192" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.043955" elapsed="0.000494"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.043810" elapsed="0.000663"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.041500" elapsed="0.003024"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.036574" elapsed="0.008005"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:20.036152" elapsed="0.008471"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:20.032217" elapsed="0.012457"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:07:20.049207" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Inventory_Leader}_IP}</arg>
<arg>--topo linear,${switch_count}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.044979" elapsed="0.004265">Variable '${Inventory_Leader}' not found.</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-25T01:07:20.049445" elapsed="0.000021"/>
</kw>
<doc>Start mininet with connection to inventroy leader.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.031720" elapsed="0.017899">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s1-t15" name="Verify Flows In Switch Connected To Leader" line="141">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:20.053051" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:20.052774" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:20.054299" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.054192" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.054173" elapsed="0.000194"/>
</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-25T01:07:20.059294" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.059168" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.059151" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.060353" 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-25T01:07:20.059960" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.060825" 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-25T01:07:20.060540" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.060910" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.061079" 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-25T01:07:20.059583" elapsed="0.001531"/>
</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-25T01:07:20.061474" 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-25T01:07:20.061713" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.061569" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.061554" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.061332" elapsed="0.000483"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.061183" elapsed="0.000656"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.058795" elapsed="0.003096"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.053892" elapsed="0.008053"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:20.053479" elapsed="0.008525"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:20.050530" elapsed="0.011527"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:07:20.066383" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:07:20.062254" elapsed="0.004167">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify 10000 flows per DPN installed in switch after it is connected to inventory leader.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.049848" elapsed="0.016706">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s1-t16" name="Stop Mininet Connected To Inventory Leader" line="148">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:20.069771" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:20.069508" elapsed="0.000541"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:20.071019" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.070896" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.070878" elapsed="0.000209"/>
</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-25T01:07:20.075951" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.075846" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.075829" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.077018" 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-25T01:07:20.076623" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.077564" 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-25T01:07:20.077236" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.077635" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.077788" 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-25T01:07:20.076253" elapsed="0.001560"/>
</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-25T01:07:20.078168" 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-25T01:07:20.078406" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.078264" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.078248" elapsed="0.000232"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.078025" elapsed="0.000478"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.077862" elapsed="0.000665"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.075484" elapsed="0.003094"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.070615" elapsed="0.008017"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:20.070201" elapsed="0.008475"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:20.067244" elapsed="0.011484"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:07:20.086870" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:07:20.082849" elapsed="0.004058">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:07:20.087127" elapsed="0.000025"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.066751" elapsed="0.020513">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s1-t17" name="Delete All Flows From Follower Node1" line="153">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:20.090553" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:20.090289" elapsed="0.000526"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:20.091796" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.091684" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.091666" elapsed="0.000197"/>
</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-25T01:07:20.096739" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.096634" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.096616" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.097828" 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-25T01:07:20.097452" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.098316" 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-25T01:07:20.098029" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.098386" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:07:20.098536" 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-25T01:07:20.097042" elapsed="0.001519"/>
</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-25T01:07:20.098901" 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-25T01:07:20.099156" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.099012" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.098995" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.098759" elapsed="0.000495"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.098612" elapsed="0.000666"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.096277" elapsed="0.003052"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.091400" elapsed="0.008019"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:20.090981" elapsed="0.008483"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:20.088033" elapsed="0.011483"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:07:20.108123" level="FAIL">Variable '${temp_json_config_del}' not found.</msg>
<arg>${temp_json_config_del}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.103872" elapsed="0.004290">Variable '${temp_json_config_del}' not found.</status>
</kw>
<doc>10000 Flows deleted via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.087487" elapsed="0.020810">Variable '${temp_json_config_del}' not found.</status>
</test>
<test id="s1-s1-t18" name="Verify No Flows In Inventory Leader" line="160">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:20.111485" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:20.111222" elapsed="0.000525"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:20.112726" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.112618" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.112601" elapsed="0.000193"/>
</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-25T01:07:20.117710" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.117604" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.117587" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.118762" 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-25T01:07:20.118386" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.119250" 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-25T01:07:20.118948" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.119320" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.119471" 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-25T01:07:20.118012" elapsed="0.001483"/>
</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-25T01:07:20.119831" 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-25T01:07:20.120086" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.119926" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.119910" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.119689" elapsed="0.000496"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.119545" elapsed="0.000665"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.117246" elapsed="0.003016"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.112335" elapsed="0.007980"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:20.111897" elapsed="0.008462"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:20.108952" elapsed="0.011458"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:07:20.132751" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_del}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.128536" elapsed="0.004252">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Verify flow count is 0 across cluster nodes.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.108486" elapsed="0.024438">Variable '${temp_json_config_get}' not found.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-25T01:07:20.133637" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-25T01:07:20.133549" elapsed="0.000140"/>
</kw>
<doc>Test suite for Cluster with Bulk Flows - Reconcilliation in a multi DPN environment</doc>
<status status="FAIL" start="2026-04-25T01:07:08.857690" elapsed="11.276032"/>
</suite>
<suite id="s1-s2" name="Cluster HA Data Recovery BulkFlow 2Node Cluster" source="/w/workspace/openflowplugin-csit-3node-clustering-bulkomatic-only-vanadium/test/csit/suites/openflowplugin/Clustering_Bulkomatic/020__Cluster_HA_Data_Recovery_BulkFlow_2Node_Cluster.robot">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils" type="SETUP">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.218306" 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-25T01:07:20.214029" elapsed="0.004331"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T01:07:20.213776" elapsed="0.004653"/>
</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-25T01:07:20.223297" 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-25T01:07:20.219531" elapsed="0.003794"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T01:07:20.223534" elapsed="0.000049"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.223413" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.223388" elapsed="0.000251"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.224161" 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-25T01:07:20.223798" elapsed="0.000407"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.224688" 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-25T01:07:20.224370" elapsed="0.000344"/>
</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-25T01:07:20.225273" elapsed="0.000294"/>
</kw>
<msg time="2026-04-25T01:07:20.225666" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T01:07:20.225715" 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-25T01:07:20.224883" elapsed="0.000855"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.226300" 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-25T01:07:20.225910" elapsed="0.000417"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.227310" 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-25T01:07:20.227045" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.227740" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:20.227487" elapsed="0.000279"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.228232" 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-25T01:07:20.227924" elapsed="0.000335"/>
</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-25T01:07:20.230773" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.230583" elapsed="0.000263"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.228312" elapsed="0.002561"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.231442" 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-25T01:07:20.231050" elapsed="0.000435"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.232060" 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-25T01:07:20.231650" elapsed="0.000453"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.232631" 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-25T01:07:20.232265" elapsed="0.000407"/>
</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-25T01:07:20.226581" elapsed="0.006149"/>
</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-25T01:07:20.219186" elapsed="0.013600"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.232974" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.232850" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.232832" 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-25T01:07:20.236268" 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-25T01:07:20.235872" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.236803" 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-25T01:07:20.236511" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.236875" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:07:20.237052" 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-25T01:07:20.235538" elapsed="0.001539"/>
</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-25T01:07:20.237429" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.237250" elapsed="0.000240"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.237130" elapsed="0.000386"/>
</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-25T01:07:20.233297" elapsed="0.004273"/>
</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-25T01:07:20.237726" elapsed="0.000210"/>
</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-25T01:07:20.238256" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.238118" elapsed="0.000203"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.238001" elapsed="0.000345"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T01:07:20.218727" elapsed="0.019673"/>
</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-25T01:07:20.240979" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.240857" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.240840" elapsed="0.000209"/>
</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-25T01:07:20.245837" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.245732" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.245715" elapsed="0.000188"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.246842" 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-25T01:07:20.246467" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.247334" 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-25T01:07:20.247046" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.247405" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.247556" 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-25T01:07:20.246142" elapsed="0.001439"/>
</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-25T01:07:20.247920" 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-25T01:07:20.248178" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.248033" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.248016" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.247778" elapsed="0.000498"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.247632" elapsed="0.000669"/>
</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-25T01:07:20.245449" elapsed="0.002903"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.238980" elapsed="0.009426"/>
</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-25T01:07:20.238553" elapsed="0.009894"/>
</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-25T01:07:20.213388" elapsed="0.035107"/>
</kw>
<test id="s1-s2-t1" name="Check Shards Status and Initialize Variables" line="30">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:20.251629" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:20.251366" elapsed="0.000528"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:20.252917" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.252808" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.252790" elapsed="0.000211"/>
</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-25T01:07:20.257893" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.257788" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.257771" elapsed="0.000188"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.258940" 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-25T01:07:20.258567" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.259428" 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-25T01:07:20.259144" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.259498" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.259648" 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-25T01:07:20.258196" elapsed="0.001476"/>
</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-25T01:07:20.260177" 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-25T01:07:20.260440" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.260275" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.260259" elapsed="0.000257"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.259912" elapsed="0.000627"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.259723" elapsed="0.000840"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.257435" elapsed="0.003180"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.252519" elapsed="0.008150"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:20.252094" elapsed="0.008620"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:20.249101" elapsed="0.011669"/>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:07:20.282094" elapsed="0.000229"/>
</kw>
<msg time="2026-04-25T01:07:20.282372" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:07:20.281365" elapsed="0.001058"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:07:20.280862" elapsed="0.001637"/>
</kw>
<msg time="2026-04-25T01:07:20.282546" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:07:20.272135" elapsed="0.010455"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:07:20.271735" elapsed="0.010928"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.283126" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:07:20.282855" elapsed="0.000316"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:07:20.288196" 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-25T01:07:20.287806" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.288709" 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-25T01:07:20.288381" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.288817" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:07:20.288987" 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-25T01:07:20.287438" elapsed="0.001574"/>
</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-25T01:07:20.289195" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.289931" level="INFO">${ds_type} = operational</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-25T01:07:20.289590" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.290376" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:20.290135" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.290787" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:20.290551" elapsed="0.000261"/>
</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-25T01:07:20.291229" elapsed="0.000025"/>
</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-25T01:07:20.291480" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.291335" elapsed="0.000199"/>
</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-25T01:07:20.291697" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.291557" elapsed="0.000193"/>
</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-25T01:07:20.291913" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.291773" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.291318" elapsed="0.000683"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.291060" elapsed="0.000964"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.290858" elapsed="0.001191"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:20.292088" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.292285" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:20.292330" 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-25T01:07:20.286719" elapsed="0.005634"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.292801" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:20.292878" 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-25T01:07:20.292525" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.293511" 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-25T01:07:20.293231" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:20.292987" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:20.292952" elapsed="0.000734">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-25T01:07:20.293839" elapsed="0.000022"/>
</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-25T01:07:20.294029" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.294096" elapsed="0.000015"/>
</return>
<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>
<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-25T01:07:20.284134" elapsed="0.010068">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:07:20.283900" elapsed="0.010370">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:07:20.283771" elapsed="0.010555">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.283393" elapsed="0.011026">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:20.294653" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.261012" elapsed="0.033796">No leader found.</status>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<var>${temp_json_config_add}</var>
<arg>${orig_json_config_add}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Add json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:20.295278" elapsed="0.000026"/>
</kw>
<kw name="Set DPN And Flow Count In Json Get" owner="BulkomaticKeywords">
<var>${temp_json_config_get}</var>
<arg>${orig_json_config_get}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Get json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:20.295563" elapsed="0.000023"/>
</kw>
<kw name="Set DPN And Flow Count In Json Del" owner="BulkomaticKeywords">
<var>${temp_json_config_del}</var>
<arg>${orig_json_config_del}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Del json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:20.295853" elapsed="0.000023"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_add}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:20.296081" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_get}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:20.296277" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_del}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:20.296468" elapsed="0.000020"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.248550" elapsed="0.048070">No leader found.</status>
</test>
<test id="s1-s2-t2" name="Get Inventory Follower Before Leader Restart" line="49">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:20.299688" elapsed="0.000205"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:20.299427" elapsed="0.000521"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:20.300925" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.300809" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.300791" elapsed="0.000235"/>
</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-25T01:07:20.306016" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:20.305894" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:20.305876" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.307081" 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-25T01:07:20.306687" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.307550" 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-25T01:07:20.307266" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.307621" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:07:20.307772" 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-25T01:07:20.306306" elapsed="0.001490"/>
</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-25T01:07:20.308151" 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-25T01:07:20.308398" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.308247" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.308231" elapsed="0.000243"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.308009" elapsed="0.000487"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.307847" elapsed="0.000674"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:20.305533" elapsed="0.003039"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:20.300526" elapsed="0.008100"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:20.300114" elapsed="0.008556"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:20.297338" elapsed="0.011382"/>
</kw>
<kw name="Get InventoryConfig Shard Status" owner="ClusterOpenFlow">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<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-25T01:07:20.316598" 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-25T01:07:20.316221" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.317128" 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-25T01:07:20.316824" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:20.317211" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:20.317363" 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-25T01:07:20.315833" elapsed="0.001554"/>
</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-25T01:07:20.317540" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.318206" 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-25T01:07:20.317859" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.318629" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:20.318391" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.319052" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:20.318801" elapsed="0.000277"/>
</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-25T01:07:20.319468" 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-25T01:07:20.319712" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.319570" elapsed="0.000197"/>
</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-25T01:07:20.319929" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.319790" elapsed="0.000207"/>
</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-25T01:07:20.320162" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:20.320021" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:20.319554" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:20.319303" elapsed="0.000954"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.319124" elapsed="0.001157"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:20.320319" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T01:07:20.320513" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:20.320558" 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-25T01:07:20.315088" elapsed="0.005493"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.321032" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:20.321108" 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-25T01:07:20.320755" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:20.321710" 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-25T01:07:20.321446" elapsed="0.000327">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:20.321232" elapsed="0.000603">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:20.321214" elapsed="0.000652">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-25T01:07:20.322031" elapsed="0.000023"/>
</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-25T01:07:20.322204" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:20.322268" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:20.312611" elapsed="0.009760">No leader found.</status>
</kw>
<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-25T01:07:21.356085" 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-25T01:07:21.355616" elapsed="0.000502"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:21.356587" 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-25T01:07:21.356288" elapsed="0.000392"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:21.356729" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:07:21.356896" 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-25T01:07:21.355223" elapsed="0.001697"/>
</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-25T01:07:21.357093" elapsed="0.000184"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:21.357781" 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-25T01:07:21.357440" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:21.358229" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:21.357983" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:21.358644" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:21.358405" elapsed="0.000265"/>
</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-25T01:07:21.359127" elapsed="0.000039"/>
</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-25T01:07:21.359470" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:21.359271" elapsed="0.000273"/>
</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-25T01:07:21.359746" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:21.359573" elapsed="0.000242"/>
</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-25T01:07:21.360052" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:21.359844" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:21.359248" elapsed="0.000888"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:21.358912" elapsed="0.001248"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:21.358719" elapsed="0.001465"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:21.360224" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:07:21.360437" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:21.360483" 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-25T01:07:21.354419" elapsed="0.006087"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:21.360977" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:21.361058" 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-25T01:07:21.360680" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:21.361687" 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-25T01:07:21.361402" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:21.361152" elapsed="0.000689">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:21.361133" elapsed="0.000743">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-25T01:07:21.362048" elapsed="0.000022"/>
</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-25T01:07:21.362226" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:21.362301" elapsed="0.000019"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:21.323429" elapsed="0.038986">No leader found.</status>
</kw>
<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-25T01:07:22.372721" 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-25T01:07:22.371929" elapsed="0.000840"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:22.373498" 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-25T01:07:22.373024" elapsed="0.000511"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:22.373601" elapsed="0.000130"/>
</return>
<msg time="2026-04-25T01:07:22.373918" 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-25T01:07:22.371395" elapsed="0.002558"/>
</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-25T01:07:22.374193" elapsed="0.000232"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:22.375156" 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-25T01:07:22.374652" elapsed="0.000542"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:22.375760" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:22.375420" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:22.376370" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:22.376026" elapsed="0.000381"/>
</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-25T01:07:22.377000" elapsed="0.000035"/>
</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-25T01:07:22.377409" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:22.377153" elapsed="0.000341"/>
</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-25T01:07:22.377732" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:22.377530" elapsed="0.000259"/>
</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-25T01:07:22.377956" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:22.377813" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:22.377127" elapsed="0.000920"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:22.376743" elapsed="0.001328"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:22.376477" elapsed="0.001621"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:22.378138" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:07:22.378339" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:22.378386" 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-25T01:07:22.370365" elapsed="0.008045"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:22.378863" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:22.378941" 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-25T01:07:22.378584" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:22.379552" 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-25T01:07:22.379273" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:22.379053" elapsed="0.000638">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:22.379035" elapsed="0.000688">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-25T01:07:22.379875" 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-25T01:07:22.380064" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:22.380132" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:22.363632" elapsed="0.016603">No leader found.</status>
</kw>
<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-25T01:07:23.388889" 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-25T01:07:23.388190" elapsed="0.000744"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:23.389894" 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-25T01:07:23.389258" elapsed="0.000764"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:23.390123" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T01:07:23.390399" 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-25T01:07:23.387593" elapsed="0.002843"/>
</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-25T01:07:23.390759" elapsed="0.000316"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:23.392041" 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-25T01:07:23.391412" elapsed="0.000670"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:23.392740" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:23.392382" elapsed="0.000398"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:23.393492" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:23.393063" elapsed="0.000468"/>
</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-25T01:07:23.394228" elapsed="0.000037"/>
</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-25T01:07:23.394599" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:23.394389" elapsed="0.000288"/>
</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-25T01:07:23.394945" elapsed="0.000068"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:23.394712" elapsed="0.000372"/>
</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-25T01:07:23.395420" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:23.395134" elapsed="0.000368"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:23.394361" elapsed="0.001174"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:23.393917" elapsed="0.001651"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:23.393608" elapsed="0.001997"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:23.395709" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T01:07:23.396033" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:23.396100" 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-25T01:07:23.386123" elapsed="0.010010"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:23.396821" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:23.396953" 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-25T01:07:23.396381" elapsed="0.000633"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:23.398082" 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-25T01:07:23.397524" elapsed="0.000695">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:23.397183" elapsed="0.001166">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:23.397090" elapsed="0.001321">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-25T01:07:23.398720" elapsed="0.000047"/>
</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-25T01:07:23.399120" elapsed="0.000038"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:23.399229" elapsed="0.000022"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:23.381651" elapsed="0.017734">No leader found.</status>
</kw>
<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-25T01:07:24.410081" 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-25T01:07:24.409435" elapsed="0.000679"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:24.410595" 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-25T01:07:24.410289" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:24.410671" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:07:24.410840" 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-25T01:07:24.408551" elapsed="0.002314"/>
</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-25T01:07:24.411110" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:24.411802" 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-25T01:07:24.411450" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:24.412257" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:24.412006" elapsed="0.000277"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:24.412683" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:24.412435" elapsed="0.000274"/>
</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-25T01:07:24.413146" elapsed="0.000025"/>
</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-25T01:07:24.413405" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:24.413256" elapsed="0.000206"/>
</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-25T01:07:24.413668" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:24.413509" elapsed="0.000216"/>
</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-25T01:07:24.413893" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:24.413749" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:24.413237" elapsed="0.000745"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:24.412957" elapsed="0.001051"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:24.412762" elapsed="0.001272"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:24.414074" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:24.414278" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:24.414326" 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-25T01:07:24.406858" elapsed="0.007492"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:24.414808" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:24.414887" 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-25T01:07:24.414525" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:24.415502" 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-25T01:07:24.415218" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:24.414996" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:24.414977" elapsed="0.000696">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-25T01:07:24.415827" elapsed="0.000022"/>
</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-25T01:07:24.416019" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:24.416086" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:24.400458" elapsed="0.015734">No leader found.</status>
</kw>
<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-25T01:07:25.426023" 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-25T01:07:25.425131" elapsed="0.000942"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:25.426758" 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-25T01:07:25.426324" elapsed="0.000471"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:25.426879" elapsed="0.000056"/>
</return>
<msg time="2026-04-25T01:07:25.427153" 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-25T01:07:25.424541" elapsed="0.002648"/>
</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-25T01:07:25.427414" elapsed="0.000239"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:25.428538" 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-25T01:07:25.428031" elapsed="0.000546"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:25.429207" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:25.428813" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:25.429851" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:25.429464" elapsed="0.000435"/>
</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-25T01:07:25.430530" elapsed="0.000035"/>
</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-25T01:07:25.430995" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:25.430699" elapsed="0.000550"/>
</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-25T01:07:25.431494" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:25.431287" elapsed="0.000283"/>
</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-25T01:07:25.431802" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:25.431602" elapsed="0.000283"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:25.430670" elapsed="0.001249"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:25.430280" elapsed="0.001674"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:25.429997" elapsed="0.002017"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:25.432071" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:07:25.432360" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:25.432424" 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-25T01:07:25.423465" elapsed="0.008992"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:25.433178" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:25.433298" 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-25T01:07:25.432704" elapsed="0.000629"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:25.434249" 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-25T01:07:25.433791" elapsed="0.000561">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:25.433433" elapsed="0.001012">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:25.433406" elapsed="0.001085">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-25T01:07:25.434734" elapsed="0.000036"/>
</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-25T01:07:25.434979" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:25.435069" elapsed="0.000020"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:25.417321" elapsed="0.017877">No leader found.</status>
</kw>
<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-25T01:07:26.446252" 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-25T01:07:26.445216" elapsed="0.001105"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:26.447053" 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-25T01:07:26.446697" elapsed="0.000383"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:26.447130" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:07:26.447298" 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-25T01:07:26.444323" elapsed="0.003000"/>
</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-25T01:07:26.447482" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:26.448169" 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-25T01:07:26.447815" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:26.448703" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:26.448445" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:26.449145" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:26.448882" elapsed="0.000289"/>
</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-25T01:07:26.449587" elapsed="0.000025"/>
</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-25T01:07:26.449866" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:26.449711" 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-25T01:07:26.450105" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:26.449947" elapsed="0.000213"/>
</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-25T01:07:26.450327" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:26.450184" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:26.449678" elapsed="0.000723"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:26.449415" elapsed="0.001011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:26.449223" elapsed="0.001229"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:26.450492" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:26.450695" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:26.450742" 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-25T01:07:26.442610" elapsed="0.008156"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:26.451238" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:26.451316" 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-25T01:07:26.450940" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:26.451916" 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-25T01:07:26.451633" elapsed="0.000372">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:26.451411" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:26.451393" elapsed="0.000711">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-25T01:07:26.452258" elapsed="0.000022"/>
</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-25T01:07:26.452433" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:26.452498" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:26.436255" elapsed="0.016348">No leader found.</status>
</kw>
<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-25T01:07:27.462217" 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-25T01:07:27.461554" elapsed="0.000707"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:27.462918" 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-25T01:07:27.462498" elapsed="0.000458"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:27.463044" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T01:07:27.463277" 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-25T01:07:27.461016" elapsed="0.002296"/>
</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-25T01:07:27.463531" elapsed="0.000229"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:27.464477" 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-25T01:07:27.464008" elapsed="0.000505"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:27.465090" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:27.464734" elapsed="0.000393"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:27.465835" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:27.465427" elapsed="0.000447"/>
</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-25T01:07:27.466478" elapsed="0.000033"/>
</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-25T01:07:27.466834" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:27.466628" elapsed="0.000283"/>
</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-25T01:07:27.467166" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:27.466945" elapsed="0.000296"/>
</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-25T01:07:27.467472" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:27.467273" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:27.466602" elapsed="0.000972"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:27.466238" elapsed="0.001370"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:27.465948" elapsed="0.001696"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:27.467699" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:07:27.467995" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:27.468062" 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-25T01:07:27.459989" elapsed="0.008106"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:27.468723" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:27.468837" 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-25T01:07:27.468334" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:27.469688" 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-25T01:07:27.469298" elapsed="0.000487">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:27.468988" elapsed="0.000932">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:27.468943" elapsed="0.001038">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-25T01:07:27.470199" elapsed="0.000030"/>
</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-25T01:07:27.470439" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:27.470531" elapsed="0.000021"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:27.453736" elapsed="0.016942">No leader found.</status>
</kw>
<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-25T01:07:28.481169" 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-25T01:07:28.480492" elapsed="0.000723"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:28.481922" 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-25T01:07:28.481466" elapsed="0.000514"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:28.482053" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T01:07:28.482298" 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-25T01:07:28.479888" elapsed="0.002448"/>
</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-25T01:07:28.482571" elapsed="0.000244"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:28.483584" 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-25T01:07:28.483077" elapsed="0.000585"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:28.484386" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:28.483946" elapsed="0.000479"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:28.485211" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:28.484711" elapsed="0.000539"/>
</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-25T01:07:28.486066" elapsed="0.000090"/>
</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-25T01:07:28.486507" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:28.486286" elapsed="0.000304"/>
</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-25T01:07:28.486809" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:28.486626" elapsed="0.000236"/>
</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-25T01:07:28.487042" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:28.486885" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:28.486258" elapsed="0.000860"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:28.485744" elapsed="0.001399"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:28.485412" elapsed="0.001757"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:28.487208" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:28.487410" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:28.487455" 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-25T01:07:28.478765" elapsed="0.008714"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:28.487935" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:28.488029" 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-25T01:07:28.487652" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:28.488626" 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-25T01:07:28.488343" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:28.488123" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:28.488105" elapsed="0.000695">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-25T01:07:28.488953" elapsed="0.000037"/>
</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-25T01:07:28.489145" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:28.489210" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:28.471720" elapsed="0.017627">No leader found.</status>
</kw>
<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-25T01:07:29.500766" 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-25T01:07:29.499785" elapsed="0.001048"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:29.501993" 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-25T01:07:29.501242" elapsed="0.000852"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:29.502199" elapsed="0.000126"/>
</return>
<msg time="2026-04-25T01:07:29.502691" 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-25T01:07:29.498811" elapsed="0.003937"/>
</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-25T01:07:29.502918" elapsed="0.000190"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:29.503645" 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-25T01:07:29.503274" elapsed="0.000398"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:29.504137" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:29.503833" elapsed="0.000331"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:29.504565" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:29.504315" elapsed="0.000276"/>
</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-25T01:07:29.505023" elapsed="0.000025"/>
</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-25T01:07:29.505358" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:29.505205" elapsed="0.000210"/>
</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-25T01:07:29.505614" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:29.505439" elapsed="0.000230"/>
</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-25T01:07:29.505864" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:29.505693" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:29.505184" elapsed="0.000756"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:29.504836" elapsed="0.001145"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:29.504642" elapsed="0.001368"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:29.506060" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:29.506262" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:29.506307" 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-25T01:07:29.496994" elapsed="0.009336"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:29.506783" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:29.506859" 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-25T01:07:29.506504" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:29.507483" 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-25T01:07:29.507196" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:29.506953" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:29.506934" elapsed="0.000721">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-25T01:07:29.507809" elapsed="0.000022"/>
</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-25T01:07:29.508003" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:29.508071" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:29.490446" elapsed="0.017733">No leader found.</status>
</kw>
<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-25T01:07:30.519061" 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-25T01:07:30.518315" elapsed="0.000781"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.519571" 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-25T01:07:30.519271" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:30.519658" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:07:30.519866" 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-25T01:07:30.517369" elapsed="0.002532"/>
</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-25T01:07:30.520093" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.520814" 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-25T01:07:30.520438" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.521279" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:30.521032" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.521714" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:07:30.521454" elapsed="0.000286"/>
</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-25T01:07:30.522225" elapsed="0.000025"/>
</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-25T01:07:30.522565" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:30.522415" elapsed="0.000206"/>
</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-25T01:07:30.522788" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:30.522647" elapsed="0.000198"/>
</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-25T01:07:30.523050" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:30.522879" elapsed="0.000237"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:30.522393" elapsed="0.000751"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:30.522024" elapsed="0.001145"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:30.521793" elapsed="0.001404"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:07:30.523243" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:07:30.523447" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:07:30.523493" 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-25T01:07:30.515537" elapsed="0.007979"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.523989" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:07:30.524071" 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-25T01:07:30.523691" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.524755" 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-25T01:07:30.524454" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:07:30.524177" elapsed="0.000724">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:07:30.524152" elapsed="0.000781">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-25T01:07:30.525113" elapsed="0.000022"/>
</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-25T01:07:30.525288" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:30.525354" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:07:30.509210" elapsed="0.016248">No leader found.</status>
</kw>
<msg time="2026-04-25T01:07:30.525552" level="FAIL">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</msg>
<var>${inv_conf_leader}</var>
<var>${inv_conf_followers_list}</var>
<arg>10s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Get_Leader_And_Followers_For_Shard</arg>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.312007" elapsed="10.213656">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>config inventory Leader is ${inv_conf_leader} and followers are ${inv_conf_followers_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.525908" elapsed="0.000032"/>
</kw>
<return>
<value>${inv_conf_leader}</value>
<value>${inv_conf_followers_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:30.526146" elapsed="0.000045"/>
</return>
<var>${inventory_leader}</var>
<var>${inventory_followers}</var>
<doc>Check Status for Inventory Config shard in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:20.308939" elapsed="10.217343">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${Inventory_Pre_Leader_List}</var>
<arg>${Inventory_Leader}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.526471" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_1}</var>
<arg>${Inventory_Followers}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.526666" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Followers}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.526894" elapsed="0.000023"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_1}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.527112" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.527308" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Pre_Leader_List}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.527503" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${Inventory_Pre_Leader}</var>
<arg>${Inventory_Leader}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.527691" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Pre_Leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:07:30.527932" elapsed="0.000021"/>
</kw>
<doc>Find a follower in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:07:20.296821" elapsed="10.231290">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s2-t3" name="Shutdown Leader From Cluster Node" line="61">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:30.531467" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:30.531197" elapsed="0.000537"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:30.532735" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:30.532624" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:30.532605" elapsed="0.000197"/>
</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-25T01:07:30.537739" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:30.537631" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:30.537614" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.538832" 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-25T01:07:30.538451" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.539331" 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-25T01:07:30.539042" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:30.539401" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:07:30.539554" 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-25T01:07:30.538045" elapsed="0.001533"/>
</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-25T01:07:30.539925" 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-25T01:07:30.540185" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:30.540041" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:30.540024" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:30.539781" elapsed="0.000502"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:30.539630" elapsed="0.000678"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:30.537273" elapsed="0.003087"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:30.532335" elapsed="0.008078"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:30.531887" elapsed="0.008569"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:30.528810" elapsed="0.011697"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:07:30.544959" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<arg>${Inventory_Leader}</arg>
<doc>Convenience keyword that kills the specified member of the cluster.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member}</doc>
<status status="FAIL" start="2026-04-25T01:07:30.540751" elapsed="0.004258">Variable '${Inventory_Leader}' not found.</status>
</kw>
<doc>Shutdown Leader Node and Start it Up</doc>
<status status="FAIL" start="2026-04-25T01:07:30.528331" elapsed="0.016807">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s2-t4" name="Check Shards Status After Leader Shutdown" line="65">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:07:30.548428" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:07:30.548164" elapsed="0.000527"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:07:30.549668" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:30.549560" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:30.549542" elapsed="0.000192"/>
</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-25T01:07:30.554701" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:07:30.554595" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T01:07:30.554578" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.555759" 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-25T01:07:30.555382" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:07:30.556301" 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-25T01:07:30.556010" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:07:30.556372" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:07:30.556524" 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-25T01:07:30.555005" elapsed="0.001543"/>
</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-25T01:07:30.556888" 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-25T01:07:30.557149" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:07:30.556999" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:07:30.556982" elapsed="0.000243"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:07:30.556746" elapsed="0.000502"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:07:30.556599" elapsed="0.000674"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:07:30.554239" elapsed="0.003086"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:07:30.549277" elapsed="0.008101"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:07:30.548841" elapsed="0.008583"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:07:30.545864" elapsed="0.011611"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:30.562484" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:30.558275" elapsed="0.004249">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:32.574913" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:32.563403" elapsed="0.011581">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:34.583726" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:34.575859" elapsed="0.007942">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:36.593247" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:36.584873" elapsed="0.008428">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:38.604135" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:38.594269" elapsed="0.009921">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:40.614979" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:40.605115" elapsed="0.009934">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:42.625131" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:42.616258" elapsed="0.008936">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:44.635396" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:44.626095" elapsed="0.009358">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:46.647018" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:46.636363" elapsed="0.010741">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:48.656626" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:48.648298" elapsed="0.008418">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:50.665660" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:50.657679" elapsed="0.008055">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:52.676410" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:52.666643" elapsed="0.009937">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:54.686453" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:54.677466" elapsed="0.009070">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:56.698687" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:56.687538" elapsed="0.011225">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:07:58.708993" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:58.699727" elapsed="0.009331">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:00.714874" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:00.709781" elapsed="0.005212">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:02.724706" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:02.715856" elapsed="0.008933">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:04.731734" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:04.725585" elapsed="0.006221">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:06.739031" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:06.732773" elapsed="0.006336">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:08.749751" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:08.740042" elapsed="0.009818">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:10.761814" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:10.750807" elapsed="0.011125">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:12.771731" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:12.763055" elapsed="0.008750">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:14.780538" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:14.772720" elapsed="0.007925">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:16.790713" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:16.781550" elapsed="0.009241">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:18.800546" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:18.792268" elapsed="0.008358">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:20.810692" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:20.801567" elapsed="0.009181">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:22.820774" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:22.811707" elapsed="0.009152">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:24.830173" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:24.822048" elapsed="0.008187">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:26.841672" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:26.831145" elapsed="0.010642">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:28.852496" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:28.842688" elapsed="0.009914">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:30.861121" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:30.853542" elapsed="0.007656">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:32.869431" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:32.862110" elapsed="0.007394">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:34.878777" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:34.870353" elapsed="0.008499">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:36.889250" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:36.879804" elapsed="0.009519">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:38.900358" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:38.890176" elapsed="0.010263">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:40.910564" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:40.901789" elapsed="0.008890">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:42.919768" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:42.911750" elapsed="0.008092">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:44.930189" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:44.921188" elapsed="0.009066">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:46.939467" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:46.931286" elapsed="0.008257">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:48.949357" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:48.940610" elapsed="0.008801">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:50.959441" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:50.950465" elapsed="0.009067">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:52.967760" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:52.960411" elapsed="0.007421">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:54.978686" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:54.968737" elapsed="0.010009">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:56.988393" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:56.979695" elapsed="0.008755">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:08:58.999058" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:08:58.989485" elapsed="0.009636">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:09:01.005698" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:00.999795" elapsed="0.005970">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:09:03.017004" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:03.006909" elapsed="0.010159">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:09:05.026452" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:05.018011" elapsed="0.008497">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:09:07.033648" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:07.027255" elapsed="0.006480">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:09:09.041388" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:09.034692" elapsed="0.006780">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:09:11.051410" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.042471" elapsed="0.009008">Variable '${Inventory_Followers}' not found.</status>
</kw>
<msg time="2026-04-25T01:09:11.051684" level="FAIL">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${Inventory_Followers}' not found.</msg>
<arg>${operation_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Check OpenFlow Shards Status</arg>
<arg>${Inventory_Followers}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:07:30.557662" elapsed="100.494252">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${Inventory_Followers}' not found.</status>
</kw>
<doc>Wait for node convergence and check status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:07:30.545326" elapsed="100.506950">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${Inventory_Followers}' not found.</status>
</test>
<test id="s1-s2-t5" name="Check Shard Status For Leader After PreLeader Shutdown" line="73">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:09:11.057024" elapsed="0.000271"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:09:11.056717" elapsed="0.000635"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:09:11.058518" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.058380" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.058357" elapsed="0.000350"/>
</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-25T01:09:11.064224" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.064108" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.064090" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.065342" 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-25T01:09:11.064929" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.065825" 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-25T01:09:11.065536" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:11.065894" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:09:11.066069" 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-25T01:09:11.064546" elapsed="0.001548"/>
</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-25T01:09:11.066458" 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-25T01:09:11.066701" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.066554" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:11.066538" elapsed="0.000237"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:11.066312" elapsed="0.000487"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.066151" elapsed="0.000675"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:09:11.063719" elapsed="0.003161"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:09:11.058072" elapsed="0.008862"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:09:11.057527" elapsed="0.009472"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:09:11.053418" elapsed="0.013652"/>
</kw>
<kw name="Get InventoryConfig Shard Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:09:11.071576" level="FAIL">Variable '${Inventory_Followers}' not found.</msg>
<var>${Inventory_Leader_Post}</var>
<var>${inventory_followers}</var>
<arg>${Inventory_Followers}</arg>
<doc>Check Status for Inventory Config shard in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.067300" elapsed="0.004346">Variable '${Inventory_Followers}' not found.</status>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${Inventory_Leader_List_Post}</var>
<arg>${Inventory_Leader_Post}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:11.071864" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_1}</var>
<arg>${Inventory_Followers}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:11.072073" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Followers}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:11.072279" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_1}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:11.072477" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader_Post}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:11.072675" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:11.072875" elapsed="0.000020"/>
</kw>
<doc>Find a Leader in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:09:11.052620" elapsed="0.020426">Variable '${Inventory_Followers}' not found.</status>
</test>
<test id="s1-s2-t6" name="Start Mininet Connect To Follower Node1" line="84">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:09:11.078026" elapsed="0.000235"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:09:11.077733" elapsed="0.000585"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:09:11.079372" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.079248" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.079227" elapsed="0.000216"/>
</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-25T01:09:11.084482" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.084354" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.084337" elapsed="0.000214"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.085566" 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-25T01:09:11.085177" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.086069" 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-25T01:09:11.085757" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:11.086141" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:09:11.086299" 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-25T01:09:11.084779" elapsed="0.001545"/>
</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-25T01:09:11.086679" 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-25T01:09:11.086924" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.086778" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:11.086761" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:11.086533" elapsed="0.000506"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.086377" elapsed="0.000692"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:09:11.083957" elapsed="0.003169"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:09:11.078930" elapsed="0.008251"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:09:11.078477" elapsed="0.008751"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:09:11.075186" elapsed="0.012096"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:09:11.091822" level="FAIL">Variable '${Follower_Node_1}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_1}_IP}</arg>
<arg>--topo linear,${switch_count}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.087588" elapsed="0.004280">Variable '${Follower_Node_1}' not found.</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-25T01:09:11.092108" elapsed="0.000024"/>
</kw>
<doc>Start mininet with connection to Follower Node1</doc>
<status status="FAIL" start="2026-04-25T01:09:11.073594" elapsed="0.018667">Variable '${Follower_Node_1}' not found.</status>
</test>
<test id="s1-s2-t7" name="Add Bulk Flow From Follower" line="92">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:09:11.096774" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:09:11.096505" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:09:11.098076" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.097946" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.097927" elapsed="0.000217"/>
</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-25T01:09:11.103145" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.103034" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.103016" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.104322" 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-25T01:09:11.103917" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.104804" 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-25T01:09:11.104515" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:11.104919" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:09:11.105102" 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-25T01:09:11.103443" elapsed="0.001685"/>
</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-25T01:09:11.105479" 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-25T01:09:11.105738" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.105591" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:11.105573" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:11.105334" elapsed="0.000503"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.105181" elapsed="0.000680"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:09:11.102655" elapsed="0.003259"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:09:11.097651" elapsed="0.008336"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:09:11.097214" elapsed="0.008821"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:09:11.093422" elapsed="0.012667"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:09:11.114749" level="FAIL">Variable '${temp_json_config_add}' not found.</msg>
<arg>${temp_json_config_add}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.110493" elapsed="0.004293">Variable '${temp_json_config_add}' not found.</status>
</kw>
<doc>10000 Flows added via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.092715" elapsed="0.022209">Variable '${temp_json_config_add}' not found.</status>
</test>
<test id="s1-s2-t8" name="Get Bulk Flows And Verify In Leader" line="96">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:09:11.118987" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:09:11.118701" elapsed="0.000562"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:09:11.120368" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.120251" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.120231" elapsed="0.000206"/>
</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-25T01:09:11.126226" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.126104" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.126082" elapsed="0.000221"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.127499" 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-25T01:09:11.127051" elapsed="0.000479"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.128226" 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-25T01:09:11.127743" elapsed="0.000516"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:11.128315" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:09:11.128577" 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-25T01:09:11.126574" elapsed="0.002049"/>
</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-25T01:09:11.129331" elapsed="0.000046"/>
</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-25T01:09:11.129838" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.129535" elapsed="0.000411"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:11.129498" elapsed="0.000520"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:11.129040" elapsed="0.001025"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.128720" elapsed="0.001396"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:09:11.125681" elapsed="0.004547"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:09:11.119932" elapsed="0.010508"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:09:11.119422" elapsed="0.011117"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:09:11.115816" elapsed="0.014839"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:09:11.148110" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.142584" elapsed="0.005604">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Initiate get operation and check flow count across cluster nodes.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.115271" elapsed="0.033184">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s2-t9" name="Verify Flows In Switch Before Cluster Restart" line="104">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:09:11.153582" elapsed="0.000321"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:09:11.153193" elapsed="0.000797"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:09:11.155370" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.155178" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.155140" elapsed="0.000342"/>
</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-25T01:09:11.162381" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.162246" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.162223" elapsed="0.000239"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.164101" 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-25T01:09:11.163424" elapsed="0.000721"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.164804" 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-25T01:09:11.164397" elapsed="0.000435"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:11.164880" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:09:11.165070" 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-25T01:09:11.162817" elapsed="0.002279"/>
</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-25T01:09:11.165485" 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-25T01:09:11.165790" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.165587" elapsed="0.000274"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:11.165568" elapsed="0.000316"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:11.165331" elapsed="0.000577"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.165159" elapsed="0.000775"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:09:11.161772" elapsed="0.004238"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:09:11.154697" elapsed="0.011391"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:09:11.154155" elapsed="0.012002"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:09:11.149368" elapsed="0.016867"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:09:11.172186" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:09:11.166532" elapsed="0.005727">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch before cluster restart.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.148756" elapsed="0.023761">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s2-t10" name="Restart Pre Leader From Cluster Node" line="111">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:09:11.176865" elapsed="0.000366"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:09:11.176455" elapsed="0.000858"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:09:11.178706" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.178561" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.178535" elapsed="0.000248"/>
</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-25T01:09:11.185126" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.185008" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.184987" elapsed="0.000208"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.186240" 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-25T01:09:11.185821" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.186727" 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-25T01:09:11.186434" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:11.186825" elapsed="0.000049"/>
</return>
<msg time="2026-04-25T01:09:11.187092" 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-25T01:09:11.185433" elapsed="0.001697"/>
</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-25T01:09:11.187688" elapsed="0.000035"/>
</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-25T01:09:11.188135" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.187885" elapsed="0.000336"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:11.187859" elapsed="0.000399"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:11.187457" elapsed="0.000839"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.187214" elapsed="0.001126"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:09:11.184607" elapsed="0.003800"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:09:11.178169" elapsed="0.010296"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:09:11.177526" elapsed="0.010987"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:09:11.173494" elapsed="0.015093"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:09:11.194093" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<arg>${Inventory_Leader}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.188833" elapsed="0.005309">Variable '${Inventory_Leader}' not found.</status>
</kw>
<doc>Restart Leader Node.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.172872" elapsed="0.021450">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s2-t11" name="Check Shards Status After Leader Restart" line="115">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:09:11.198694" elapsed="0.000291"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:09:11.198370" elapsed="0.000684"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:09:11.200177" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.200036" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.200010" elapsed="0.000242"/>
</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-25T01:09:11.205390" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:09:11.205275" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T01:09:11.205256" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.206523" 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-25T01:09:11.206116" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.207044" 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-25T01:09:11.206729" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:11.207116" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:09:11.207280" 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-25T01:09:11.205706" elapsed="0.001598"/>
</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-25T01:09:11.207752" elapsed="0.000024"/>
</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-25T01:09:11.208054" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.207887" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:11.207868" elapsed="0.000265"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:11.207526" elapsed="0.000630"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.207361" elapsed="0.000821"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:09:11.204883" elapsed="0.003355"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:09:11.199682" elapsed="0.008614"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:09:11.199215" elapsed="0.009129"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:09:11.195287" elapsed="0.013113"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:11.234024" elapsed="0.000305"/>
</kw>
<msg time="2026-04-25T01:09:11.234432" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:11.233157" elapsed="0.001351"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:11.232542" elapsed="0.002069"/>
</kw>
<msg time="2026-04-25T01:09:11.234673" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:11.220719" elapsed="0.014016"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:11.220217" elapsed="0.014618"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.235447" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:11.235113" elapsed="0.000396"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:11.242391" 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-25T01:09:11.241846" elapsed="0.000583"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.243052" 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-25T01:09:11.242644" elapsed="0.000444"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:11.243150" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:09:11.243356" 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-25T01:09:11.241346" elapsed="0.002044"/>
</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-25T01:09:11.243602" elapsed="0.000208"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.244525" level="INFO">${ds_type} = operational</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-25T01:09:11.244086" elapsed="0.000474"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.245109" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:11.244773" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.245649" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:11.245343" elapsed="0.000338"/>
</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-25T01:09:11.246189" elapsed="0.000030"/>
</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-25T01:09:11.246475" elapsed="0.000098"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.246320" elapsed="0.000305"/>
</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-25T01:09:11.246817" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.246655" elapsed="0.000225"/>
</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-25T01:09:11.247086" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:11.246905" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:11.246299" elapsed="0.000869"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:11.245997" elapsed="0.001195"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.245742" elapsed="0.001475"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:11.247258" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:09:11.247485" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:11.247545" 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-25T01:09:11.240387" elapsed="0.007188"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.248108" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:11.248189" 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-25T01:09:11.247763" elapsed="0.000450"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:11.248812" 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-25T01:09:11.248526" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:11.248299" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:11.248278" elapsed="0.000731">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-25T01:09:11.249168" elapsed="0.000022"/>
</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-25T01:09:11.249364" elapsed="0.000215"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:11.249633" elapsed="0.000016"/>
</return>
<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>
<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-25T01:09:11.236856" elapsed="0.012890">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:11.236549" elapsed="0.013269">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:11.236367" elapsed="0.013510">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.235818" elapsed="0.014165">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:11.250228" elapsed="0.000031"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.209224" elapsed="0.041150">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:13.277847" elapsed="0.000265"/>
</kw>
<msg time="2026-04-25T01:09:13.278180" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:13.277086" elapsed="0.001156"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:13.276558" elapsed="0.001766"/>
</kw>
<msg time="2026-04-25T01:09:13.278374" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:13.267713" elapsed="0.010707"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:13.267213" elapsed="0.011285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:13.278984" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:13.278713" elapsed="0.000416"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:13.284450" 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-25T01:09:13.284039" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:13.284938" 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-25T01:09:13.284643" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:13.285032" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:09:13.285195" 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-25T01:09:13.283619" elapsed="0.001602"/>
</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-25T01:09:13.285379" elapsed="0.000214"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:13.286119" level="INFO">${ds_type} = operational</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-25T01:09:13.285759" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:13.286554" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:13.286311" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:13.287201" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:13.286731" elapsed="0.000497"/>
</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-25T01:09:13.287641" elapsed="0.000025"/>
</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-25T01:09:13.287916" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:13.287755" elapsed="0.000230"/>
</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-25T01:09:13.288173" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:13.288025" elapsed="0.000203"/>
</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-25T01:09:13.288396" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:13.288251" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:13.287734" elapsed="0.000740"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:13.287467" elapsed="0.001031"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:13.287277" elapsed="0.001246"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:13.288564" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:13.288768" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:13.288815" 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-25T01:09:13.282878" elapsed="0.005960"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:13.289314" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:13.289393" 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-25T01:09:13.289031" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:13.290059" 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-25T01:09:13.289752" elapsed="0.000383">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:13.289491" elapsed="0.000714">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:13.289471" elapsed="0.000766">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-25T01:09:13.290395" elapsed="0.000022"/>
</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-25T01:09:13.290575" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:13.290642" elapsed="0.000016"/>
</return>
<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>
<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-25T01:09:13.280215" elapsed="0.010537">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:13.279954" elapsed="0.010920">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:13.279788" elapsed="0.011145">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:13.279374" elapsed="0.011668">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:13.291291" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:13.251247" elapsed="0.040166">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:15.319043" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:09:15.319356" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:15.318344" elapsed="0.001076"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:15.317851" elapsed="0.001650"/>
</kw>
<msg time="2026-04-25T01:09:15.319549" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:15.308946" elapsed="0.010647"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:15.308507" elapsed="0.011161"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:15.320147" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:15.319867" elapsed="0.000329"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:15.325774" 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-25T01:09:15.325351" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:15.326312" 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-25T01:09:15.326012" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:15.326388" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:09:15.326555" 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-25T01:09:15.324946" elapsed="0.001633"/>
</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-25T01:09:15.326738" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:15.327436" level="INFO">${ds_type} = operational</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-25T01:09:15.327075" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:15.327865" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:15.327624" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:15.328297" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:15.328058" elapsed="0.000265"/>
</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-25T01:09:15.328720" 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-25T01:09:15.328979" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:15.328828" elapsed="0.000221"/>
</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-25T01:09:15.329216" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:15.329074" elapsed="0.000196"/>
</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-25T01:09:15.329432" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:15.329292" elapsed="0.000251"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:15.328809" elapsed="0.000759"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:15.328552" elapsed="0.001042"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:15.328369" elapsed="0.001252"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:15.329706" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:09:15.329913" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:15.329961" 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-25T01:09:15.324202" elapsed="0.005798"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:15.330456" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:15.330534" 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-25T01:09:15.330180" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:15.331170" 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-25T01:09:15.330849" elapsed="0.000397">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:15.330630" elapsed="0.000683">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:15.330611" elapsed="0.000734">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-25T01:09:15.331501" elapsed="0.000022"/>
</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-25T01:09:15.331677" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:15.331742" elapsed="0.000016"/>
</return>
<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>
<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-25T01:09:15.321233" elapsed="0.010615">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:15.320995" elapsed="0.010922">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:15.320835" elapsed="0.011140">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:15.320437" elapsed="0.011642">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:15.332318" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:15.292532" elapsed="0.039903">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:17.360615" elapsed="0.000235"/>
</kw>
<msg time="2026-04-25T01:09:17.360916" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:17.359924" elapsed="0.001074"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:17.359447" elapsed="0.001635"/>
</kw>
<msg time="2026-04-25T01:09:17.361131" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:17.350623" elapsed="0.010561"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:17.350023" elapsed="0.011241"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:17.361732" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:17.361468" elapsed="0.000313"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:17.367340" 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-25T01:09:17.366871" elapsed="0.000499"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:17.367932" 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-25T01:09:17.367626" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:17.368029" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:09:17.368200" 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-25T01:09:17.366378" elapsed="0.001847"/>
</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-25T01:09:17.368386" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:17.369119" level="INFO">${ds_type} = operational</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-25T01:09:17.368734" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:17.369557" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:17.369311" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:17.370049" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:17.369766" elapsed="0.000310"/>
</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-25T01:09:17.370493" elapsed="0.000025"/>
</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-25T01:09:17.370784" elapsed="0.000218"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:17.370607" elapsed="0.000436"/>
</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-25T01:09:17.371222" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:17.371070" elapsed="0.000207"/>
</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-25T01:09:17.371444" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:17.371301" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:17.370586" elapsed="0.000934"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:17.370319" elapsed="0.001226"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:17.370127" elapsed="0.001444"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:17.371610" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:17.371810" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:17.371855" 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-25T01:09:17.365629" elapsed="0.006249"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:17.372352" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:17.372429" 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-25T01:09:17.372069" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:17.373087" 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-25T01:09:17.372781" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:17.372536" elapsed="0.000700">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:17.372505" elapsed="0.000762">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-25T01:09:17.373421" elapsed="0.000022"/>
</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-25T01:09:17.373598" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:17.373664" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:17.362934" elapsed="0.010836">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:17.362692" elapsed="0.011152">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:17.362518" elapsed="0.011382">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:17.362055" elapsed="0.011951">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:17.374254" elapsed="0.000079"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:17.333480" elapsed="0.040951">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:19.403282" elapsed="0.000315"/>
</kw>
<msg time="2026-04-25T01:09:19.403681" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:19.402371" elapsed="0.001391"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:19.401770" elapsed="0.002096"/>
</kw>
<msg time="2026-04-25T01:09:19.403926" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:19.392105" elapsed="0.011900"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:19.391539" elapsed="0.012568"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:19.404729" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:19.404389" elapsed="0.000401"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:19.410657" 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-25T01:09:19.410147" elapsed="0.000545"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:19.411214" 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-25T01:09:19.410878" elapsed="0.000363"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:19.411290" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:09:19.411486" 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-25T01:09:19.409711" elapsed="0.001801"/>
</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-25T01:09:19.411675" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:19.412481" level="INFO">${ds_type} = operational</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-25T01:09:19.412050" elapsed="0.000463"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:19.413060" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:19.412718" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:19.413622" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:19.413299" elapsed="0.000356"/>
</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-25T01:09:19.414214" elapsed="0.000033"/>
</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-25T01:09:19.414555" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:19.414360" elapsed="0.000267"/>
</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-25T01:09:19.414843" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:19.414659" elapsed="0.000254"/>
</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-25T01:09:19.415153" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:19.414945" elapsed="0.000280"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:19.414334" elapsed="0.000921"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:19.413969" elapsed="0.001317"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:19.413716" elapsed="0.001604"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:19.415364" elapsed="0.000077"/>
</return>
<msg time="2026-04-25T01:09:19.415630" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:19.415676" 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-25T01:09:19.408965" elapsed="0.006735"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:19.416279" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:19.416358" 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-25T01:09:19.415969" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:19.417006" 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-25T01:09:19.416687" elapsed="0.000398">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:19.416459" elapsed="0.000695">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:19.416437" elapsed="0.000749">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-25T01:09:19.417344" elapsed="0.000023"/>
</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-25T01:09:19.417521" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:19.417588" elapsed="0.000016"/>
</return>
<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>
<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-25T01:09:19.405964" elapsed="0.011747">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:19.405710" elapsed="0.012076">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:19.405562" elapsed="0.012280">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:19.405133" elapsed="0.012810">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:19.418216" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:19.375472" elapsed="0.042865">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:21.446131" elapsed="0.000250"/>
</kw>
<msg time="2026-04-25T01:09:21.446450" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:21.445449" elapsed="0.001070"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:21.444932" elapsed="0.001669"/>
</kw>
<msg time="2026-04-25T01:09:21.446647" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:21.436337" elapsed="0.010354"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:21.435892" elapsed="0.010872"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:21.447247" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:21.446984" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:21.452671" 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-25T01:09:21.452259" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:21.453202" 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-25T01:09:21.452866" elapsed="0.000363"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:21.453279" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:09:21.453480" 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-25T01:09:21.451792" elapsed="0.001717"/>
</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-25T01:09:21.453781" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:21.454525" level="INFO">${ds_type} = operational</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-25T01:09:21.454173" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:21.454957" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:21.454716" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:21.455410" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:21.455168" elapsed="0.000269"/>
</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-25T01:09:21.455851" elapsed="0.000025"/>
</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-25T01:09:21.456143" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:21.455982" elapsed="0.000221"/>
</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-25T01:09:21.456544" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:21.456229" elapsed="0.000373"/>
</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-25T01:09:21.456772" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:21.456627" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:21.455945" elapsed="0.000902"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:21.455677" elapsed="0.001196"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:21.455487" elapsed="0.001412"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:21.456940" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:09:21.457167" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:21.457226" 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-25T01:09:21.451050" elapsed="0.006201"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:21.457747" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:21.457825" 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-25T01:09:21.457426" elapsed="0.000423"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:21.458482" 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-25T01:09:21.458159" elapsed="0.000401">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:21.457920" elapsed="0.000708">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:21.457900" elapsed="0.000761">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-25T01:09:21.458818" elapsed="0.000022"/>
</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-25T01:09:21.459015" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:21.459084" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:21.448340" elapsed="0.010850">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:21.448081" elapsed="0.011207">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:21.447918" elapsed="0.011431">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:21.447524" elapsed="0.011913">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:21.459681" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:21.419220" elapsed="0.040579">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:23.488441" elapsed="0.000325"/>
</kw>
<msg time="2026-04-25T01:09:23.488834" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:23.487764" elapsed="0.001132"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:23.487293" elapsed="0.001702"/>
</kw>
<msg time="2026-04-25T01:09:23.489044" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:23.478595" elapsed="0.010493"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:23.478122" elapsed="0.011042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:23.489621" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:23.489362" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:23.496371" 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-25T01:09:23.495967" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:23.496851" 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-25T01:09:23.496562" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:23.496925" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:09:23.497104" 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-25T01:09:23.495589" elapsed="0.001540"/>
</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-25T01:09:23.497284" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:23.497943" level="INFO">${ds_type} = operational</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-25T01:09:23.497607" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:23.498389" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:23.498147" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:23.498834" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:23.498591" elapsed="0.000270"/>
</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-25T01:09:23.499274" elapsed="0.000025"/>
</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-25T01:09:23.499530" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:23.499383" elapsed="0.000202"/>
</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-25T01:09:23.499752" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:23.499609" elapsed="0.000197"/>
</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-25T01:09:23.499986" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:23.499829" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:23.499363" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:23.499105" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:23.498907" elapsed="0.001205"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:23.500151" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:23.500354" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:23.500400" 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-25T01:09:23.494845" elapsed="0.005579"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:23.500866" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:23.500943" 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-25T01:09:23.500597" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:23.501593" 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-25T01:09:23.501316" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:23.501097" elapsed="0.000634">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:23.501078" elapsed="0.000686">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-25T01:09:23.502074" elapsed="0.000022"/>
</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-25T01:09:23.502251" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:23.502323" elapsed="0.000016"/>
</return>
<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>
<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-25T01:09:23.490723" elapsed="0.011707">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:23.490452" elapsed="0.012047">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:23.490312" elapsed="0.012243">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:23.489900" elapsed="0.012762">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:23.502898" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:23.460679" elapsed="0.042352">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:25.530112" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:09:25.530422" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:25.529435" elapsed="0.001052"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:25.528951" elapsed="0.001618"/>
</kw>
<msg time="2026-04-25T01:09:25.530615" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:25.520303" elapsed="0.010356"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:25.519865" elapsed="0.010868"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:25.531204" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:25.530930" elapsed="0.000320"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:25.536436" 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-25T01:09:25.536043" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:25.536922" 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-25T01:09:25.536628" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:25.537013" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:09:25.537172" 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-25T01:09:25.535639" elapsed="0.001558"/>
</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-25T01:09:25.537356" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:25.538028" level="INFO">${ds_type} = operational</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-25T01:09:25.537673" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:25.538458" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:25.538217" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:25.538950" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:25.538708" elapsed="0.000285"/>
</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-25T01:09:25.539394" 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-25T01:09:25.539650" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:25.539503" elapsed="0.000203"/>
</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-25T01:09:25.539898" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:25.539731" elapsed="0.000224"/>
</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-25T01:09:25.540150" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:25.539994" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:25.539484" elapsed="0.000742"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:25.539225" elapsed="0.001026"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:25.539040" elapsed="0.001236"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:25.540316" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:25.540523" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:25.540570" 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-25T01:09:25.534899" elapsed="0.005696"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:25.541061" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:25.541142" 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-25T01:09:25.540771" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:25.541920" 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-25T01:09:25.541634" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:25.541409" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:25.541218" elapsed="0.000892">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-25T01:09:25.542267" elapsed="0.000023"/>
</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-25T01:09:25.542444" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:25.542512" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:25.532298" elapsed="0.010320">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:25.532065" elapsed="0.010623">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:25.531906" elapsed="0.010838">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:25.531481" elapsed="0.011352">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:25.543089" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:25.503951" elapsed="0.039256">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:27.569613" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:09:27.569929" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:27.568845" elapsed="0.001168"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:27.568311" elapsed="0.001785"/>
</kw>
<msg time="2026-04-25T01:09:27.570281" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:27.559561" elapsed="0.010769"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:27.559098" elapsed="0.011309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:27.570871" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:27.570612" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:27.576302" 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-25T01:09:27.575894" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:27.576781" 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-25T01:09:27.576492" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:27.576854" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:09:27.577035" 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-25T01:09:27.575519" elapsed="0.001541"/>
</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-25T01:09:27.577218" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:27.577873" level="INFO">${ds_type} = operational</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-25T01:09:27.577535" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:27.578355" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:27.578079" elapsed="0.000302"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:27.578773" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:27.578532" elapsed="0.000267"/>
</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-25T01:09:27.579217" 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-25T01:09:27.579477" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:27.579328" 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-25T01:09:27.579705" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:27.579563" elapsed="0.000196"/>
</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-25T01:09:27.579926" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:27.579783" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:27.579308" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:27.579045" elapsed="0.000997"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:27.578844" elapsed="0.001223"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:27.580106" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:27.580306" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:27.580353" 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-25T01:09:27.574784" elapsed="0.005593"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:27.580830" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:27.580908" 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-25T01:09:27.580557" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:27.581518" 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-25T01:09:27.581240" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:27.581020" elapsed="0.000633">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:27.581000" elapsed="0.000685">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-25T01:09:27.581841" elapsed="0.000022"/>
</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-25T01:09:27.582073" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:27.582142" elapsed="0.000016"/>
</return>
<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>
<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-25T01:09:27.572000" elapsed="0.010263">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:27.571734" elapsed="0.010601">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:27.571587" elapsed="0.010805">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:27.571185" elapsed="0.011298">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:27.582721" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:27.544389" elapsed="0.038450">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:29.613894" elapsed="0.000323"/>
</kw>
<msg time="2026-04-25T01:09:29.614298" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:29.613031" elapsed="0.001378"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:29.612372" elapsed="0.002147"/>
</kw>
<msg time="2026-04-25T01:09:29.614580" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:29.601459" elapsed="0.013182"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:29.600857" elapsed="0.013884"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:29.615363" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:29.615019" elapsed="0.000402"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:29.621687" 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-25T01:09:29.621238" elapsed="0.000478"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:29.622204" 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-25T01:09:29.621882" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:29.622281" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:09:29.622528" 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-25T01:09:29.620808" elapsed="0.001749"/>
</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-25T01:09:29.622720" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:29.623416" level="INFO">${ds_type} = operational</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-25T01:09:29.623067" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:29.624012" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:29.623603" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:29.624429" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:29.624188" elapsed="0.000267"/>
</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-25T01:09:29.624860" 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-25T01:09:29.625217" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:29.624988" elapsed="0.000288"/>
</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-25T01:09:29.625449" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:29.625303" elapsed="0.000200"/>
</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-25T01:09:29.625671" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:29.625527" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:29.624952" elapsed="0.000793"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:29.624690" elapsed="0.001224"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:29.624502" elapsed="0.001439"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:29.625997" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:09:29.626200" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:29.626246" 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-25T01:09:29.620053" elapsed="0.006216"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:29.626765" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:29.626845" 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-25T01:09:29.626488" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:29.627656" 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-25T01:09:29.627370" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:29.627139" elapsed="0.000660">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:29.626920" elapsed="0.000912">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-25T01:09:29.628006" elapsed="0.000023"/>
</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-25T01:09:29.628186" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:29.628253" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:29.616746" elapsed="0.011614">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:29.616441" elapsed="0.011987">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:29.616256" elapsed="0.012228">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:29.615730" elapsed="0.012842">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:29.628809" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:29.583901" elapsed="0.045024">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:31.655443" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:09:31.655762" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:31.654746" elapsed="0.001083"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:31.654264" elapsed="0.001649"/>
</kw>
<msg time="2026-04-25T01:09:31.655962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:31.645565" elapsed="0.010461"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:31.645103" elapsed="0.011002"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:31.656676" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:31.656308" elapsed="0.000417"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:31.662540" 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-25T01:09:31.662134" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:31.663053" 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-25T01:09:31.662736" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:31.663129" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:09:31.663295" 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-25T01:09:31.661724" elapsed="0.001597"/>
</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-25T01:09:31.663481" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:31.664176" level="INFO">${ds_type} = operational</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-25T01:09:31.663812" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:31.664623" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:31.664369" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:31.665117" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:31.664801" elapsed="0.000343"/>
</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-25T01:09:31.665558" elapsed="0.000025"/>
</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-25T01:09:31.665822" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:31.665671" elapsed="0.000207"/>
</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-25T01:09:31.666066" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:31.665904" elapsed="0.000219"/>
</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-25T01:09:31.666292" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:31.666147" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:31.665651" elapsed="0.000716"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:31.665380" elapsed="0.001011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:31.665193" elapsed="0.001224"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:31.666456" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:31.666660" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:31.666707" 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-25T01:09:31.660990" elapsed="0.005741"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:31.667217" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:31.667296" 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-25T01:09:31.666913" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:31.667903" 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-25T01:09:31.667617" elapsed="0.000381">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:31.667393" elapsed="0.000680">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:31.667375" elapsed="0.000730">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-25T01:09:31.668264" elapsed="0.000022"/>
</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-25T01:09:31.668445" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:31.668514" elapsed="0.000022"/>
</return>
<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>
<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-25T01:09:31.657842" elapsed="0.010792">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:31.657600" elapsed="0.011158">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:31.657456" elapsed="0.011360">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:31.657045" elapsed="0.011891">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:31.669202" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:31.629471" elapsed="0.039852">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:33.698027" elapsed="0.000292"/>
</kw>
<msg time="2026-04-25T01:09:33.698404" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:33.697305" elapsed="0.001193"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:33.696774" elapsed="0.001832"/>
</kw>
<msg time="2026-04-25T01:09:33.698660" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:33.686885" elapsed="0.011823"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:33.686377" elapsed="0.012410"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:33.699293" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:33.699024" elapsed="0.000316"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:33.705220" 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-25T01:09:33.704672" elapsed="0.000584"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:33.705858" 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-25T01:09:33.705470" elapsed="0.000421"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:33.705951" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T01:09:33.706199" 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-25T01:09:33.704184" elapsed="0.002048"/>
</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-25T01:09:33.706435" elapsed="0.000183"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:33.707193" level="INFO">${ds_type} = operational</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-25T01:09:33.706786" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:33.707768" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:33.707441" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:33.708368" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:33.708032" elapsed="0.000371"/>
</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-25T01:09:33.708936" elapsed="0.000063"/>
</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-25T01:09:33.709322" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:33.709123" elapsed="0.000260"/>
</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-25T01:09:33.709567" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:33.709410" elapsed="0.000214"/>
</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-25T01:09:33.709800" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:33.709648" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:33.709094" elapsed="0.000850"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:33.708708" elapsed="0.001279"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:33.708464" elapsed="0.001586"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:33.710092" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:09:33.710301" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:33.710348" 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-25T01:09:33.703315" elapsed="0.007057"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:33.711075" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:33.711159" 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-25T01:09:33.710562" elapsed="0.000623"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:33.711810" 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-25T01:09:33.711489" elapsed="0.000405">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:33.711260" elapsed="0.000707">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:33.711241" elapsed="0.000775">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-25T01:09:33.712177" elapsed="0.000023"/>
</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-25T01:09:33.712357" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:33.712425" elapsed="0.000017"/>
</return>
<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>
<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-25T01:09:33.700559" elapsed="0.011986">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:33.700309" elapsed="0.012319">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:33.700165" elapsed="0.012520">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:33.699592" elapsed="0.013185">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:33.713043" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:33.670284" elapsed="0.042883">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:35.743289" elapsed="0.000330"/>
</kw>
<msg time="2026-04-25T01:09:35.743704" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:35.742266" elapsed="0.001524"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:35.741411" elapsed="0.002487"/>
</kw>
<msg time="2026-04-25T01:09:35.743962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:35.730728" elapsed="0.013319"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:35.730052" elapsed="0.014099"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:35.744816" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:35.744448" elapsed="0.000433"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:35.750979" 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-25T01:09:35.750567" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:35.751551" 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-25T01:09:35.751249" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:35.751630" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:09:35.751790" 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-25T01:09:35.750154" elapsed="0.001661"/>
</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-25T01:09:35.751987" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:35.752674" level="INFO">${ds_type} = operational</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-25T01:09:35.752313" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:35.753130" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:35.752865" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:35.753548" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:35.753308" elapsed="0.000266"/>
</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-25T01:09:35.753987" elapsed="0.000026"/>
</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-25T01:09:35.754305" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:35.754102" elapsed="0.000263"/>
</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-25T01:09:35.754534" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:35.754390" elapsed="0.000197"/>
</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-25T01:09:35.754757" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:35.754610" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:35.754081" elapsed="0.000750"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:35.753804" elapsed="0.001051"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:35.753621" elapsed="0.001260"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:35.754920" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:35.755157" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:35.755203" 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-25T01:09:35.749404" elapsed="0.005822"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:35.755685" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:35.755763" 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-25T01:09:35.755402" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:35.756399" 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-25T01:09:35.756092" elapsed="0.000402">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:35.755856" elapsed="0.000713">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:35.755837" elapsed="0.000764">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-25T01:09:35.756756" elapsed="0.000022"/>
</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-25T01:09:35.756964" elapsed="0.000045"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:35.757089" elapsed="0.000027"/>
</return>
<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>
<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-25T01:09:35.746410" elapsed="0.010799">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:35.746034" elapsed="0.011245">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:35.745811" elapsed="0.011523">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:35.745239" elapsed="0.012182">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:35.757690" elapsed="0.000122"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:35.714186" elapsed="0.043770">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:37.788825" elapsed="0.000310"/>
</kw>
<msg time="2026-04-25T01:09:37.789209" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:37.788075" elapsed="0.001202"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:37.787413" elapsed="0.001949"/>
</kw>
<msg time="2026-04-25T01:09:37.789411" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:37.778124" elapsed="0.011346"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:37.777477" elapsed="0.012093"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:37.790107" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:37.789820" elapsed="0.000361"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:37.797191" 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-25T01:09:37.796712" elapsed="0.000510"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:37.797837" 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-25T01:09:37.797443" elapsed="0.000425"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:37.797919" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:09:37.798113" 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-25T01:09:37.796305" elapsed="0.001833"/>
</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-25T01:09:37.798351" elapsed="0.000205"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:37.799174" level="INFO">${ds_type} = operational</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-25T01:09:37.798754" elapsed="0.000454"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:37.799680" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:37.799404" elapsed="0.000302"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:37.800128" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:37.799860" elapsed="0.000293"/>
</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-25T01:09:37.800570" elapsed="0.000025"/>
</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-25T01:09:37.800839" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:37.800687" elapsed="0.000209"/>
</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-25T01:09:37.801089" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:37.800922" elapsed="0.000223"/>
</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-25T01:09:37.801505" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:37.801169" elapsed="0.000393"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:37.800665" elapsed="0.000921"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:37.800393" elapsed="0.001296"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:37.800202" elapsed="0.001521"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:37.801766" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:09:37.801990" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:37.802039" 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-25T01:09:37.795503" elapsed="0.006559"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:37.802600" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:37.802719" 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-25T01:09:37.802311" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:37.803337" 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-25T01:09:37.803052" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:37.802814" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:37.802795" elapsed="0.000715">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-25T01:09:37.803678" elapsed="0.000032"/>
</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-25T01:09:37.803979" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:37.804054" elapsed="0.000016"/>
</return>
<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>
<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-25T01:09:37.791713" elapsed="0.012451">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:37.791335" elapsed="0.012900">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:37.791092" elapsed="0.013198">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:37.790482" elapsed="0.013901">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:37.804624" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:37.758881" elapsed="0.045862">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:39.832202" elapsed="0.000287"/>
</kw>
<msg time="2026-04-25T01:09:39.832560" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:39.831502" elapsed="0.001130"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:39.831021" elapsed="0.001694"/>
</kw>
<msg time="2026-04-25T01:09:39.832782" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:39.822056" elapsed="0.010781"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:39.821566" elapsed="0.011352"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:39.833405" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:39.833142" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:39.840461" 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-25T01:09:39.840004" elapsed="0.000488"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:39.840979" 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-25T01:09:39.840659" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:39.841057" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:09:39.841218" 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-25T01:09:39.839593" elapsed="0.001655"/>
</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-25T01:09:39.841495" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:39.842191" level="INFO">${ds_type} = operational</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-25T01:09:39.841828" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:39.842630" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:39.842380" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:39.843078" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:39.842815" elapsed="0.000290"/>
</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-25T01:09:39.843505" 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-25T01:09:39.843768" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:39.843616" elapsed="0.000218"/>
</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-25T01:09:39.844026" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:39.843861" elapsed="0.000222"/>
</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-25T01:09:39.844251" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:39.844106" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:39.843596" elapsed="0.000730"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:39.843336" elapsed="0.001014"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:39.843152" elapsed="0.001224"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:39.844416" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:09:39.844633" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:39.844679" 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-25T01:09:39.838825" elapsed="0.005878"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:39.845189" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:39.845267" 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-25T01:09:39.844887" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:39.845888" 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-25T01:09:39.845583" elapsed="0.000400">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:39.845362" elapsed="0.000693">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:39.845344" elapsed="0.000743">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-25T01:09:39.846244" elapsed="0.000022"/>
</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-25T01:09:39.846421" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:39.846488" elapsed="0.000016"/>
</return>
<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>
<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-25T01:09:39.834525" elapsed="0.012071">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:39.834277" elapsed="0.012390">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:39.834131" elapsed="0.012593">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:39.833700" elapsed="0.013124">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:39.847091" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:39.805681" elapsed="0.041528">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:41.873857" elapsed="0.000354"/>
</kw>
<msg time="2026-04-25T01:09:41.874280" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:41.873153" elapsed="0.001192"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:41.872657" elapsed="0.001772"/>
</kw>
<msg time="2026-04-25T01:09:41.874484" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:41.863770" elapsed="0.010761"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:41.863293" elapsed="0.011316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:41.875160" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:41.874812" elapsed="0.000395"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:41.880651" 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-25T01:09:41.880234" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:41.881183" 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-25T01:09:41.880846" elapsed="0.000363"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:41.881258" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:09:41.881422" 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-25T01:09:41.879818" elapsed="0.001629"/>
</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-25T01:09:41.881606" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:41.882302" level="INFO">${ds_type} = operational</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-25T01:09:41.881934" elapsed="0.000394"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:41.882730" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:41.882490" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:41.883205" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:41.882946" elapsed="0.000285"/>
</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-25T01:09:41.883642" 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-25T01:09:41.883908" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:41.883755" elapsed="0.000224"/>
</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-25T01:09:41.884152" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:41.884007" elapsed="0.000199"/>
</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-25T01:09:41.884389" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:41.884230" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:41.883733" elapsed="0.000732"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:41.883467" elapsed="0.001022"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:41.883279" elapsed="0.001236"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:41.884555" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:09:41.884759" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:41.884805" 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-25T01:09:41.879092" elapsed="0.005736"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:41.885379" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:41.885463" 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-25T01:09:41.885057" elapsed="0.000450"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:41.886499" 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-25T01:09:41.886189" elapsed="0.000386">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:41.885921" elapsed="0.000731">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:41.885660" elapsed="0.001024">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-25T01:09:41.886878" elapsed="0.000028"/>
</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-25T01:09:41.887100" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:41.887172" elapsed="0.000017"/>
</return>
<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>
<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-25T01:09:41.876409" elapsed="0.010875">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:41.876155" elapsed="0.011215">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:41.875980" elapsed="0.011467">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:41.875479" elapsed="0.012068">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:41.887795" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:41.848009" elapsed="0.039907">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:43.918809" elapsed="0.000269"/>
</kw>
<msg time="2026-04-25T01:09:43.919149" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:43.918014" elapsed="0.001205"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:43.917221" elapsed="0.002082"/>
</kw>
<msg time="2026-04-25T01:09:43.919352" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:43.904327" elapsed="0.015073"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:43.903706" elapsed="0.015774"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:43.920027" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:43.919741" elapsed="0.000333"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:43.925586" 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-25T01:09:43.925192" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:43.926088" 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-25T01:09:43.925782" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:43.926163" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:09:43.926323" 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-25T01:09:43.924760" elapsed="0.001587"/>
</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-25T01:09:43.926506" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:43.927183" level="INFO">${ds_type} = operational</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-25T01:09:43.926829" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:43.927610" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:43.927369" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:43.928136" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:43.927867" elapsed="0.000296"/>
</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-25T01:09:43.928570" elapsed="0.000035"/>
</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-25T01:09:43.928859" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:43.928695" elapsed="0.000222"/>
</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-25T01:09:43.929109" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:43.928942" elapsed="0.000223"/>
</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-25T01:09:43.929332" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:43.929189" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:43.928674" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:43.928397" elapsed="0.001033"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:43.928210" elapsed="0.001246"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:43.929495" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:43.929704" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:43.929750" 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-25T01:09:43.924031" elapsed="0.005743"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:43.930242" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:43.930320" 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-25T01:09:43.929948" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:43.930919" 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-25T01:09:43.930637" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:43.930415" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:43.930397" elapsed="0.000715">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-25T01:09:43.931267" elapsed="0.000022"/>
</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-25T01:09:43.931442" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:43.931509" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:43.921174" elapsed="0.010476">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:43.920913" elapsed="0.010813">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:43.920751" elapsed="0.011031">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:43.920336" elapsed="0.011537">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:43.932131" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:43.888551" elapsed="0.043698">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:45.964329" elapsed="0.000239"/>
</kw>
<msg time="2026-04-25T01:09:45.964643" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:45.963594" elapsed="0.001111"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:45.963071" elapsed="0.001716"/>
</kw>
<msg time="2026-04-25T01:09:45.964910" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:45.953930" elapsed="0.011028"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:45.953491" elapsed="0.011566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:45.965523" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:45.965260" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:45.970752" 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-25T01:09:45.970363" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:45.971247" 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-25T01:09:45.970940" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:45.971321" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:09:45.971507" 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-25T01:09:45.969987" elapsed="0.001545"/>
</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-25T01:09:45.971693" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:45.972373" level="INFO">${ds_type} = operational</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-25T01:09:45.972034" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:45.972799" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:45.972560" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:45.973228" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:45.972988" elapsed="0.000265"/>
</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-25T01:09:45.973707" elapsed="0.000028"/>
</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-25T01:09:45.973987" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:45.973824" elapsed="0.000220"/>
</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-25T01:09:45.974209" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:45.974069" elapsed="0.000193"/>
</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-25T01:09:45.974425" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:45.974285" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:45.973803" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:45.973489" elapsed="0.001034"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:45.973299" elapsed="0.001249"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:45.974586" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:09:45.974791" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:45.974837" 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-25T01:09:45.969257" elapsed="0.005603"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:45.975320" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:45.975409" 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-25T01:09:45.975045" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:45.976214" 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-25T01:09:45.975912" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:45.975682" elapsed="0.000674">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:45.975485" elapsed="0.000904">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-25T01:09:45.976544" elapsed="0.000022"/>
</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-25T01:09:45.976758" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:45.976825" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:45.966604" elapsed="0.010329">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:45.966369" elapsed="0.010650">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:45.966227" elapsed="0.010848">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:45.965807" elapsed="0.011358">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:45.977402" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:45.933179" elapsed="0.044338">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:48.004828" elapsed="0.000260"/>
</kw>
<msg time="2026-04-25T01:09:48.005166" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:48.004170" elapsed="0.001059"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:48.003685" elapsed="0.001651"/>
</kw>
<msg time="2026-04-25T01:09:48.005383" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:47.995037" elapsed="0.010391"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:47.994586" elapsed="0.010916"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:48.005951" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:48.005693" elapsed="0.000320"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:48.011478" 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-25T01:09:48.011087" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:48.011959" 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-25T01:09:48.011672" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:48.012066" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:09:48.012247" 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-25T01:09:48.010687" elapsed="0.001585"/>
</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-25T01:09:48.012428" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:48.013133" level="INFO">${ds_type} = operational</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-25T01:09:48.012753" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:48.013570" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:48.013320" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:48.014037" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:48.013780" elapsed="0.000282"/>
</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-25T01:09:48.014468" elapsed="0.000034"/>
</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-25T01:09:48.014807" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:48.014589" elapsed="0.000276"/>
</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-25T01:09:48.015052" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:48.014891" elapsed="0.000216"/>
</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-25T01:09:48.015275" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:48.015131" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:48.014569" elapsed="0.000781"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:48.014287" elapsed="0.001087"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:48.014108" elapsed="0.001291"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:48.015438" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:48.015646" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:48.015691" 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-25T01:09:48.009890" elapsed="0.005825"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:48.016182" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:48.016260" 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-25T01:09:48.015892" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:48.016848" 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-25T01:09:48.016570" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:48.016353" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:48.016334" elapsed="0.000702">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-25T01:09:48.017190" 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-25T01:09:48.017363" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:48.017427" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:48.007060" elapsed="0.010473">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:48.006807" elapsed="0.010794">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:48.006666" elapsed="0.010990">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:48.006246" elapsed="0.011498">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:48.018024" elapsed="0.000028"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:47.978444" elapsed="0.039705">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:50.046694" elapsed="0.000239"/>
</kw>
<msg time="2026-04-25T01:09:50.047016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:50.046013" elapsed="0.001066"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:50.045523" elapsed="0.001635"/>
</kw>
<msg time="2026-04-25T01:09:50.047205" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:50.036876" elapsed="0.010372"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:50.036461" elapsed="0.010860"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:50.047832" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:50.047520" elapsed="0.000358"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:50.053319" 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-25T01:09:50.052915" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:50.053797" 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-25T01:09:50.053506" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:50.053869" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:09:50.054041" 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-25T01:09:50.052543" elapsed="0.001523"/>
</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-25T01:09:50.054242" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:50.054892" level="INFO">${ds_type} = operational</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-25T01:09:50.054556" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:50.055328" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:50.055092" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:50.055731" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:50.055500" elapsed="0.000256"/>
</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-25T01:09:50.056183" elapsed="0.000025"/>
</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-25T01:09:50.056445" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:50.056293" elapsed="0.000207"/>
</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-25T01:09:50.056664" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:50.056524" elapsed="0.000192"/>
</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-25T01:09:50.056878" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:50.056739" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:50.056273" elapsed="0.000677"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:50.056014" elapsed="0.000974"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:50.055801" elapsed="0.001214"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:50.057054" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:09:50.057252" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:50.057298" 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-25T01:09:50.051813" elapsed="0.005508"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:50.057947" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:50.058043" 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-25T01:09:50.057493" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:50.058651" 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-25T01:09:50.058371" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:50.058140" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:50.058121" elapsed="0.000703">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-25T01:09:50.058993" elapsed="0.000023"/>
</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-25T01:09:50.059171" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:50.059238" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:50.049210" elapsed="0.010134">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:50.048826" elapsed="0.010627">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:50.048674" elapsed="0.010834">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:50.048273" elapsed="0.011322">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:50.059832" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:50.019021" elapsed="0.040926">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:52.095605" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:09:52.095916" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:52.094927" elapsed="0.001070"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:52.094435" elapsed="0.001646"/>
</kw>
<msg time="2026-04-25T01:09:52.096130" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:52.082852" elapsed="0.013322"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:52.081602" elapsed="0.014644"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:52.096710" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:52.096450" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:52.102163" 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-25T01:09:52.101761" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:52.102654" 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-25T01:09:52.102351" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:52.102727" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:09:52.102886" 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-25T01:09:52.101389" elapsed="0.001522"/>
</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-25T01:09:52.103081" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:52.103757" level="INFO">${ds_type} = operational</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-25T01:09:52.103396" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:52.104201" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:52.103944" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:52.104612" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:52.104375" 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-25T01:09:52.105063" elapsed="0.000025"/>
</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-25T01:09:52.105324" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:52.105176" elapsed="0.000204"/>
</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-25T01:09:52.105545" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:52.105405" elapsed="0.000193"/>
</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-25T01:09:52.105761" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:52.105621" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:52.105154" elapsed="0.000758"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:52.104878" elapsed="0.001058"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:52.104689" elapsed="0.001286"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:52.106018" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:09:52.106228" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:52.106274" 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-25T01:09:52.100655" elapsed="0.005642"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:52.106761" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:52.106837" 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-25T01:09:52.106486" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:52.107444" 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-25T01:09:52.107164" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:52.106930" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:52.106911" elapsed="0.000715">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-25T01:09:52.107782" elapsed="0.000022"/>
</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-25T01:09:52.107958" elapsed="0.000036"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:52.108041" elapsed="0.000017"/>
</return>
<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>
<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-25T01:09:52.097798" elapsed="0.010351">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:52.097555" elapsed="0.010664">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:52.097408" elapsed="0.010866">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:52.097006" elapsed="0.011355">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:52.108603" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:52.060806" elapsed="0.047916">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:54.137503" elapsed="0.000238"/>
</kw>
<msg time="2026-04-25T01:09:54.137808" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:54.136839" elapsed="0.001030"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:54.136374" elapsed="0.001572"/>
</kw>
<msg time="2026-04-25T01:09:54.138009" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:54.127722" elapsed="0.010333"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:54.127134" elapsed="0.010996"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:54.138590" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:54.138327" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:54.143824" 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-25T01:09:54.143425" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:54.144391" 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-25T01:09:54.144094" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:54.144467" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:09:54.144626" 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-25T01:09:54.143025" elapsed="0.001626"/>
</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-25T01:09:54.144807" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:54.145480" level="INFO">${ds_type} = operational</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-25T01:09:54.145139" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:54.145917" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:54.145674" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:54.146348" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:54.146110" 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-25T01:09:54.146778" 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-25T01:09:54.147053" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:54.146887" elapsed="0.000224"/>
</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-25T01:09:54.147291" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:54.147135" elapsed="0.000215"/>
</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-25T01:09:54.147677" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:54.147527" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:54.146868" elapsed="0.000887"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:54.146599" elapsed="0.001180"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:54.146420" elapsed="0.001384"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:54.147844" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:09:54.148060" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:54.148106" 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-25T01:09:54.142294" elapsed="0.005835"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:54.148576" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:54.148652" 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-25T01:09:54.148303" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:54.149255" 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-25T01:09:54.148978" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:54.148746" elapsed="0.000649">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:54.148727" elapsed="0.000699">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-25T01:09:54.149579" 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-25T01:09:54.149755" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:54.149827" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:54.139670" elapsed="0.010267">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:54.139440" elapsed="0.010583">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:54.139300" elapsed="0.010782">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:54.138868" elapsed="0.011301">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:54.150401" elapsed="0.000057"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:54.109590" elapsed="0.040963">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:56.177567" elapsed="0.000269"/>
</kw>
<msg time="2026-04-25T01:09:56.177901" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:56.176874" elapsed="0.001103"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:56.176356" elapsed="0.001705"/>
</kw>
<msg time="2026-04-25T01:09:56.178108" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:56.167460" elapsed="0.010692"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:56.166852" elapsed="0.011380"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:56.178698" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:56.178437" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:56.185493" 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-25T01:09:56.185097" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:56.185992" 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-25T01:09:56.185684" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:56.186068" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:09:56.186227" 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-25T01:09:56.184701" elapsed="0.001551"/>
</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-25T01:09:56.186410" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:56.187082" level="INFO">${ds_type} = operational</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-25T01:09:56.186727" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:56.187513" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:56.187270" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:56.187927" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:56.187688" elapsed="0.000265"/>
</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-25T01:09:56.188368" elapsed="0.000039"/>
</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-25T01:09:56.188655" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:56.188505" elapsed="0.000206"/>
</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-25T01:09:56.188879" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:56.188736" elapsed="0.000198"/>
</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-25T01:09:56.189126" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:56.188957" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:56.188484" elapsed="0.000720"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:56.188199" elapsed="0.001028"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:56.188014" elapsed="0.001238"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:56.189293" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:09:56.189495" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:56.189543" 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-25T01:09:56.183935" elapsed="0.005632"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:56.190100" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:56.190179" 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-25T01:09:56.189805" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:56.190799" 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-25T01:09:56.190519" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:56.190273" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:56.190255" elapsed="0.000730">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-25T01:09:56.191141" elapsed="0.000022"/>
</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-25T01:09:56.191315" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:56.191380" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:56.179781" elapsed="0.011704">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:56.179544" elapsed="0.012008">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:56.179402" elapsed="0.012204">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:56.178996" elapsed="0.012697">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:56.191926" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:56.151307" elapsed="0.040750">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:09:58.220405" elapsed="0.000250"/>
</kw>
<msg time="2026-04-25T01:09:58.220724" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:58.219711" elapsed="0.001077"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:58.219234" elapsed="0.001636"/>
</kw>
<msg time="2026-04-25T01:09:58.220917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:09:58.210468" elapsed="0.010509"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:09:58.209977" elapsed="0.011081"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:09:58.221526" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:09:58.221257" elapsed="0.000317"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:09:58.227058" 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-25T01:09:58.226578" elapsed="0.000515"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:58.227661" 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-25T01:09:58.227304" elapsed="0.000385"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:09:58.227739" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:09:58.227902" 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-25T01:09:58.226154" elapsed="0.001773"/>
</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-25T01:09:58.228178" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:09:58.228861" level="INFO">${ds_type} = operational</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-25T01:09:58.228510" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:58.229315" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:58.229067" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:09:58.229754" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:09:58.229494" elapsed="0.000286"/>
</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-25T01:09:58.230252" elapsed="0.000027"/>
</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-25T01:09:58.230577" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:58.230380" elapsed="0.000270"/>
</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-25T01:09:58.230828" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:58.230681" elapsed="0.000210"/>
</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-25T01:09:58.231082" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:09:58.230916" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:09:58.230355" elapsed="0.000819"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:09:58.230062" elapsed="0.001137"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:58.229830" elapsed="0.001397"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:09:58.231267" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:09:58.231474" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:09:58.231521" 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-25T01:09:58.225348" elapsed="0.006197"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:09:58.232027" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:09:58.232109" 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-25T01:09:58.231728" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:09:58.232901" 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-25T01:09:58.232609" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:09:58.232378" elapsed="0.000684">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:09:58.232185" elapsed="0.000910">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-25T01:09:58.233254" elapsed="0.000022"/>
</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-25T01:09:58.233430" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:09:58.233497" elapsed="0.000015"/>
</return>
<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>
<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-25T01:09:58.222655" elapsed="0.010949">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:09:58.222412" elapsed="0.011266">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:09:58.222268" elapsed="0.011473">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:09:58.221833" elapsed="0.011998">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:09:58.234117" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:58.193057" elapsed="0.041181">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:00.263081" elapsed="0.000383"/>
</kw>
<msg time="2026-04-25T01:10:00.263540" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:00.262246" elapsed="0.001370"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:00.261643" elapsed="0.002072"/>
</kw>
<msg time="2026-04-25T01:10:00.263773" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:00.250138" elapsed="0.013689"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:00.249595" elapsed="0.014344"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:00.264444" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:00.264175" elapsed="0.000315"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:00.269845" 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-25T01:10:00.269459" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:00.270340" 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-25T01:10:00.270049" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:00.270414" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:00.270572" 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-25T01:10:00.269082" elapsed="0.001515"/>
</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-25T01:10:00.270759" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:00.271425" level="INFO">${ds_type} = operational</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-25T01:10:00.271089" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:00.271858" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:00.271611" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:00.272313" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:00.272062" elapsed="0.000277"/>
</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-25T01:10:00.272735" 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-25T01:10:00.273009" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:00.272846" elapsed="0.000219"/>
</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-25T01:10:00.273231" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:00.273089" elapsed="0.000195"/>
</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-25T01:10:00.273449" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:00.273307" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:00.272826" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:00.272569" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:00.272387" elapsed="0.001184"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:00.273610" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:10:00.273812" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:00.273858" 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-25T01:10:00.268340" elapsed="0.005541"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:00.274347" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:00.274425" 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-25T01:10:00.274069" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:00.275071" 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-25T01:10:00.274776" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:00.274556" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:00.274536" elapsed="0.000708">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-25T01:10:00.275399" elapsed="0.000022"/>
</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-25T01:10:00.275573" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:00.275639" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:00.265530" elapsed="0.010215">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:00.265290" elapsed="0.010524">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:00.265145" elapsed="0.010743">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:00.264725" elapsed="0.011274">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:00.276238" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:00.234880" elapsed="0.041475">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:02.308512" elapsed="0.000276"/>
</kw>
<msg time="2026-04-25T01:10:02.308860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:02.307747" elapsed="0.001186"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:02.307041" elapsed="0.002005"/>
</kw>
<msg time="2026-04-25T01:10:02.309094" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:02.296459" elapsed="0.012682"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:02.295743" elapsed="0.013475"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:02.309717" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:02.309450" elapsed="0.000314"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:02.315273" 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-25T01:10:02.314834" elapsed="0.000466"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:02.315788" 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-25T01:10:02.315482" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:02.315862" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:10:02.316074" 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-25T01:10:02.314440" elapsed="0.001667"/>
</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-25T01:10:02.316316" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:02.317061" level="INFO">${ds_type} = operational</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-25T01:10:02.316678" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:02.317515" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:02.317254" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:02.318047" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:02.317770" elapsed="0.000322"/>
</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-25T01:10:02.318501" elapsed="0.000025"/>
</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-25T01:10:02.318764" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:02.318614" elapsed="0.000206"/>
</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-25T01:10:02.319006" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:02.318845" elapsed="0.000218"/>
</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-25T01:10:02.319230" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:02.319087" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:02.318593" elapsed="0.000713"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:02.318329" elapsed="0.001001"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:02.318141" elapsed="0.001214"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:02.319396" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:02.319598" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:02.319643" 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-25T01:10:02.313628" elapsed="0.006040"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:02.320145" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:02.320226" 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-25T01:10:02.319843" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:02.321039" 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-25T01:10:02.320735" elapsed="0.000379">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:02.320505" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:02.320303" elapsed="0.000913">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-25T01:10:02.321373" elapsed="0.000023"/>
</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-25T01:10:02.321552" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:02.321621" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:02.310867" elapsed="0.010859">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:02.310625" elapsed="0.011171">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:02.310479" elapsed="0.011372">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:02.310056" elapsed="0.011896">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:02.322234" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:02.277175" elapsed="0.045180">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:04.348613" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:10:04.348928" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:04.347762" elapsed="0.001246"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:04.347292" elapsed="0.001799"/>
</kw>
<msg time="2026-04-25T01:10:04.349222" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:04.337890" elapsed="0.011378"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:04.337472" elapsed="0.011875"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:04.349823" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:04.349554" elapsed="0.000315"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:04.355254" 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-25T01:10:04.354849" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:04.355730" 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-25T01:10:04.355444" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:04.355803" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:10:04.355976" 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-25T01:10:04.354456" elapsed="0.001546"/>
</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-25T01:10:04.356165" elapsed="0.000187"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:04.356888" level="INFO">${ds_type} = operational</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-25T01:10:04.356544" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:04.357335" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:04.357093" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:04.357749" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:04.357511" 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-25T01:10:04.358188" 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-25T01:10:04.358444" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:04.358298" elapsed="0.000202"/>
</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-25T01:10:04.358665" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:04.358524" elapsed="0.000194"/>
</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-25T01:10:04.358887" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:04.358741" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:04.358278" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:04.358018" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:04.357820" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:04.359066" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:10:04.359265" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:04.359310" 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-25T01:10:04.353714" elapsed="0.005620"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:04.359784" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:04.359861" 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-25T01:10:04.359511" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:04.360463" 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-25T01:10:04.360187" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:04.359954" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:04.359936" elapsed="0.000711">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-25T01:10:04.360805" 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-25T01:10:04.361034" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:04.361103" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:04.350904" elapsed="0.010306">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:04.350667" elapsed="0.010619">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:04.350526" elapsed="0.010815">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:04.350121" elapsed="0.011309">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:04.361664" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:04.323109" elapsed="0.038672">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:06.391397" elapsed="0.000253"/>
</kw>
<msg time="2026-04-25T01:10:06.391721" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:06.390677" elapsed="0.001111"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:06.390194" elapsed="0.001676"/>
</kw>
<msg time="2026-04-25T01:10:06.391917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:06.381487" elapsed="0.010490"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:06.380893" elapsed="0.011163"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:06.392560" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:06.392280" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:06.398523" 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-25T01:10:06.398076" elapsed="0.000475"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:06.399028" 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-25T01:10:06.398716" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:06.399116" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:10:06.399325" 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-25T01:10:06.397526" elapsed="0.001824"/>
</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-25T01:10:06.399523" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:06.400239" level="INFO">${ds_type} = operational</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-25T01:10:06.399854" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:06.400752" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:06.400424" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:06.401306" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:06.401004" elapsed="0.000329"/>
</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-25T01:10:06.401737" elapsed="0.000025"/>
</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-25T01:10:06.402144" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:06.401851" elapsed="0.000356"/>
</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-25T01:10:06.402380" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:06.402232" elapsed="0.000215"/>
</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-25T01:10:06.402616" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:06.402471" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:06.401830" elapsed="0.000871"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:06.401567" elapsed="0.001158"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:06.401381" elapsed="0.001371"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:06.402793" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:10:06.403026" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:06.403086" 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-25T01:10:06.396555" elapsed="0.006561"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:06.403899" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:06.403996" 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-25T01:10:06.403378" elapsed="0.000643"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:06.404618" 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-25T01:10:06.404319" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:06.404095" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:06.404075" elapsed="0.000721">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-25T01:10:06.404952" elapsed="0.000037"/>
</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-25T01:10:06.405156" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:06.405223" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:06.393714" elapsed="0.011616">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:06.393471" elapsed="0.011927">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:06.393321" elapsed="0.012133">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:06.392874" elapsed="0.012668">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:06.405792" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:06.362672" elapsed="0.043257">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:08.433570" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:10:08.433887" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:08.432710" elapsed="0.001241"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:08.432160" elapsed="0.001888"/>
</kw>
<msg time="2026-04-25T01:10:08.434120" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:08.423294" elapsed="0.010871"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:08.422678" elapsed="0.011562"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:08.434818" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:08.434468" elapsed="0.000397"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:08.440386" 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-25T01:10:08.439931" elapsed="0.000483"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:08.440877" 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-25T01:10:08.440582" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:08.440954" elapsed="0.000074"/>
</return>
<msg time="2026-04-25T01:10:08.441194" 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-25T01:10:08.439543" elapsed="0.001678"/>
</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-25T01:10:08.441384" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:08.442109" level="INFO">${ds_type} = operational</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-25T01:10:08.441719" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:08.442566" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:08.442301" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:08.443012" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:08.442747" elapsed="0.000293"/>
</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-25T01:10:08.443461" elapsed="0.000025"/>
</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-25T01:10:08.443729" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:08.443577" elapsed="0.000209"/>
</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-25T01:10:08.443975" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:08.443811" elapsed="0.000223"/>
</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-25T01:10:08.444205" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:08.444058" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:08.443556" elapsed="0.000726"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:08.443286" elapsed="0.001020"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:08.443091" elapsed="0.001244"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:08.444377" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:10:08.444583" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:08.444630" 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-25T01:10:08.438748" elapsed="0.005906"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:08.445134" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:08.445213" 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-25T01:10:08.444830" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:08.445833" 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-25T01:10:08.445541" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:08.445316" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:08.445296" elapsed="0.000734">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-25T01:10:08.446237" elapsed="0.000023"/>
</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-25T01:10:08.446417" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:08.446490" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:08.435913" elapsed="0.010685">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:08.435678" elapsed="0.011051">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:08.435534" elapsed="0.011253">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:08.435129" elapsed="0.011749">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:08.447138" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:08.406878" elapsed="0.040379">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:10.481679" elapsed="0.000312"/>
</kw>
<msg time="2026-04-25T01:10:10.482059" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:10.480645" elapsed="0.001477"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:10.479922" elapsed="0.002280"/>
</kw>
<msg time="2026-04-25T01:10:10.482248" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:10.467860" elapsed="0.014431"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:10.467405" elapsed="0.014961"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:10.482842" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:10.482578" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:10.488140" 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-25T01:10:10.487732" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:10.488624" 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-25T01:10:10.488331" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:10.488698" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:10.488856" 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-25T01:10:10.487348" elapsed="0.001532"/>
</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-25T01:10:10.489051" elapsed="0.000226"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:10.489789" level="INFO">${ds_type} = operational</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-25T01:10:10.489444" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:10.490235" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:10.489992" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:10.490660" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:10.490410" elapsed="0.000279"/>
</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-25T01:10:10.491112" elapsed="0.000026"/>
</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-25T01:10:10.491375" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:10.491226" elapsed="0.000205"/>
</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-25T01:10:10.491597" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:10.491456" elapsed="0.000195"/>
</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-25T01:10:10.491991" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:10.491827" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:10.491205" elapsed="0.000939"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:10.490919" elapsed="0.001250"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:10.490736" elapsed="0.001460"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:10.492237" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:10.492440" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:10.492486" 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-25T01:10:10.486609" elapsed="0.005900"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:10.492978" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:10.493058" 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-25T01:10:10.492682" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:10.493673" 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-25T01:10:10.493391" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:10.493170" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:10.493152" elapsed="0.000696">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-25T01:10:10.494018" elapsed="0.000022"/>
</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-25T01:10:10.494195" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:10.494267" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:10.483919" elapsed="0.010454">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:10.483683" elapsed="0.010759">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:10.483538" elapsed="0.010960">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:10.483139" elapsed="0.011446">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:10.494820" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:10.448166" elapsed="0.046769">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:12.523423" elapsed="0.000239"/>
</kw>
<msg time="2026-04-25T01:10:12.523727" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:12.522721" elapsed="0.001070"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:12.522231" elapsed="0.001641"/>
</kw>
<msg time="2026-04-25T01:10:12.523919" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:12.513550" elapsed="0.010436"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:12.513082" elapsed="0.010982"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:12.524584" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:12.524274" elapsed="0.000357"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:12.531613" 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-25T01:10:12.531172" elapsed="0.000471"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:12.532196" 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-25T01:10:12.531880" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:12.532274" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:10:12.532457" 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-25T01:10:12.530768" elapsed="0.001713"/>
</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-25T01:10:12.532640" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:12.533327" level="INFO">${ds_type} = operational</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-25T01:10:12.532985" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:12.533756" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:12.533515" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:12.534192" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:12.533937" elapsed="0.000280"/>
</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-25T01:10:12.534629" 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-25T01:10:12.534892" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:12.534742" elapsed="0.000205"/>
</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-25T01:10:12.535132" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:12.534987" elapsed="0.000200"/>
</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-25T01:10:12.535352" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:12.535210" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:12.534721" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:12.534457" elapsed="0.000994"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:12.534267" elapsed="0.001210"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:12.535517" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:12.535720" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:12.535765" 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-25T01:10:12.530027" elapsed="0.005761"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:12.536269" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:12.536380" 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-25T01:10:12.535977" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:12.536999" 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-25T01:10:12.536696" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:12.536475" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:12.536456" elapsed="0.000722">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-25T01:10:12.537332" elapsed="0.000022"/>
</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-25T01:10:12.537505" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:12.537569" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:12.525680" elapsed="0.011996">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:12.525442" elapsed="0.012303">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:12.525300" elapsed="0.012504">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:12.524876" elapsed="0.013015">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:12.538146" elapsed="0.000066"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:12.495842" elapsed="0.042467">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:14.571792" elapsed="0.000344"/>
</kw>
<msg time="2026-04-25T01:10:14.572222" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:14.570838" elapsed="0.001471"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:14.570125" elapsed="0.002287"/>
</kw>
<msg time="2026-04-25T01:10:14.572474" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:14.558885" elapsed="0.013652"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:14.558266" elapsed="0.014373"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:14.573272" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:14.572922" elapsed="0.000399"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:14.579143" 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-25T01:10:14.578680" elapsed="0.000495"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:14.579743" 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-25T01:10:14.579347" elapsed="0.000432"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:14.579835" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:10:14.580031" 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-25T01:10:14.578185" elapsed="0.001871"/>
</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-25T01:10:14.580221" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:14.580912" level="INFO">${ds_type} = operational</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-25T01:10:14.580555" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:14.581391" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:14.581124" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:14.581823" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:14.581573" elapsed="0.000276"/>
</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-25T01:10:14.582302" elapsed="0.000025"/>
</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-25T01:10:14.582575" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:14.582419" elapsed="0.000221"/>
</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-25T01:10:14.582811" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:14.582666" elapsed="0.000200"/>
</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-25T01:10:14.583051" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:14.582889" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:14.582397" elapsed="0.000732"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:14.582119" elapsed="0.001034"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:14.581900" elapsed="0.001279"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:14.583220" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:14.583445" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:14.583494" 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-25T01:10:14.577398" elapsed="0.006119"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:14.584171" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:14.584266" 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-25T01:10:14.583846" elapsed="0.000447"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:14.585215" 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-25T01:10:14.584875" elapsed="0.000430">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:14.584624" elapsed="0.000768">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:14.584351" elapsed="0.001077">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-25T01:10:14.585594" elapsed="0.000029"/>
</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-25T01:10:14.585793" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:14.585862" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:14.574523" elapsed="0.011468">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:14.574235" elapsed="0.011831">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:14.574064" elapsed="0.012060">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:14.573594" elapsed="0.012619">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:14.586460" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:14.539267" elapsed="0.047315">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:16.615910" elapsed="0.000368"/>
</kw>
<msg time="2026-04-25T01:10:16.616349" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:16.614754" elapsed="0.001673"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:16.614138" elapsed="0.002387"/>
</kw>
<msg time="2026-04-25T01:10:16.616574" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:16.605344" elapsed="0.011277"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:16.604776" elapsed="0.011928"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:16.617279" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:16.616995" elapsed="0.000331"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:16.624068" 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-25T01:10:16.623551" elapsed="0.000548"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:16.625023" 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-25T01:10:16.624295" elapsed="0.000757"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:16.625270" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:10:16.625455" 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-25T01:10:16.623070" elapsed="0.002410"/>
</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-25T01:10:16.625762" elapsed="0.000179"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:16.626492" level="INFO">${ds_type} = operational</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-25T01:10:16.626128" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:16.627013" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:16.626697" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:16.627577" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:16.627286" elapsed="0.000319"/>
</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-25T01:10:16.628214" elapsed="0.000027"/>
</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-25T01:10:16.629099" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:16.628888" elapsed="0.000275"/>
</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-25T01:10:16.629369" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:16.629190" elapsed="0.000240"/>
</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-25T01:10:16.629614" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:16.629457" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:16.628860" elapsed="0.000842"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:16.627899" elapsed="0.001829"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:16.627669" elapsed="0.002088"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:16.629812" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:10:16.630086" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:16.630142" 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-25T01:10:16.622295" elapsed="0.007873"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:16.631249" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:16.631454" 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-25T01:10:16.630378" elapsed="0.001102"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:16.632159" 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-25T01:10:16.631787" elapsed="0.000465">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:16.631555" elapsed="0.001634">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:16.631535" elapsed="0.001699">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-25T01:10:16.633402" elapsed="0.000024"/>
</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-25T01:10:16.633611" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:16.633697" elapsed="0.000022"/>
</return>
<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>
<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-25T01:10:16.618784" elapsed="0.015340">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:16.618328" elapsed="0.015877">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:16.618039" elapsed="0.016226">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:16.617592" elapsed="0.017033">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:16.634933" elapsed="0.000048"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:16.587517" elapsed="0.047601">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:18.665311" elapsed="0.000327"/>
</kw>
<msg time="2026-04-25T01:10:18.665705" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:18.664625" elapsed="0.001145"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:18.664145" elapsed="0.001710"/>
</kw>
<msg time="2026-04-25T01:10:18.665904" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:18.655393" elapsed="0.010557"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:18.654937" elapsed="0.011108"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:18.666509" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:18.666247" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:18.671825" 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-25T01:10:18.671422" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:18.672326" 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-25T01:10:18.672034" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:18.672400" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:18.672559" 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-25T01:10:18.671047" elapsed="0.001537"/>
</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-25T01:10:18.672739" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:18.673414" level="INFO">${ds_type} = operational</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-25T01:10:18.673072" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:18.673841" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:18.673600" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:18.674270" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:18.674032" 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-25T01:10:18.674720" elapsed="0.000025"/>
</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-25T01:10:18.675000" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:18.674837" elapsed="0.000220"/>
</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-25T01:10:18.675222" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:18.675081" elapsed="0.000194"/>
</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-25T01:10:18.675439" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:18.675298" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:18.674813" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:18.674523" elapsed="0.001014"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:18.674342" elapsed="0.001221"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:18.675603" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:10:18.675801" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:18.675852" 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-25T01:10:18.670294" elapsed="0.005581"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:18.676342" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:18.676420" 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-25T01:10:18.676067" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:18.677279" 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-25T01:10:18.676992" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:18.676744" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:18.676542" elapsed="0.000912">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-25T01:10:18.677608" elapsed="0.000022"/>
</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-25T01:10:18.677783" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:18.677848" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:18.667612" elapsed="0.010347">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:18.667378" elapsed="0.010674">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:18.667233" elapsed="0.010876">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:18.666819" elapsed="0.011381">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:18.678439" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:18.636012" elapsed="0.042547">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:20.716318" elapsed="0.000276"/>
</kw>
<msg time="2026-04-25T01:10:20.716674" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:20.715125" elapsed="0.001629"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:20.714554" elapsed="0.002308"/>
</kw>
<msg time="2026-04-25T01:10:20.716922" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:20.702540" elapsed="0.014458"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:20.701741" elapsed="0.015359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:20.717629" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:20.717358" elapsed="0.000332"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:20.723720" 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-25T01:10:20.723308" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:20.724254" 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-25T01:10:20.723932" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:20.724331" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:10:20.724493" 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-25T01:10:20.722865" elapsed="0.001653"/>
</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-25T01:10:20.724697" elapsed="0.000202"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:20.725530" level="INFO">${ds_type} = operational</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-25T01:10:20.725127" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:20.725998" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:20.725721" elapsed="0.000304"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:20.726598" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:20.726289" elapsed="0.000343"/>
</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-25T01:10:20.727325" elapsed="0.000026"/>
</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-25T01:10:20.727595" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:20.727442" elapsed="0.000208"/>
</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-25T01:10:20.727818" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:20.727676" elapsed="0.000201"/>
</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-25T01:10:20.728059" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:20.727901" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:20.727421" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:20.726924" elapsed="0.001237"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:20.726691" elapsed="0.001496"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:20.728228" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:20.728432" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:20.728477" 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-25T01:10:20.721892" elapsed="0.006609"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:20.728955" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:20.729051" 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-25T01:10:20.728676" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:20.729651" 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-25T01:10:20.729367" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:20.729145" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:20.729127" elapsed="0.000702">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-25T01:10:20.730007" elapsed="0.000025"/>
</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-25T01:10:20.730207" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:20.730275" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:20.718822" elapsed="0.011561">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:20.718574" elapsed="0.011878">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:20.718424" elapsed="0.012095">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:20.717983" elapsed="0.012652">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:20.730943" elapsed="0.000050"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:20.679517" elapsed="0.051594">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:22.758734" elapsed="0.000271"/>
</kw>
<msg time="2026-04-25T01:10:22.759077" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:22.758041" elapsed="0.001103"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:22.757452" elapsed="0.001774"/>
</kw>
<msg time="2026-04-25T01:10:22.759361" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:22.748511" elapsed="0.010897"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:22.747854" elapsed="0.011633"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:22.759951" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:22.759688" elapsed="0.000326"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:22.765273" 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-25T01:10:22.764841" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:22.765756" 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-25T01:10:22.765465" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:22.765831" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:22.766041" 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-25T01:10:22.764464" elapsed="0.001602"/>
</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-25T01:10:22.766223" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:22.766882" level="INFO">${ds_type} = operational</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-25T01:10:22.766546" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:22.767335" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:22.767086" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:22.767747" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:22.767510" elapsed="0.000262"/>
</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-25T01:10:22.768195" elapsed="0.000025"/>
</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-25T01:10:22.768458" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:22.768308" elapsed="0.000205"/>
</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-25T01:10:22.768681" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:22.768540" elapsed="0.000194"/>
</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-25T01:10:22.768904" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:22.768756" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:22.768287" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:22.768022" elapsed="0.000996"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:22.767818" elapsed="0.001226"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:22.769085" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:10:22.769293" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:22.769340" 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-25T01:10:22.763723" elapsed="0.005640"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:22.770080" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:22.770160" 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-25T01:10:22.769537" elapsed="0.000647"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:22.770859" 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-25T01:10:22.770487" elapsed="0.000454">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:22.770256" elapsed="0.000786">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:22.770237" elapsed="0.000840">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-25T01:10:22.771264" elapsed="0.000028"/>
</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-25T01:10:22.771523" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:22.771605" elapsed="0.000017"/>
</return>
<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>
<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-25T01:10:22.761063" elapsed="0.010658">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:22.760805" elapsed="0.011011">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:22.760660" elapsed="0.011217">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:22.760255" elapsed="0.011734">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:22.772249" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:22.731810" elapsed="0.040558">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:24.801184" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:10:24.801498" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:24.800502" elapsed="0.001058"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:24.800034" elapsed="0.001606"/>
</kw>
<msg time="2026-04-25T01:10:24.801698" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:24.791380" elapsed="0.010363"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:24.790939" elapsed="0.010878"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:24.802299" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:24.802040" elapsed="0.000304"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:24.807729" 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-25T01:10:24.807343" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:24.808281" 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-25T01:10:24.807985" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:24.808356" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:10:24.808514" 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-25T01:10:24.806950" elapsed="0.001588"/>
</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-25T01:10:24.808694" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:24.809375" level="INFO">${ds_type} = operational</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-25T01:10:24.809029" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:24.809814" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:24.809559" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:24.810237" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:24.810000" elapsed="0.000262"/>
</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-25T01:10:24.810676" 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-25T01:10:24.811025" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:24.810785" elapsed="0.000299"/>
</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-25T01:10:24.811255" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:24.811110" elapsed="0.000198"/>
</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-25T01:10:24.811487" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:24.811343" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:24.810766" elapsed="0.000795"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:24.810494" elapsed="0.001101"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:24.810308" elapsed="0.001323"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:24.811671" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:24.811874" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:24.811919" 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-25T01:10:24.806225" elapsed="0.005717"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:24.812451" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:24.812529" 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-25T01:10:24.812149" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:24.813170" 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-25T01:10:24.812861" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:24.812622" elapsed="0.000694">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:24.812604" elapsed="0.000752">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-25T01:10:24.813512" 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-25T01:10:24.813709" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:24.813776" elapsed="0.000014"/>
</return>
<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>
<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-25T01:10:24.803382" elapsed="0.010511">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:24.803133" elapsed="0.010843">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:24.802988" elapsed="0.011053">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:24.802576" elapsed="0.011564">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:24.814387" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:24.773324" elapsed="0.041189">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:26.845315" elapsed="0.000279"/>
</kw>
<msg time="2026-04-25T01:10:26.845664" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:26.844620" elapsed="0.001112"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:26.843979" elapsed="0.001835"/>
</kw>
<msg time="2026-04-25T01:10:26.845861" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:26.835127" elapsed="0.010778"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:26.834535" elapsed="0.011458"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:26.846556" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:26.846203" elapsed="0.000400"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:26.851939" 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-25T01:10:26.851532" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:26.852440" 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-25T01:10:26.852148" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:26.852514" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:26.852672" 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-25T01:10:26.851133" elapsed="0.001563"/>
</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-25T01:10:26.852856" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:26.853582" level="INFO">${ds_type} = operational</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-25T01:10:26.853191" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:26.854033" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:26.853771" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:26.854445" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:26.854209" elapsed="0.000262"/>
</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-25T01:10:26.854867" 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-25T01:10:26.855147" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:26.854996" elapsed="0.000207"/>
</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-25T01:10:26.855369" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:26.855228" elapsed="0.000194"/>
</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-25T01:10:26.855758" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:26.855607" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:26.854973" elapsed="0.000860"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:26.854699" elapsed="0.001159"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:26.854516" elapsed="0.001368"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:26.855924" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:26.856139" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:26.856185" 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-25T01:10:26.850373" elapsed="0.005835"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:26.856656" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:26.856732" 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-25T01:10:26.856381" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:26.857349" 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-25T01:10:26.857063" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:26.856825" elapsed="0.000680">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:26.856806" elapsed="0.000731">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-25T01:10:26.857693" 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-25T01:10:26.857868" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:26.857934" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:26.847658" elapsed="0.010398">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:26.847410" elapsed="0.010757">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:26.847267" elapsed="0.010957">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:26.846839" elapsed="0.011475">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:26.858551" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:26.815472" elapsed="0.043197">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:28.888695" elapsed="0.000241"/>
</kw>
<msg time="2026-04-25T01:10:28.889017" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:28.888032" elapsed="0.001050"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:28.887544" elapsed="0.001619"/>
</kw>
<msg time="2026-04-25T01:10:28.889209" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:28.878912" elapsed="0.010340"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:28.878482" elapsed="0.010845"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:28.889802" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:28.889538" elapsed="0.000310"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:28.896682" 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-25T01:10:28.896284" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:28.897186" 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-25T01:10:28.896875" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:28.897260" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:10:28.897437" 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-25T01:10:28.895889" elapsed="0.001574"/>
</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-25T01:10:28.897619" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:28.898303" level="INFO">${ds_type} = operational</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-25T01:10:28.897947" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:28.898733" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:28.898492" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:28.899168" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:28.898909" elapsed="0.000285"/>
</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-25T01:10:28.899636" elapsed="0.000027"/>
</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-25T01:10:28.899897" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:28.899749" elapsed="0.000205"/>
</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-25T01:10:28.900140" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:28.899997" elapsed="0.000198"/>
</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-25T01:10:28.900360" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:28.900218" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:28.899730" elapsed="0.000784"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:28.899425" elapsed="0.001112"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:28.899241" elapsed="0.001322"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:28.900603" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:28.900803" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:28.900849" 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-25T01:10:28.895160" elapsed="0.005712"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:28.901339" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:28.901443" 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-25T01:10:28.901064" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:28.902051" 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-25T01:10:28.901756" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:28.901537" elapsed="0.000654">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:28.901519" elapsed="0.000704">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-25T01:10:28.902376" 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-25T01:10:28.902549" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:28.902614" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:28.890930" elapsed="0.011787">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:28.890693" elapsed="0.012093">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:28.890545" elapsed="0.012294">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:28.890100" elapsed="0.012826">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:28.903177" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:28.859603" elapsed="0.043689">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:30.933863" elapsed="0.000265"/>
</kw>
<msg time="2026-04-25T01:10:30.934198" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:30.933168" elapsed="0.001094"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:30.932687" elapsed="0.001654"/>
</kw>
<msg time="2026-04-25T01:10:30.934386" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:30.924006" elapsed="0.010424"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:30.923555" elapsed="0.010949"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:30.934956" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:30.934700" elapsed="0.000318"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:30.940197" 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-25T01:10:30.939793" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:30.940753" 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-25T01:10:30.940460" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:30.940827" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:10:30.941002" 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-25T01:10:30.939399" elapsed="0.001629"/>
</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-25T01:10:30.941184" elapsed="0.000186"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:30.941876" level="INFO">${ds_type} = operational</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-25T01:10:30.941536" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:30.942335" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:30.942089" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:30.942753" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:30.942512" elapsed="0.000267"/>
</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-25T01:10:30.943204" elapsed="0.000025"/>
</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-25T01:10:30.943464" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:30.943316" elapsed="0.000203"/>
</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-25T01:10:30.943686" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:30.943543" elapsed="0.000197"/>
</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-25T01:10:30.943906" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:30.943763" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:30.943296" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:30.943034" elapsed="0.000986"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:30.942826" elapsed="0.001220"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:30.944086" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:30.944289" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:30.944335" 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-25T01:10:30.938669" elapsed="0.005690"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:30.944808" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:30.944887" 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-25T01:10:30.944535" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:30.945730" 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-25T01:10:30.945446" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:30.945180" elapsed="0.000689">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:30.944983" elapsed="0.000919">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-25T01:10:30.946072" elapsed="0.000023"/>
</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-25T01:10:30.946250" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:30.946317" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:30.936042" elapsed="0.010380">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:30.935789" elapsed="0.010703">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:30.935646" elapsed="0.010903">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:30.935251" elapsed="0.011387">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:30.946875" elapsed="0.000060"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:30.904175" elapsed="0.042873">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:32.978579" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:10:32.978899" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:32.977902" elapsed="0.001078"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:32.977427" elapsed="0.001636"/>
</kw>
<msg time="2026-04-25T01:10:32.979110" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:32.968187" elapsed="0.010968"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:32.967540" elapsed="0.011689"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:32.979680" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:32.979426" elapsed="0.000299"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:32.985126" 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-25T01:10:32.984717" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:32.985613" 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-25T01:10:32.985325" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:32.985686" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:32.985843" 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-25T01:10:32.984344" elapsed="0.001523"/>
</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-25T01:10:32.986040" elapsed="0.000179"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:32.986726" level="INFO">${ds_type} = operational</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-25T01:10:32.986383" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:32.987212" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:32.986913" elapsed="0.000326"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:32.987628" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:32.987390" 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-25T01:10:32.988077" elapsed="0.000025"/>
</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-25T01:10:32.988339" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:32.988189" elapsed="0.000205"/>
</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-25T01:10:32.988560" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:32.988419" elapsed="0.000195"/>
</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-25T01:10:32.988786" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:32.988638" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:32.988169" elapsed="0.000692"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:32.987888" elapsed="0.000996"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:32.987700" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:32.988949" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:10:32.989163" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:32.989208" 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-25T01:10:32.983596" elapsed="0.005635"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:34.315048" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:34.315244" 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-25T01:10:34.314215" elapsed="0.001083"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:34.316662" 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-25T01:10:34.316033" elapsed="0.000774">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:34.315479" elapsed="0.001514">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:34.315430" elapsed="0.001681">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-25T01:10:34.317533" elapsed="0.000054"/>
</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-25T01:10:34.317941" elapsed="0.000086"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:34.318141" elapsed="0.000038"/>
</return>
<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>
<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-25T01:10:32.980761" elapsed="1.337630">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:32.980523" elapsed="1.338025">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:32.980376" elapsed="1.338300">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:32.979960" elapsed="1.338919">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:34.319478" elapsed="0.000063"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:32.947910" elapsed="1.371846">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:36.348325" elapsed="0.000235"/>
</kw>
<msg time="2026-04-25T01:10:36.348624" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:36.347646" elapsed="0.001038"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:36.347180" elapsed="0.001588"/>
</kw>
<msg time="2026-04-25T01:10:36.348814" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:36.338578" elapsed="0.010280"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:36.338141" elapsed="0.010792"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:36.349435" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:36.349152" elapsed="0.000329"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:36.354640" 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-25T01:10:36.354247" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:36.355134" 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-25T01:10:36.354827" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:36.355208" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:36.355367" 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-25T01:10:36.353855" elapsed="0.001536"/>
</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-25T01:10:36.355615" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:36.356295" level="INFO">${ds_type} = operational</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-25T01:10:36.355940" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:36.356726" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:36.356483" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:36.357160" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:36.356903" elapsed="0.000283"/>
</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-25T01:10:36.357604" elapsed="0.000025"/>
</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-25T01:10:36.357861" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:36.357713" elapsed="0.000204"/>
</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-25T01:10:36.358101" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:36.357942" elapsed="0.000214"/>
</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-25T01:10:36.358325" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:36.358180" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:36.357695" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:36.357435" elapsed="0.000989"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:36.357233" elapsed="0.001217"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:36.358490" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:36.358693" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:36.358741" 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-25T01:10:36.353118" elapsed="0.005647"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:36.359224" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:36.359303" 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-25T01:10:36.358938" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:36.360100" 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-25T01:10:36.359799" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:36.359574" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:36.359378" elapsed="0.000893">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-25T01:10:36.360426" elapsed="0.000023"/>
</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-25T01:10:36.360606" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:36.360674" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:36.350510" elapsed="0.010272">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:36.350272" elapsed="0.010580">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:36.350125" elapsed="0.010783">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:36.349713" elapsed="0.011301">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:36.361254" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:36.320698" elapsed="0.040702">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:38.388165" elapsed="0.000349"/>
</kw>
<msg time="2026-04-25T01:10:38.388580" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:38.387461" elapsed="0.001182"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:38.386940" elapsed="0.001785"/>
</kw>
<msg time="2026-04-25T01:10:38.388772" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:38.378186" elapsed="0.010632"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:38.377710" elapsed="0.011185"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:38.389405" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:38.389125" elapsed="0.000328"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:38.394892" 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-25T01:10:38.394498" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:38.395387" 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-25T01:10:38.395098" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:38.395461" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:10:38.395620" 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-25T01:10:38.394120" elapsed="0.001525"/>
</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-25T01:10:38.395803" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:38.396475" level="INFO">${ds_type} = operational</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-25T01:10:38.396138" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:38.396903" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:38.396663" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:38.397340" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:38.397099" elapsed="0.000288"/>
</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-25T01:10:38.397787" elapsed="0.000030"/>
</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-25T01:10:38.398070" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:38.397905" elapsed="0.000221"/>
</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-25T01:10:38.398292" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:38.398151" elapsed="0.000195"/>
</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-25T01:10:38.398509" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:38.398369" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:38.397884" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:38.397619" elapsed="0.000987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:38.397436" elapsed="0.001196"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:38.398672" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:10:38.398870" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:38.398916" 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-25T01:10:38.393331" elapsed="0.005608"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:38.399400" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:38.399477" 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-25T01:10:38.399128" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:38.400142" 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-25T01:10:38.399837" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:38.399616" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:38.399597" elapsed="0.000715">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-25T01:10:38.400469" 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-25T01:10:38.400647" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:38.400715" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:38.390525" elapsed="0.010297">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:38.390287" elapsed="0.010606">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:38.390141" elapsed="0.010807">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:38.389695" elapsed="0.011359">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:38.401293" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:38.362352" elapsed="0.039097">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:40.429991" elapsed="0.000250"/>
</kw>
<msg time="2026-04-25T01:10:40.430311" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:40.429237" elapsed="0.001138"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:40.428747" elapsed="0.001708"/>
</kw>
<msg time="2026-04-25T01:10:40.430502" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:40.420058" elapsed="0.010487"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:40.419616" elapsed="0.011003"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:40.431115" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:40.430825" elapsed="0.000338"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:40.436711" 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-25T01:10:40.436255" elapsed="0.000485"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:40.437239" 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-25T01:10:40.436911" elapsed="0.000355"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:40.437314" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:10:40.437518" 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-25T01:10:40.435858" elapsed="0.001686"/>
</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-25T01:10:40.437704" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:40.438394" level="INFO">${ds_type} = operational</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-25T01:10:40.438051" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:40.438825" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:40.438583" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:40.439369" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:40.439118" elapsed="0.000278"/>
</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-25T01:10:40.439799" elapsed="0.000025"/>
</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-25T01:10:40.440091" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:40.439920" elapsed="0.000229"/>
</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-25T01:10:40.440322" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:40.440176" elapsed="0.000199"/>
</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-25T01:10:40.440554" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:40.440399" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:40.439894" elapsed="0.000738"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:40.439628" elapsed="0.001028"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:40.439444" elapsed="0.001239"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:40.440725" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:10:40.440935" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:40.441000" 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-25T01:10:40.435105" elapsed="0.005922"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:40.441700" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:40.441781" 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-25T01:10:40.441206" elapsed="0.000600"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:40.442414" 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-25T01:10:40.442130" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:40.441881" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:40.441861" elapsed="0.000731">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-25T01:10:40.442748" elapsed="0.000023"/>
</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-25T01:10:40.442940" elapsed="0.000042"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:40.443035" elapsed="0.000017"/>
</return>
<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>
<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-25T01:10:40.432213" elapsed="0.010932">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:40.431957" elapsed="0.011259">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:40.431813" elapsed="0.011458">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:40.431411" elapsed="0.011950">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:40.443601" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:40.402441" elapsed="0.041283">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:42.474111" elapsed="0.000235"/>
</kw>
<msg time="2026-04-25T01:10:42.474410" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:42.473407" elapsed="0.001064"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:42.472919" elapsed="0.001631"/>
</kw>
<msg time="2026-04-25T01:10:42.474699" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:42.464380" elapsed="0.010366"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:42.463926" elapsed="0.010902"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:42.475318" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:42.475044" elapsed="0.000320"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:42.480712" 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-25T01:10:42.480325" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:42.481268" 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-25T01:10:42.480976" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:42.481342" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:10:42.481500" 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-25T01:10:42.479934" elapsed="0.001605"/>
</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-25T01:10:42.481696" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:42.482361" level="INFO">${ds_type} = operational</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-25T01:10:42.482026" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:42.482787" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:42.482547" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:42.483219" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:42.482976" elapsed="0.000268"/>
</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-25T01:10:42.483640" 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-25T01:10:42.483895" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:42.483747" elapsed="0.000202"/>
</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-25T01:10:42.484132" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:42.483989" elapsed="0.000196"/>
</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-25T01:10:42.484349" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:42.484208" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:42.483729" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:42.483472" elapsed="0.000974"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:42.483290" elapsed="0.001180"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:42.484509" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T01:10:42.484707" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:42.484752" 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-25T01:10:42.479214" elapsed="0.005561"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:42.485248" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:42.485324" 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-25T01:10:42.484946" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:42.485941" 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-25T01:10:42.485661" elapsed="0.000392">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:42.485417" elapsed="0.000707">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:42.485400" elapsed="0.000755">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-25T01:10:42.486307" elapsed="0.000022"/>
</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-25T01:10:42.486520" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:42.486587" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:42.476396" elapsed="0.010298">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:42.476157" elapsed="0.010605">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:42.476014" elapsed="0.010803">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:42.475596" elapsed="0.011308">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:42.487158" elapsed="0.000031"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:42.444654" elapsed="0.042627">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:44.515826" elapsed="0.000276"/>
</kw>
<msg time="2026-04-25T01:10:44.516174" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:44.515126" elapsed="0.001122"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:44.514612" elapsed="0.001737"/>
</kw>
<msg time="2026-04-25T01:10:44.516397" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:44.505981" elapsed="0.010461"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:44.505428" elapsed="0.011088"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:44.517031" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:44.516721" elapsed="0.000361"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:44.522663" 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-25T01:10:44.522257" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:44.523166" 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-25T01:10:44.522856" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:44.523249" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:10:44.523413" 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-25T01:10:44.521841" elapsed="0.001596"/>
</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-25T01:10:44.523592" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:44.524262" level="INFO">${ds_type} = operational</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-25T01:10:44.523911" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:44.524688" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:44.524445" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:44.525123" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:44.524860" elapsed="0.000288"/>
</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-25T01:10:44.525547" 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-25T01:10:44.525943" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:44.525699" elapsed="0.000348"/>
</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-25T01:10:44.526336" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:44.526087" elapsed="0.000336"/>
</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-25T01:10:44.526919" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:44.526692" elapsed="0.000330"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:44.525637" elapsed="0.001421"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:44.525377" elapsed="0.001718"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:44.525194" elapsed="0.001940"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:44.527193" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:10:44.527510" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:44.527576" 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-25T01:10:44.521082" elapsed="0.006528"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:44.528341" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:44.528458" 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-25T01:10:44.527879" elapsed="0.000613"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:44.529387" 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-25T01:10:44.528920" elapsed="0.000575">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:44.528596" elapsed="0.001013">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:44.528569" elapsed="0.001133">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-25T01:10:44.530100" elapsed="0.000039"/>
</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-25T01:10:44.530378" elapsed="0.000030"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:44.530486" elapsed="0.000023"/>
</return>
<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>
<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-25T01:10:44.518368" elapsed="0.012279">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:44.518075" elapsed="0.012679">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:44.517893" elapsed="0.012943">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:44.517397" elapsed="0.013631">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:44.531528" elapsed="0.000039"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:44.488185" elapsed="0.043524">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:46.559128" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:10:46.559444" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:46.558444" elapsed="0.001064"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:46.557973" elapsed="0.001623"/>
</kw>
<msg time="2026-04-25T01:10:46.559643" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:46.549362" elapsed="0.010324"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:46.548877" elapsed="0.010883"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:46.560318" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:46.559976" elapsed="0.000389"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:46.567110" 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-25T01:10:46.566701" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:46.567589" 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-25T01:10:46.567300" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:46.567668" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:10:46.567838" 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-25T01:10:46.566310" elapsed="0.001557"/>
</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-25T01:10:46.568041" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:46.568699" level="INFO">${ds_type} = operational</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-25T01:10:46.568363" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:46.569143" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:46.568886" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:46.569556" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:46.569318" 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-25T01:10:46.570019" elapsed="0.000025"/>
</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-25T01:10:46.570278" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:46.570129" elapsed="0.000203"/>
</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-25T01:10:46.570498" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:46.570357" elapsed="0.000195"/>
</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-25T01:10:46.570720" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:46.570575" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:46.570109" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:46.569835" elapsed="0.000986"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:46.569626" elapsed="0.001221"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:46.570886" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:10:46.571104" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:46.571150" 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-25T01:10:46.565538" elapsed="0.005634"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:46.571617" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:46.571694" 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-25T01:10:46.571344" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:46.572305" 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-25T01:10:46.572024" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:46.571787" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:46.571769" elapsed="0.000708">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-25T01:10:46.572631" 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-25T01:10:46.572805" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:46.572870" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:46.561411" elapsed="0.011587">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:46.561170" elapsed="0.011938">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:46.561017" elapsed="0.012146">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:46.560599" elapsed="0.012652">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:46.573486" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:46.532734" elapsed="0.040878">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:48.601671" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:10:48.601986" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:48.601016" elapsed="0.001047"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:48.600507" elapsed="0.001636"/>
</kw>
<msg time="2026-04-25T01:10:48.602189" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:48.591875" elapsed="0.010359"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:48.591458" elapsed="0.010869"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:48.602797" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:48.602538" elapsed="0.000304"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:48.608055" 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-25T01:10:48.607644" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:48.608539" 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-25T01:10:48.608248" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:48.608612" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:48.608771" 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-25T01:10:48.607265" elapsed="0.001532"/>
</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-25T01:10:48.608952" elapsed="0.000207"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:48.609684" level="INFO">${ds_type} = operational</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-25T01:10:48.609340" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:48.610136" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:48.609873" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:48.610555" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:48.610314" elapsed="0.000268"/>
</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-25T01:10:48.610986" elapsed="0.000041"/>
</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-25T01:10:48.611260" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:48.611112" elapsed="0.000204"/>
</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-25T01:10:48.611483" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:48.611341" elapsed="0.000195"/>
</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-25T01:10:48.611702" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:48.611560" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:48.611093" elapsed="0.000755"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:48.610813" elapsed="0.001058"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:48.610628" elapsed="0.001268"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:48.611936" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:48.612155" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:48.612201" 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-25T01:10:48.606525" elapsed="0.005699"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:48.612669" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:48.612746" 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-25T01:10:48.612397" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:48.613555" 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-25T01:10:48.613268" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:48.613022" elapsed="0.000682">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:48.612821" elapsed="0.000915">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-25T01:10:48.613891" elapsed="0.000022"/>
</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-25T01:10:48.614089" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:48.614156" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:48.603863" elapsed="0.010401">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:48.603629" elapsed="0.010704">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:48.603486" elapsed="0.010901">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:48.603089" elapsed="0.011385">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:48.614710" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:48.574883" elapsed="0.039943">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:50.643652" elapsed="0.000285"/>
</kw>
<msg time="2026-04-25T01:10:50.644030" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:50.642916" elapsed="0.001199"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:50.642410" elapsed="0.001800"/>
</kw>
<msg time="2026-04-25T01:10:50.644260" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:50.633428" elapsed="0.010878"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:50.632899" elapsed="0.011490"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:50.644948" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:50.644604" elapsed="0.000416"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:50.650875" 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-25T01:10:50.650477" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:50.651537" 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-25T01:10:50.651227" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:50.651623" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:10:50.651792" 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-25T01:10:50.650074" elapsed="0.001745"/>
</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-25T01:10:50.652001" elapsed="0.000207"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:50.652764" level="INFO">${ds_type} = operational</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-25T01:10:50.652381" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:50.653256" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:50.652959" elapsed="0.000326"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:50.653692" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:50.653443" elapsed="0.000276"/>
</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-25T01:10:50.654187" elapsed="0.000026"/>
</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-25T01:10:50.654459" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:50.654305" elapsed="0.000210"/>
</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-25T01:10:50.654684" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:50.654540" elapsed="0.000199"/>
</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-25T01:10:50.654914" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:50.654762" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:50.654284" elapsed="0.000732"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:50.653975" elapsed="0.001072"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:50.653768" elapsed="0.001310"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:50.655126" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:10:50.655335" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:50.655382" 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-25T01:10:50.649226" elapsed="0.006180"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:50.655859" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:50.655937" 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-25T01:10:50.655582" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:50.656579" 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-25T01:10:50.656287" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:50.656053" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:50.656034" elapsed="0.000720">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-25T01:10:50.656911" elapsed="0.000022"/>
</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-25T01:10:50.657121" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:50.657194" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:50.646283" elapsed="0.011021">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:50.646003" elapsed="0.011372">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:50.645823" elapsed="0.011607">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:50.645321" elapsed="0.012196">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:50.657757" elapsed="0.000061"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:50.615973" elapsed="0.041946">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:52.689513" elapsed="0.000283"/>
</kw>
<msg time="2026-04-25T01:10:52.689864" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:52.688678" elapsed="0.001251"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:52.688170" elapsed="0.001864"/>
</kw>
<msg time="2026-04-25T01:10:52.690083" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:52.678939" elapsed="0.011189"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:52.678320" elapsed="0.011895"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:52.690733" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:52.690453" elapsed="0.000328"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:52.696508" 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-25T01:10:52.696086" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:52.697028" 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-25T01:10:52.696709" elapsed="0.000347"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:52.697105" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:10:52.697283" 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-25T01:10:52.695667" elapsed="0.001647"/>
</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-25T01:10:52.697480" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:52.698218" level="INFO">${ds_type} = operational</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-25T01:10:52.697851" elapsed="0.000398"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:52.698746" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:52.698446" elapsed="0.000327"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:52.699226" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:52.698955" elapsed="0.000297"/>
</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-25T01:10:52.699664" elapsed="0.000026"/>
</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-25T01:10:52.699928" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:52.699778" elapsed="0.000223"/>
</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-25T01:10:52.700174" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:52.700028" elapsed="0.000210"/>
</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-25T01:10:52.700436" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:52.700263" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:52.699758" elapsed="0.000755"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:52.699484" elapsed="0.001054"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:52.699300" elapsed="0.001264"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:52.700614" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:10:52.700825" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:52.700871" 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-25T01:10:52.694900" elapsed="0.005994"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:52.701440" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:52.701555" 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-25T01:10:52.701160" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:52.702608" 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-25T01:10:52.702281" elapsed="0.000402">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:52.702031" elapsed="0.000721">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:52.701694" elapsed="0.001091">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-25T01:10:52.702942" elapsed="0.000022"/>
</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-25T01:10:52.703150" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:52.703227" elapsed="0.000017"/>
</return>
<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>
<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-25T01:10:52.691843" elapsed="0.011498">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:52.691588" elapsed="0.011970">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:52.691441" elapsed="0.012172">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:52.691038" elapsed="0.012664">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:52.703952" elapsed="0.000042"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:52.659519" elapsed="0.044572">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:54.736308" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:10:54.736624" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:54.735595" elapsed="0.001094"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:54.734941" elapsed="0.001833"/>
</kw>
<msg time="2026-04-25T01:10:54.736824" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:54.726032" elapsed="0.010840"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:54.725293" elapsed="0.011657"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:54.737446" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:54.737176" elapsed="0.000318"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:54.743092" 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-25T01:10:54.742674" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:54.743583" 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-25T01:10:54.743288" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:54.743660" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:10:54.743825" 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-25T01:10:54.742291" elapsed="0.001559"/>
</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-25T01:10:54.744107" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:54.744788" level="INFO">${ds_type} = operational</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-25T01:10:54.744441" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:54.745299" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:54.745035" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:54.745740" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:54.745485" elapsed="0.000281"/>
</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-25T01:10:54.746221" elapsed="0.000025"/>
</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-25T01:10:54.746488" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:54.746337" elapsed="0.000207"/>
</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-25T01:10:54.746712" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:54.746571" elapsed="0.000196"/>
</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-25T01:10:54.746934" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:54.746791" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:54.746316" elapsed="0.000712"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:54.746041" elapsed="0.001012"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:54.745815" elapsed="0.001264"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:54.747123" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:10:54.747330" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:54.747378" 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-25T01:10:54.741489" elapsed="0.005913"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:54.747870" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:54.747991" 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-25T01:10:54.747578" elapsed="0.000446"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:54.748707" 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-25T01:10:54.748399" elapsed="0.000384">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:54.748107" elapsed="0.000746">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:54.748085" elapsed="0.000800">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-25T01:10:54.749063" elapsed="0.000024"/>
</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-25T01:10:54.749245" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:54.749315" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:54.738595" elapsed="0.010828">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:54.738349" elapsed="0.011147">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:54.738200" elapsed="0.011354">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:54.737768" elapsed="0.011884">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:54.749941" elapsed="0.000056"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:54.705184" elapsed="0.044920">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:56.776505" elapsed="0.000310"/>
</kw>
<msg time="2026-04-25T01:10:56.776894" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:56.775817" elapsed="0.001138"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:56.775323" elapsed="0.001731"/>
</kw>
<msg time="2026-04-25T01:10:56.777101" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:56.766518" elapsed="0.010628"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:56.766093" elapsed="0.011128"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:56.777680" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:56.777420" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:56.782918" 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-25T01:10:56.782533" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:56.783461" 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-25T01:10:56.783164" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:56.783534" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:56.783690" 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-25T01:10:56.782157" elapsed="0.001558"/>
</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-25T01:10:56.783870" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:56.784547" level="INFO">${ds_type} = operational</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-25T01:10:56.784212" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:56.784970" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:56.784731" elapsed="0.000278"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:56.785389" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:56.785157" elapsed="0.000258"/>
</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-25T01:10:56.785803" 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-25T01:10:56.786089" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:56.785911" elapsed="0.000235"/>
</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-25T01:10:56.786318" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:56.786171" elapsed="0.000201"/>
</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-25T01:10:56.786536" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:56.786396" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:56.785891" elapsed="0.000718"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:56.785638" elapsed="0.000994"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:56.785460" elapsed="0.001197"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:56.786695" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:10:56.786893" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:56.786938" 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-25T01:10:56.781380" elapsed="0.005584"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:56.787599" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:56.787677" 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-25T01:10:56.787149" elapsed="0.000553"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:56.788332" 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-25T01:10:56.788050" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:56.787811" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:56.787791" elapsed="0.000713">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-25T01:10:56.788658" elapsed="0.000022"/>
</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-25T01:10:56.788833" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:56.788899" elapsed="0.000015"/>
</return>
<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>
<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-25T01:10:56.778759" elapsed="0.010262">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:56.778528" elapsed="0.010565">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:56.778387" elapsed="0.010760">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:56.777989" elapsed="0.011244">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:56.789467" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:56.751100" elapsed="0.038482">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:10:58.817672" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:10:58.818004" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:58.817004" elapsed="0.001066"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:58.816478" elapsed="0.001678"/>
</kw>
<msg time="2026-04-25T01:10:58.818202" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:10:58.807743" elapsed="0.010502"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:10:58.807294" elapsed="0.011025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:10:58.818780" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:10:58.818524" elapsed="0.000301"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:10:58.824231" 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-25T01:10:58.823828" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:58.824744" 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-25T01:10:58.824421" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:10:58.824818" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:10:58.824992" 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-25T01:10:58.823458" elapsed="0.001560"/>
</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-25T01:10:58.825181" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:10:58.825829" level="INFO">${ds_type} = operational</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-25T01:10:58.825496" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:58.826283" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:58.826029" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:10:58.826774" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:10:58.826529" elapsed="0.000271"/>
</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-25T01:10:58.827217" 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-25T01:10:58.827480" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:58.827333" elapsed="0.000203"/>
</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-25T01:10:58.827700" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:58.827560" elapsed="0.000193"/>
</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-25T01:10:58.827915" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:10:58.827776" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:10:58.827312" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:10:58.827047" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:58.826847" elapsed="0.001208"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:10:58.828098" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:10:58.828300" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:10:58.828345" 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-25T01:10:58.822718" elapsed="0.005651"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:10:58.828846" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:10:58.828923" 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-25T01:10:58.828540" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:10:58.829536" 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-25T01:10:58.829260" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:10:58.829036" elapsed="0.000638">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:10:58.829018" elapsed="0.000688">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-25T01:10:58.829858" elapsed="0.000022"/>
</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-25T01:10:58.830049" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:10:58.830117" elapsed="0.000016"/>
</return>
<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>
<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-25T01:10:58.819849" elapsed="0.010374">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:10:58.819616" elapsed="0.010677">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:10:58.819472" elapsed="0.010875">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:10:58.819074" elapsed="0.011361">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:10:58.830670" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:10:58.790481" elapsed="0.040304">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:00.857462" elapsed="0.000236"/>
</kw>
<msg time="2026-04-25T01:11:00.857763" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:00.856790" elapsed="0.001035"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:00.856329" elapsed="0.001573"/>
</kw>
<msg time="2026-04-25T01:11:00.858029" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:00.847767" elapsed="0.010313"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:00.847354" elapsed="0.010802"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:00.858606" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:00.858350" elapsed="0.000301"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:00.863822" 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-25T01:11:00.863439" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:00.864316" 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-25T01:11:00.864027" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:00.864389" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:00.864547" 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-25T01:11:00.863034" elapsed="0.001537"/>
</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-25T01:11:00.864725" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:00.865387" level="INFO">${ds_type} = operational</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-25T01:11:00.865055" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:00.865806" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:00.865570" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:00.866227" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:00.865992" elapsed="0.000260"/>
</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-25T01:11:00.866643" 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-25T01:11:00.866902" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:00.866755" elapsed="0.000201"/>
</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-25T01:11:00.867156" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:00.866999" elapsed="0.000211"/>
</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-25T01:11:00.867533" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:00.867384" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:00.866735" elapsed="0.000873"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:00.866477" elapsed="0.001156"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:00.866297" elapsed="0.001362"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:00.867699" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:11:00.867896" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:00.867941" 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-25T01:11:00.862301" elapsed="0.005679"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:00.868427" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:00.868504" 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-25T01:11:00.868153" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:00.869107" 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-25T01:11:00.868812" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:00.868597" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:00.868579" elapsed="0.000701">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-25T01:11:00.869433" elapsed="0.000022"/>
</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-25T01:11:00.869644" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:00.869711" elapsed="0.000016"/>
</return>
<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>
<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-25T01:11:00.859684" elapsed="0.010132">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:00.859448" elapsed="0.010438">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:00.859305" elapsed="0.010638">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:00.858880" elapsed="0.011171">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:00.870287" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:00.831681" elapsed="0.038721">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:02.898891" elapsed="0.000261"/>
</kw>
<msg time="2026-04-25T01:11:02.899218" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:02.898194" elapsed="0.001085"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:02.897675" elapsed="0.001683"/>
</kw>
<msg time="2026-04-25T01:11:02.899405" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:02.889059" elapsed="0.010391"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:02.888623" elapsed="0.010919"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:02.900035" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:02.899746" elapsed="0.000335"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:02.906752" 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-25T01:11:02.906308" elapsed="0.000472"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:02.907251" 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-25T01:11:02.906943" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:02.907323" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:11:02.907480" 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-25T01:11:02.905910" elapsed="0.001595"/>
</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-25T01:11:02.907660" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:02.908323" level="INFO">${ds_type} = operational</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-25T01:11:02.907989" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:02.908744" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:02.908506" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:02.909176" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:02.908916" elapsed="0.000286"/>
</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-25T01:11:02.909593" 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-25T01:11:02.909916" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:02.909700" elapsed="0.000294"/>
</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-25T01:11:02.910166" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:02.910021" elapsed="0.000199"/>
</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-25T01:11:02.910388" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:02.910244" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:02.909680" elapsed="0.000851"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:02.909426" elapsed="0.001129"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:02.909247" elapsed="0.001333"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:02.910620" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:02.910820" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:02.910866" 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-25T01:11:02.905181" elapsed="0.005709"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:02.911354" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:02.911430" 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-25T01:11:02.911080" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:02.912038" 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-25T01:11:02.911740" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:02.911523" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:02.911505" elapsed="0.000712">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-25T01:11:02.912370" elapsed="0.000022"/>
</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-25T01:11:02.912544" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:02.912608" elapsed="0.000016"/>
</return>
<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>
<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-25T01:11:02.901105" elapsed="0.011608">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:02.900852" elapsed="0.011929">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:02.900711" elapsed="0.012125">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:02.900316" elapsed="0.012605">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:02.913170" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:02.871365" elapsed="0.041921">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:04.940892" elapsed="0.000266"/>
</kw>
<msg time="2026-04-25T01:11:04.941226" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:04.940237" elapsed="0.001054"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:04.939748" elapsed="0.001623"/>
</kw>
<msg time="2026-04-25T01:11:04.941418" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:04.931182" elapsed="0.010280"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:04.930719" elapsed="0.010816"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:04.942083" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:04.941733" elapsed="0.000397"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:04.947330" 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-25T01:11:04.946888" elapsed="0.000470"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:04.947818" 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-25T01:11:04.947529" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:04.947891" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:04.948068" 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-25T01:11:04.946515" elapsed="0.001578"/>
</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-25T01:11:04.948250" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:04.948911" level="INFO">${ds_type} = operational</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-25T01:11:04.948565" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:04.949354" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:04.949114" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:04.949762" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:04.949528" elapsed="0.000259"/>
</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-25T01:11:04.950201" 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-25T01:11:04.950461" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:04.950311" elapsed="0.000204"/>
</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-25T01:11:04.950680" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:04.950540" elapsed="0.000193"/>
</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-25T01:11:04.950897" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:04.950756" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:04.950291" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:04.950032" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:04.949833" elapsed="0.001202"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:04.951074" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:04.951285" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:04.951331" 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-25T01:11:04.945777" elapsed="0.005581"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:04.951802" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:04.951879" 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-25T01:11:04.951532" elapsed="0.000371"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:04.952673" 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-25T01:11:04.952390" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:04.952162" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:04.951953" elapsed="0.000894">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-25T01:11:04.953019" elapsed="0.000023"/>
</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-25T01:11:04.953197" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:04.953263" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:04.943156" elapsed="0.010212">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:04.942900" elapsed="0.010574">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:04.942758" elapsed="0.010772">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:04.942361" elapsed="0.011255">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:04.953856" elapsed="0.000029"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:04.914256" elapsed="0.039735">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:06.986319" elapsed="0.000354"/>
</kw>
<msg time="2026-04-25T01:11:06.986766" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:06.985233" elapsed="0.001623"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:06.984415" elapsed="0.002580"/>
</kw>
<msg time="2026-04-25T01:11:06.987070" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:06.971668" elapsed="0.015473"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:06.971010" elapsed="0.016252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:06.987965" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:06.987568" elapsed="0.000489"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:06.996051" 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-25T01:11:06.995461" elapsed="0.000629"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:06.996761" 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-25T01:11:06.996325" elapsed="0.000477"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:06.996873" elapsed="0.000050"/>
</return>
<msg time="2026-04-25T01:11:06.997146" 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-25T01:11:06.994856" elapsed="0.002330"/>
</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-25T01:11:06.997432" elapsed="0.000240"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:06.998452" level="INFO">${ds_type} = operational</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-25T01:11:06.997916" elapsed="0.000575"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:06.999130" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:06.998733" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:06.999762" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:06.999396" elapsed="0.000404"/>
</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-25T01:11:07.000460" elapsed="0.000038"/>
</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-25T01:11:07.000860" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:07.000625" elapsed="0.000323"/>
</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-25T01:11:07.001238" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:07.001010" elapsed="0.000314"/>
</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-25T01:11:07.001586" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:07.001362" elapsed="0.000386"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:07.000596" elapsed="0.001192"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:07.000185" elapsed="0.001644"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:06.999872" elapsed="0.001999"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:07.001937" elapsed="0.000064"/>
</return>
<msg time="2026-04-25T01:11:07.002314" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:07.002382" 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-25T01:11:06.993736" elapsed="0.008680"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:07.003075" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:07.003183" 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-25T01:11:07.002665" elapsed="0.000553"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:07.004099" 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-25T01:11:07.003656" elapsed="0.000552">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:07.003321" elapsed="0.000987">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:07.003293" elapsed="0.001066">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-25T01:11:07.004595" elapsed="0.000034"/>
</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-25T01:11:07.004865" elapsed="0.000032"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:07.004984" elapsed="0.000027"/>
</return>
<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>
<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-25T01:11:06.989588" elapsed="0.015573">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:06.989239" elapsed="0.016036">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:06.989029" elapsed="0.016337">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:06.988425" elapsed="0.017084">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:07.005878" elapsed="0.000037"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:06.954685" elapsed="0.051397">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:09.033264" elapsed="0.000244"/>
</kw>
<msg time="2026-04-25T01:11:09.033577" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:09.032585" elapsed="0.001056"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:09.032116" elapsed="0.001606"/>
</kw>
<msg time="2026-04-25T01:11:09.033769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:09.023255" elapsed="0.010557"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:09.022799" elapsed="0.011087"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:09.034381" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:09.034118" elapsed="0.000310"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:09.039683" 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-25T01:11:09.039297" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:09.040280" 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-25T01:11:09.039980" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:09.040356" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:11:09.040516" 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-25T01:11:09.038903" elapsed="0.001638"/>
</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-25T01:11:09.040697" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:09.041370" level="INFO">${ds_type} = operational</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-25T01:11:09.041033" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:09.041798" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:09.041557" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:09.042228" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:09.041989" elapsed="0.000265"/>
</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-25T01:11:09.042650" 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-25T01:11:09.042908" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:09.042761" elapsed="0.000205"/>
</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-25T01:11:09.043149" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:09.043005" elapsed="0.000197"/>
</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-25T01:11:09.043367" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:09.043225" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:09.042741" elapsed="0.000699"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:09.042481" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:09.042300" elapsed="0.001188"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:09.043527" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:09.043726" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:09.043772" 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-25T01:11:09.038180" elapsed="0.005615"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:09.044279" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:09.044356" 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-25T01:11:09.044004" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:09.045171" 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-25T01:11:09.044863" elapsed="0.000383">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:09.044622" elapsed="0.000692">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:09.044429" elapsed="0.000917">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-25T01:11:09.045501" elapsed="0.000022"/>
</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-25T01:11:09.045678" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:09.045743" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:09.035510" elapsed="0.010338">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:09.035276" elapsed="0.010641">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:09.035134" elapsed="0.010855">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:09.034709" elapsed="0.011371">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:09.046318" elapsed="0.000061"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:09.007038" elapsed="0.039436">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:11.074150" elapsed="0.000235"/>
</kw>
<msg time="2026-04-25T01:11:11.074450" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:11.073474" elapsed="0.001038"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:11.073004" elapsed="0.001588"/>
</kw>
<msg time="2026-04-25T01:11:11.074674" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:11.064378" elapsed="0.010344"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:11.063924" elapsed="0.010875"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:11.075309" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:11.075006" elapsed="0.000348"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:11.080833" 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-25T01:11:11.080444" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:11.081326" 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-25T01:11:11.081039" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:11.081399" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:11:11.081557" 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-25T01:11:11.080034" elapsed="0.001547"/>
</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-25T01:11:11.081735" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:11.082398" level="INFO">${ds_type} = operational</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-25T01:11:11.082066" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:11.082820" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:11.082582" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:11.083246" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:11.083008" 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-25T01:11:11.083673" elapsed="0.000025"/>
</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-25T01:11:11.083928" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:11.083781" elapsed="0.000217"/>
</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-25T01:11:11.084169" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:11.084023" elapsed="0.000201"/>
</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-25T01:11:11.084419" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:11.084247" elapsed="0.000226"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:11.083762" elapsed="0.000734"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:11.083505" elapsed="0.001014"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:11.083316" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:11.084581" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:11.084781" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:11.084826" 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-25T01:11:11.079295" elapsed="0.005554"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:11.085376" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:11.085453" 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-25T01:11:11.085100" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:11.086057" 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-25T01:11:11.085763" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:11.085546" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:11.085527" elapsed="0.000707">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-25T01:11:11.086387" elapsed="0.000022"/>
</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-25T01:11:11.086563" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:11.086628" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:11.076402" elapsed="0.010332">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:11.076142" elapsed="0.010660">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:11.075998" elapsed="0.010858">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:11.075587" elapsed="0.011356">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:11.087200" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:11.047405" elapsed="0.039911">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:13.115525" elapsed="0.000236"/>
</kw>
<msg time="2026-04-25T01:11:13.115826" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:13.114831" elapsed="0.001057"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:13.114362" elapsed="0.001634"/>
</kw>
<msg time="2026-04-25T01:11:13.116045" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:13.104456" elapsed="0.011633"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:13.104030" elapsed="0.012133"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:13.116621" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:13.116366" elapsed="0.000300"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:13.121890" 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-25T01:11:13.121502" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:13.122392" 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-25T01:11:13.122096" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:13.122466" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:13.122625" 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-25T01:11:13.121126" elapsed="0.001523"/>
</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-25T01:11:13.122886" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:13.123562" level="INFO">${ds_type} = operational</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-25T01:11:13.123225" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:13.124027" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:13.123749" elapsed="0.000305"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:13.124442" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:13.124205" elapsed="0.000262"/>
</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-25T01:11:13.124870" 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-25T01:11:13.125156" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:13.125002" elapsed="0.000215"/>
</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-25T01:11:13.125384" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:13.125243" elapsed="0.000194"/>
</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-25T01:11:13.125603" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:13.125460" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:13.124979" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:13.124700" elapsed="0.001002"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:13.124514" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:13.125769" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:11:13.125986" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:13.126035" 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-25T01:11:13.120392" elapsed="0.005666"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:13.126695" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:13.126773" 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-25T01:11:13.126237" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:13.127391" 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-25T01:11:13.127105" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:13.126868" elapsed="0.000666">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:13.126849" elapsed="0.000717">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-25T01:11:13.127720" elapsed="0.000022"/>
</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-25T01:11:13.127897" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:13.128013" elapsed="0.000018"/>
</return>
<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>
<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-25T01:11:13.117693" elapsed="0.010431">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:13.117454" elapsed="0.010747">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:13.117310" elapsed="0.010950">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:13.116899" elapsed="0.011449">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:13.128585" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:13.088313" elapsed="0.040388">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:15.156570" elapsed="0.000349"/>
</kw>
<msg time="2026-04-25T01:11:15.157005" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:15.155890" elapsed="0.001184"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:15.155414" elapsed="0.001742"/>
</kw>
<msg time="2026-04-25T01:11:15.157206" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:15.146496" elapsed="0.010754"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:15.146068" elapsed="0.011256"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:15.157786" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:15.157526" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:15.163247" 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-25T01:11:15.162829" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:15.163744" 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-25T01:11:15.163440" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:15.163819" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:15.163997" 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-25T01:11:15.162454" elapsed="0.001569"/>
</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-25T01:11:15.164183" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:15.164846" level="INFO">${ds_type} = operational</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-25T01:11:15.164508" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:15.165294" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:15.165052" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:15.165731" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:15.165474" elapsed="0.000284"/>
</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-25T01:11:15.166193" elapsed="0.000025"/>
</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-25T01:11:15.166459" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:15.166303" elapsed="0.000212"/>
</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-25T01:11:15.166686" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:15.166540" elapsed="0.000201"/>
</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-25T01:11:15.166909" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:15.166765" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:15.166283" elapsed="0.000768"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:15.166019" elapsed="0.001057"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:15.165806" elapsed="0.001295"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:15.167141" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:15.167350" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:15.167402" 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-25T01:11:15.161715" elapsed="0.005712"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:15.167874" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:15.167952" 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-25T01:11:15.167601" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:15.168631" 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-25T01:11:15.168342" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:15.168118" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:15.168098" elapsed="0.000710">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-25T01:11:15.168979" elapsed="0.000023"/>
</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-25T01:11:15.169159" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:15.169226" elapsed="0.000016"/>
</return>
<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>
<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-25T01:11:15.158883" elapsed="0.010450">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:15.158638" elapsed="0.010764">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:15.158487" elapsed="0.010970">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:15.158085" elapsed="0.011459">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:15.169782" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:15.129593" elapsed="0.040306">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:17.198738" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:11:17.199056" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:17.198084" elapsed="0.001034"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:17.197604" elapsed="0.001593"/>
</kw>
<msg time="2026-04-25T01:11:17.199242" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:17.188985" elapsed="0.010299"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:17.188554" elapsed="0.010804"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:17.199807" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:17.199552" elapsed="0.000300"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:17.205025" 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-25T01:11:17.204626" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:17.205513" 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-25T01:11:17.205215" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:17.205586" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:11:17.205745" 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-25T01:11:17.204254" elapsed="0.001515"/>
</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-25T01:11:17.205930" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:17.206591" level="INFO">${ds_type} = operational</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-25T01:11:17.206260" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:17.207030" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:17.206776" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:17.207519" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:17.207279" elapsed="0.000265"/>
</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-25T01:11:17.207943" elapsed="0.000040"/>
</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-25T01:11:17.208228" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:17.208075" elapsed="0.000208"/>
</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-25T01:11:17.208451" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:17.208309" elapsed="0.000195"/>
</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-25T01:11:17.208830" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:17.208681" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:17.208054" elapsed="0.000852"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:17.207774" elapsed="0.001157"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:17.207590" elapsed="0.001368"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:17.209015" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:11:17.209220" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:17.209266" 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-25T01:11:17.203528" elapsed="0.005762"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:17.209763" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:17.209840" 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-25T01:11:17.209465" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:17.210457" 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-25T01:11:17.210177" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:17.209934" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:17.209915" elapsed="0.000720">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-25T01:11:17.210789" elapsed="0.000022"/>
</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-25T01:11:17.210978" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:17.211047" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:17.200871" elapsed="0.010283">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:17.200639" elapsed="0.010583">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:17.200496" elapsed="0.010781">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:17.200098" elapsed="0.011266">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:17.211599" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:17.170740" elapsed="0.040975">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:19.239562" elapsed="0.000260"/>
</kw>
<msg time="2026-04-25T01:11:19.239894" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:19.238880" elapsed="0.001079"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:19.238404" elapsed="0.001652"/>
</kw>
<msg time="2026-04-25T01:11:19.240185" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:19.229643" elapsed="0.010590"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:19.229210" elapsed="0.011100"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:19.240780" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:19.240517" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:19.247705" 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-25T01:11:19.247292" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:19.248204" 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-25T01:11:19.247897" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:19.248278" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:19.248437" 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-25T01:11:19.246893" elapsed="0.001568"/>
</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-25T01:11:19.248617" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:19.249293" level="INFO">${ds_type} = operational</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-25T01:11:19.248935" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:19.249717" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:19.249479" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:19.250147" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:19.249891" elapsed="0.000281"/>
</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-25T01:11:19.250573" 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-25T01:11:19.250832" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:19.250683" elapsed="0.000204"/>
</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-25T01:11:19.251068" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:19.250912" elapsed="0.000211"/>
</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-25T01:11:19.251287" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:19.251146" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:19.250663" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:19.250403" elapsed="0.000981"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:19.250218" elapsed="0.001193"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:19.251451" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:19.251652" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:19.251729" 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-25T01:11:19.246142" elapsed="0.005611"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:19.253925" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:19.254177" 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-25T01:11:19.252926" elapsed="0.001306"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:19.255778" 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-25T01:11:19.255081" elapsed="0.000855">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:19.254457" elapsed="0.001663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:19.254400" elapsed="0.001797">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-25T01:11:19.256551" elapsed="0.000050"/>
</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-25T01:11:19.257126" elapsed="0.000049"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:19.257291" elapsed="0.000038"/>
</return>
<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>
<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-25T01:11:19.241890" elapsed="0.015659">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:19.241644" elapsed="0.016064">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:19.241496" elapsed="0.016344">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:19.241085" elapsed="0.016991">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:19.258668" elapsed="0.000169"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:19.212687" elapsed="0.046400">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:21.290782" elapsed="0.000263"/>
</kw>
<msg time="2026-04-25T01:11:21.291116" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:21.290110" elapsed="0.001072"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:21.289541" elapsed="0.001722"/>
</kw>
<msg time="2026-04-25T01:11:21.291309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:21.280099" elapsed="0.011255"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:21.279452" elapsed="0.011975"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:21.291925" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:21.291637" elapsed="0.000365"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:21.297528" 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-25T01:11:21.297054" elapsed="0.000503"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:21.298041" 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-25T01:11:21.297726" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:21.298117" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:11:21.298279" 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-25T01:11:21.296620" elapsed="0.001684"/>
</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-25T01:11:21.298482" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:21.299180" level="INFO">${ds_type} = operational</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-25T01:11:21.298818" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:21.299611" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:21.299368" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:21.300104" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:21.299811" elapsed="0.000322"/>
</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-25T01:11:21.300565" elapsed="0.000025"/>
</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-25T01:11:21.300915" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:21.300681" elapsed="0.000309"/>
</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-25T01:11:21.301165" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:21.301018" elapsed="0.000201"/>
</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-25T01:11:21.301384" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:21.301242" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:21.300658" elapsed="0.000801"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:21.300384" elapsed="0.001101"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:21.300182" elapsed="0.001330"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:21.301553" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:21.301756" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:21.301801" 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-25T01:11:21.295796" elapsed="0.006028"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:21.302298" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:21.302377" 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-25T01:11:21.302015" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:21.303185" 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-25T01:11:21.302872" elapsed="0.000389">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:21.302643" elapsed="0.000688">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:21.302452" elapsed="0.000912">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-25T01:11:21.303519" elapsed="0.000022"/>
</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-25T01:11:21.303727" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:21.303797" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:21.293070" elapsed="0.010834">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:21.292806" elapsed="0.011194">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:21.292660" elapsed="0.011402">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:21.292250" elapsed="0.011899">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:21.304386" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:21.260072" elapsed="0.044430">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:23.334494" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:11:23.334808" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:23.333824" elapsed="0.001047"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:23.333357" elapsed="0.001596"/>
</kw>
<msg time="2026-04-25T01:11:23.335017" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:23.324690" elapsed="0.010373"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:23.324258" elapsed="0.010906"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:23.335703" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:23.335362" elapsed="0.000387"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:23.341219" 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-25T01:11:23.340779" elapsed="0.000468"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:23.341700" 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-25T01:11:23.341411" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:23.341774" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:23.341932" 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-25T01:11:23.340405" elapsed="0.001552"/>
</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-25T01:11:23.342136" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:23.342790" level="INFO">${ds_type} = operational</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-25T01:11:23.342455" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:23.343243" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:23.342994" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:23.343658" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:23.343420" 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-25T01:11:23.344099" elapsed="0.000031"/>
</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-25T01:11:23.344443" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:23.344242" elapsed="0.000273"/>
</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-25T01:11:23.344688" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:23.344542" elapsed="0.000200"/>
</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-25T01:11:23.344909" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:23.344766" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:23.344216" elapsed="0.000782"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:23.343912" elapsed="0.001111"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:23.343730" elapsed="0.001318"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:23.345087" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:23.345287" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:23.345333" 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-25T01:11:23.339672" elapsed="0.005684"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:23.345816" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:23.345900" 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-25T01:11:23.345530" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:23.346512" 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-25T01:11:23.346232" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:23.346012" elapsed="0.000642">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:23.345993" elapsed="0.000692">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-25T01:11:23.346839" 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-25T01:11:23.347056" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:23.347127" elapsed="0.000016"/>
</return>
<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>
<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-25T01:11:23.336779" elapsed="0.010456">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:23.336543" elapsed="0.010801">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:23.336401" elapsed="0.011001">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:23.335998" elapsed="0.011504">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:23.347743" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:23.305435" elapsed="0.042425">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:25.377666" elapsed="0.000254"/>
</kw>
<msg time="2026-04-25T01:11:25.378010" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:25.376999" elapsed="0.001080"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:25.376507" elapsed="0.001656"/>
</kw>
<msg time="2026-04-25T01:11:25.378211" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:25.367578" elapsed="0.010677"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:25.367023" elapsed="0.011307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:25.378789" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:25.378530" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:25.384131" 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-25T01:11:25.383725" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:25.384760" 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-25T01:11:25.384357" elapsed="0.000439"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:25.384861" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:11:25.385104" 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-25T01:11:25.383338" elapsed="0.001802"/>
</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-25T01:11:25.385357" elapsed="0.000216"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:25.386283" level="INFO">${ds_type} = operational</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-25T01:11:25.385797" elapsed="0.000523"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:25.386874" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:25.386541" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:25.387526" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:25.387183" elapsed="0.000379"/>
</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-25T01:11:25.388232" elapsed="0.000045"/>
</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-25T01:11:25.388610" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:25.388403" elapsed="0.000284"/>
</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-25T01:11:25.388917" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:25.388722" elapsed="0.000292"/>
</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-25T01:11:25.389246" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:25.389047" elapsed="0.000353"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:25.388375" elapsed="0.001060"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:25.387925" elapsed="0.001543"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:25.387628" elapsed="0.002063"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:25.389751" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:11:25.390069" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:25.390136" 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-25T01:11:25.382558" elapsed="0.007611"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:25.390803" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:25.390915" 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-25T01:11:25.390418" elapsed="0.000531"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:25.392187" 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-25T01:11:25.391694" elapsed="0.000594">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:25.391339" elapsed="0.001042">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:25.391059" elapsed="0.001368">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-25T01:11:25.392665" elapsed="0.000032"/>
</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-25T01:11:25.392956" elapsed="0.000063"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:25.393099" elapsed="0.000025"/>
</return>
<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>
<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-25T01:11:25.379888" elapsed="0.013368">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:25.379649" elapsed="0.013706">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:25.379503" elapsed="0.013929">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:25.379083" elapsed="0.014470">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:25.393899" elapsed="0.000037"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:25.348711" elapsed="0.045387">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:27.420760" elapsed="0.000262"/>
</kw>
<msg time="2026-04-25T01:11:27.421093" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:27.420094" elapsed="0.001066"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:27.419612" elapsed="0.001629"/>
</kw>
<msg time="2026-04-25T01:11:27.421287" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:27.410910" elapsed="0.010421"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:27.410479" elapsed="0.010925"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:27.421894" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:27.421614" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:27.427409" 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-25T01:11:27.427015" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:27.427996" 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-25T01:11:27.427685" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:27.428074" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:27.428237" 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-25T01:11:27.426597" elapsed="0.001665"/>
</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-25T01:11:27.428425" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:27.429107" level="INFO">${ds_type} = operational</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-25T01:11:27.428743" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:27.429541" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:27.429297" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:27.429960" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:27.429718" elapsed="0.000284"/>
</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-25T01:11:27.430432" elapsed="0.000025"/>
</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-25T01:11:27.430712" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:27.430546" elapsed="0.000224"/>
</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-25T01:11:27.430939" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:27.430794" elapsed="0.000219"/>
</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-25T01:11:27.431181" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:27.431037" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:27.430524" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:27.430256" elapsed="0.001025"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:27.430049" elapsed="0.001257"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:27.431344" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:11:27.431549" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:27.431597" 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-25T01:11:27.425864" elapsed="0.005757"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:27.432142" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:27.432222" 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-25T01:11:27.431797" elapsed="0.000449"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:27.432841" 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-25T01:11:27.432539" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:27.432318" elapsed="0.000682">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:27.432299" elapsed="0.000734">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-25T01:11:27.433188" elapsed="0.000023"/>
</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-25T01:11:27.433364" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:27.433430" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:27.423055" elapsed="0.010481">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:27.422776" elapsed="0.010828">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:27.422608" elapsed="0.011051">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:27.422198" elapsed="0.011549">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:27.434003" elapsed="0.000065"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:27.395091" elapsed="0.039081">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:29.462658" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:11:29.462985" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:29.461998" elapsed="0.001051"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:29.461514" elapsed="0.001617"/>
</kw>
<msg time="2026-04-25T01:11:29.463179" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:29.452811" elapsed="0.010413"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:29.452386" elapsed="0.010914"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:29.463755" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:29.463494" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:29.469024" 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-25T01:11:29.468610" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:29.469530" 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-25T01:11:29.469239" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:29.469603" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:11:29.469760" 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-25T01:11:29.468237" elapsed="0.001546"/>
</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-25T01:11:29.469937" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:29.470602" level="INFO">${ds_type} = operational</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-25T01:11:29.470270" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:29.471068" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:29.470785" elapsed="0.000309"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:29.471476" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:29.471243" elapsed="0.000258"/>
</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-25T01:11:29.471900" 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-25T01:11:29.472175" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:29.472027" elapsed="0.000205"/>
</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-25T01:11:29.472414" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:29.472263" elapsed="0.000206"/>
</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-25T01:11:29.472634" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:29.472492" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:29.472006" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:29.471727" elapsed="0.001005"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:29.471546" elapsed="0.001211"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:29.472796" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:11:29.473024" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:29.473081" 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-25T01:11:29.467505" elapsed="0.005602"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:29.473800" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:29.473880" 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-25T01:11:29.473348" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:29.474497" 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-25T01:11:29.474213" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:29.473991" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:29.473957" elapsed="0.000716">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-25T01:11:29.474827" elapsed="0.000022"/>
</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-25T01:11:29.475031" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:29.475106" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:29.464824" elapsed="0.010406">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:29.464591" elapsed="0.010708">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:29.464451" elapsed="0.010901">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:29.464049" elapsed="0.011390">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:29.475675" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:29.435133" elapsed="0.040657">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:31.510175" elapsed="0.000297"/>
</kw>
<msg time="2026-04-25T01:11:31.510547" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:31.509437" elapsed="0.001182"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:31.508942" elapsed="0.001767"/>
</kw>
<msg time="2026-04-25T01:11:31.510762" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:31.498219" elapsed="0.012593"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:31.497744" elapsed="0.013153"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:31.511489" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:31.511152" elapsed="0.000435"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:31.519521" 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-25T01:11:31.519120" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:31.520020" 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-25T01:11:31.519712" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:31.520095" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:11:31.520253" 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-25T01:11:31.518720" elapsed="0.001557"/>
</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-25T01:11:31.520516" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:31.521220" level="INFO">${ds_type} = operational</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-25T01:11:31.520851" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:31.521678" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:31.521429" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:31.522155" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:31.521857" elapsed="0.000325"/>
</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-25T01:11:31.522601" elapsed="0.000025"/>
</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-25T01:11:31.522872" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:31.522713" elapsed="0.000227"/>
</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-25T01:11:31.523169" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:31.522992" elapsed="0.000242"/>
</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-25T01:11:31.523405" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:31.523259" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:31.522693" elapsed="0.000806"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:31.522428" elapsed="0.001098"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:31.522231" elapsed="0.001322"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:31.523593" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:31.523794" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:31.523841" 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-25T01:11:31.518000" elapsed="0.005872"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:31.524355" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:31.524433" 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-25T01:11:31.524075" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:31.525101" 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-25T01:11:31.524752" elapsed="0.000424">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:31.524525" elapsed="0.000719">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:31.524507" elapsed="0.000769">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-25T01:11:31.525478" elapsed="0.000024"/>
</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-25T01:11:31.525656" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:31.525721" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:31.515034" elapsed="0.010794">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:31.512860" elapsed="0.013038">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:31.512652" elapsed="0.013303">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:31.511950" elapsed="0.014117">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:31.526304" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:31.476688" elapsed="0.049732">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:33.555740" elapsed="0.000345"/>
</kw>
<msg time="2026-04-25T01:11:33.556156" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:33.555051" elapsed="0.001170"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:33.554564" elapsed="0.001738"/>
</kw>
<msg time="2026-04-25T01:11:33.556349" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:33.545891" elapsed="0.010502"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:33.545444" elapsed="0.011024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:33.556926" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:33.556666" elapsed="0.000320"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:33.562226" 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-25T01:11:33.561799" elapsed="0.000455"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:33.562709" 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-25T01:11:33.562419" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:33.562782" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:11:33.562953" 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-25T01:11:33.561413" elapsed="0.001582"/>
</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-25T01:11:33.563160" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:33.563846" level="INFO">${ds_type} = operational</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-25T01:11:33.563508" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:33.564290" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:33.564048" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:33.564699" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:33.564464" elapsed="0.000260"/>
</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-25T01:11:33.565134" elapsed="0.000025"/>
</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-25T01:11:33.565395" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:33.565247" elapsed="0.000203"/>
</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-25T01:11:33.565614" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:33.565474" elapsed="0.000200"/>
</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-25T01:11:33.566014" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:33.565852" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:33.565225" elapsed="0.000867"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:33.564952" elapsed="0.001164"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:33.564770" elapsed="0.001372"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:33.566181" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:33.566382" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:33.566427" 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-25T01:11:33.560655" elapsed="0.005795"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:33.566901" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:33.566994" 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-25T01:11:33.566624" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:33.567661" 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-25T01:11:33.567349" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:33.567127" elapsed="0.000675">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:33.567107" elapsed="0.000726">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-25T01:11:33.568003" elapsed="0.000023"/>
</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-25T01:11:33.568219" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:33.568293" elapsed="0.000016"/>
</return>
<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>
<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-25T01:11:33.558019" elapsed="0.010381">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:33.557764" elapsed="0.010704">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:33.557619" elapsed="0.010904">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:33.557220" elapsed="0.011391">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:33.568847" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:33.527289" elapsed="0.041688">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:35.599635" elapsed="0.000277"/>
</kw>
<msg time="2026-04-25T01:11:35.599999" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:35.598886" elapsed="0.001180"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:35.598378" elapsed="0.001772"/>
</kw>
<msg time="2026-04-25T01:11:35.600195" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:35.588775" elapsed="0.011464"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:35.587975" elapsed="0.012338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:35.600818" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:35.600552" elapsed="0.000312"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:35.607698" 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-25T01:11:35.607303" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:35.608201" 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-25T01:11:35.607890" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:35.608274" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:35.608433" 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-25T01:11:35.606907" elapsed="0.001550"/>
</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-25T01:11:35.608615" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:35.609287" level="INFO">${ds_type} = operational</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-25T01:11:35.608933" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:35.609710" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:35.609471" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:35.610215" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:35.609956" elapsed="0.000285"/>
</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-25T01:11:35.610714" elapsed="0.000039"/>
</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-25T01:11:35.611071" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:35.610872" elapsed="0.000261"/>
</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-25T01:11:35.611301" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:35.611159" elapsed="0.000196"/>
</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-25T01:11:35.611520" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:35.611378" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:35.610844" elapsed="0.000749"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:35.610478" elapsed="0.001138"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:35.610289" elapsed="0.001353"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:35.611683" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:11:35.611887" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:35.611932" 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-25T01:11:35.606162" elapsed="0.005794"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:35.612430" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:35.612507" 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-25T01:11:35.612147" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:35.613158" 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-25T01:11:35.612822" elapsed="0.000410">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:35.612602" elapsed="0.000698">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:35.612583" elapsed="0.000749">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-25T01:11:35.613487" elapsed="0.000022"/>
</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-25T01:11:35.613661" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:35.613727" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:35.601960" elapsed="0.011873">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:35.601721" elapsed="0.012181">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:35.601574" elapsed="0.012384">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:35.601114" elapsed="0.012955">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:35.614310" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:35.569817" elapsed="0.044608">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:37.671977" elapsed="0.000251"/>
</kw>
<msg time="2026-04-25T01:11:37.672297" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:37.671212" elapsed="0.001149"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:37.670704" elapsed="0.001738"/>
</kw>
<msg time="2026-04-25T01:11:37.672577" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:37.662054" elapsed="0.010570"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:37.661583" elapsed="0.011117"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:37.673171" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:37.672888" elapsed="0.000329"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:37.678427" 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-25T01:11:37.678034" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:37.678931" 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-25T01:11:37.678637" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:37.679022" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:37.679183" 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-25T01:11:37.677632" elapsed="0.001576"/>
</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-25T01:11:37.679364" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:37.680035" level="INFO">${ds_type} = operational</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-25T01:11:37.679681" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:37.680464" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:37.680222" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:37.681044" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:37.680637" elapsed="0.000434"/>
</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-25T01:11:37.681533" elapsed="0.000034"/>
</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-25T01:11:37.681807" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:37.681656" elapsed="0.000208"/>
</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-25T01:11:37.682048" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:37.681888" elapsed="0.000215"/>
</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-25T01:11:37.682271" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:37.682127" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:37.681636" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:37.681306" elapsed="0.001069"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:37.681118" elapsed="0.001283"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:37.682440" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:37.682678" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:37.682725" 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-25T01:11:37.676886" elapsed="0.005864"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:37.683217" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:37.683296" 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-25T01:11:37.682924" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:37.683911" 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-25T01:11:37.683613" elapsed="0.000413">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:37.683392" elapsed="0.000718">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:37.683373" elapsed="0.000777">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-25T01:11:37.684358" elapsed="0.000028"/>
</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-25T01:11:37.684593" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:37.684806" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:37.674232" elapsed="0.010684">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:37.674001" elapsed="0.011006">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:37.673846" elapsed="0.011222">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:37.673446" elapsed="0.011713">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:37.685399" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:37.615373" elapsed="0.070146">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:39.715608" elapsed="0.000319"/>
</kw>
<msg time="2026-04-25T01:11:39.716026" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:39.714651" elapsed="0.001457"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:39.713959" elapsed="0.002258"/>
</kw>
<msg time="2026-04-25T01:11:39.716280" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:39.701788" elapsed="0.014554"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:39.701254" elapsed="0.015192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:39.717095" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:39.716724" elapsed="0.000438"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:39.724510" 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-25T01:11:39.724008" elapsed="0.000537"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:39.725155" 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-25T01:11:39.724759" elapsed="0.000430"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:39.725252" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:11:39.725458" 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-25T01:11:39.723500" elapsed="0.001991"/>
</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-25T01:11:39.725695" elapsed="0.000202"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:39.726584" level="INFO">${ds_type} = operational</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-25T01:11:39.726136" elapsed="0.000482"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:39.727164" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:39.726831" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:39.727731" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:39.727414" elapsed="0.000352"/>
</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-25T01:11:39.728320" elapsed="0.000033"/>
</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-25T01:11:39.728762" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:39.728460" elapsed="0.000377"/>
</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-25T01:11:39.729075" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:39.728869" elapsed="0.000276"/>
</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-25T01:11:39.729367" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:39.729176" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:39.728436" elapsed="0.001027"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:39.728092" elapsed="0.001401"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:39.727829" elapsed="0.001696"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:39.729574" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:11:39.729826" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:39.729884" 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-25T01:11:39.722483" elapsed="0.007431"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:39.730507" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:39.730603" 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-25T01:11:39.730160" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:39.731386" 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-25T01:11:39.731017" elapsed="0.000461">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:39.730721" elapsed="0.000844">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:39.730697" elapsed="0.000907">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-25T01:11:39.731806" elapsed="0.000027"/>
</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-25T01:11:39.732050" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:39.732134" elapsed="0.000020"/>
</return>
<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>
<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-25T01:11:39.718566" elapsed="0.013705">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:39.718246" elapsed="0.014121">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:39.718060" elapsed="0.014379">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:39.717517" elapsed="0.015039">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:39.732861" elapsed="0.000032"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:39.686232" elapsed="0.046797">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:41.764366" elapsed="0.000288"/>
</kw>
<msg time="2026-04-25T01:11:41.764756" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:41.763510" elapsed="0.001324"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:41.763019" elapsed="0.001917"/>
</kw>
<msg time="2026-04-25T01:11:41.765014" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:41.754285" elapsed="0.010786"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:41.753838" elapsed="0.011328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:41.766014" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:41.765415" elapsed="0.000658"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:41.772016" 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-25T01:11:41.771570" elapsed="0.000476"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:41.772515" 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-25T01:11:41.772213" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:41.772590" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:11:41.772796" 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-25T01:11:41.771179" elapsed="0.001642"/>
</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-25T01:11:41.772997" elapsed="0.000171"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:41.773674" level="INFO">${ds_type} = operational</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-25T01:11:41.773331" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:41.774120" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:41.773861" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:41.774533" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:41.774296" 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-25T01:11:41.774959" elapsed="0.000039"/>
</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-25T01:11:41.775239" elapsed="0.000226"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:41.775089" elapsed="0.000428"/>
</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-25T01:11:41.775701" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:41.775546" elapsed="0.000216"/>
</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-25T01:11:41.775943" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:41.775792" elapsed="0.000222"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:41.775069" elapsed="0.000969"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:41.774790" elapsed="0.001272"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:41.774606" elapsed="0.001482"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:41.776129" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:41.776334" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:41.776379" 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-25T01:11:41.770433" elapsed="0.005970"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:41.776878" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:41.776957" 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-25T01:11:41.776577" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:41.777593" 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-25T01:11:41.777304" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:41.777069" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:41.777050" elapsed="0.000719">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-25T01:11:41.777926" 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-25T01:11:41.778121" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:41.778188" elapsed="0.000016"/>
</return>
<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>
<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-25T01:11:41.767358" elapsed="0.010938">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:41.767064" elapsed="0.011367">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:41.766872" elapsed="0.011616">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:41.766373" elapsed="0.012205">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:41.778820" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:41.733874" elapsed="0.045065">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:43.808088" elapsed="0.000262"/>
</kw>
<msg time="2026-04-25T01:11:43.808421" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:43.807396" elapsed="0.001095"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:43.806889" elapsed="0.001685"/>
</kw>
<msg time="2026-04-25T01:11:43.808623" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:43.798026" elapsed="0.010643"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:43.797575" elapsed="0.011172"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:43.809243" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:43.808948" elapsed="0.000354"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:43.814919" 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-25T01:11:43.814516" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:43.815428" 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-25T01:11:43.815132" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:43.815505" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:11:43.815670" 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-25T01:11:43.814081" elapsed="0.001614"/>
</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-25T01:11:43.815854" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:43.816540" level="INFO">${ds_type} = operational</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-25T01:11:43.816192" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:43.816991" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:43.816731" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:43.817410" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:43.817169" elapsed="0.000267"/>
</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-25T01:11:43.817860" elapsed="0.000027"/>
</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-25T01:11:43.818145" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:43.817992" 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-25T01:11:43.818391" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:43.818230" elapsed="0.000219"/>
</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-25T01:11:43.818621" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:43.818473" elapsed="0.000274"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:43.817955" elapsed="0.000819"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:43.817669" elapsed="0.001132"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:43.817484" elapsed="0.001345"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:43.818872" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:11:43.819122" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:43.819172" 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-25T01:11:43.813324" elapsed="0.005874"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:43.819661" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:43.819743" 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-25T01:11:43.819380" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:43.820369" 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-25T01:11:43.820083" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:43.819842" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:43.819822" elapsed="0.000727">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-25T01:11:43.820707" elapsed="0.000024"/>
</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-25T01:11:43.820891" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:43.820976" elapsed="0.000020"/>
</return>
<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>
<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-25T01:11:43.810453" elapsed="0.010653">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:43.810174" elapsed="0.011007">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:43.810022" elapsed="0.011219">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:43.809593" elapsed="0.011740">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:43.821579" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:43.779862" elapsed="0.041839">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:45.852009" elapsed="0.000355"/>
</kw>
<msg time="2026-04-25T01:11:45.852480" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:45.851232" elapsed="0.001346"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:45.850597" elapsed="0.002111"/>
</kw>
<msg time="2026-04-25T01:11:45.852785" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:45.837032" elapsed="0.015823"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:45.836466" elapsed="0.016530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:45.853699" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:45.853317" elapsed="0.000446"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:45.860909" 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-25T01:11:45.860229" elapsed="0.000726"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:45.861773" 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-25T01:11:45.861354" elapsed="0.000456"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:45.861876" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:11:45.862133" 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-25T01:11:45.859644" elapsed="0.002526"/>
</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-25T01:11:45.862395" elapsed="0.000213"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:45.863290" level="INFO">${ds_type} = operational</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-25T01:11:45.862781" elapsed="0.000539"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:45.863876" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:45.863507" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:45.864548" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:45.864167" elapsed="0.000421"/>
</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-25T01:11:45.865282" elapsed="0.000036"/>
</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-25T01:11:45.865626" elapsed="0.000262"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:45.865451" elapsed="0.000479"/>
</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-25T01:11:45.866183" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:45.865959" elapsed="0.000302"/>
</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-25T01:11:45.866486" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:45.866293" elapsed="0.000255"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:45.865417" elapsed="0.001155"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:45.864997" elapsed="0.001602"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:45.864668" elapsed="0.001959"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:45.866671" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:11:45.866896" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:45.866943" 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-25T01:11:45.858744" elapsed="0.008239"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:45.867576" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:45.867698" 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-25T01:11:45.867168" elapsed="0.000568"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:45.868701" 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-25T01:11:45.868209" elapsed="0.000606">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:45.867844" elapsed="0.001072">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:45.867815" elapsed="0.001144">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-25T01:11:45.869191" elapsed="0.000032"/>
</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-25T01:11:45.869436" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:45.869530" elapsed="0.000022"/>
</return>
<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>
<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-25T01:11:45.855153" elapsed="0.014526">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:45.854857" elapsed="0.014925">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:45.854655" elapsed="0.015211">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:45.854106" elapsed="0.015910">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:45.870310" elapsed="0.000105"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:45.822433" elapsed="0.048086">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:47.897774" elapsed="0.000254"/>
</kw>
<msg time="2026-04-25T01:11:47.898094" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:47.897115" elapsed="0.001042"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:47.896632" elapsed="0.001604"/>
</kw>
<msg time="2026-04-25T01:11:47.898284" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:47.887809" elapsed="0.010520"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:47.887379" elapsed="0.011026"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:47.898882" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:47.898601" elapsed="0.000328"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:47.904459" 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-25T01:11:47.904035" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:47.904944" 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-25T01:11:47.904652" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:47.905035" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:11:47.905196" 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-25T01:11:47.903637" elapsed="0.001583"/>
</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-25T01:11:47.905377" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:47.906065" level="INFO">${ds_type} = operational</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-25T01:11:47.905709" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:47.906493" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:47.906252" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:47.906938" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:47.906699" elapsed="0.000278"/>
</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-25T01:11:47.907379" 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-25T01:11:47.907635" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:47.907488" elapsed="0.000203"/>
</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-25T01:11:47.907857" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:47.907716" elapsed="0.000194"/>
</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-25T01:11:47.908087" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:47.907932" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:47.907468" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:47.907211" elapsed="0.000975"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:47.907026" elapsed="0.001185"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:47.908250" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:11:47.908450" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:47.908496" 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-25T01:11:47.902872" elapsed="0.005646"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:47.909059" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:47.909138" 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-25T01:11:47.908766" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:47.909731" 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-25T01:11:47.909454" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:47.909232" elapsed="0.000637">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:47.909213" elapsed="0.000688">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-25T01:11:47.910079" elapsed="0.000023"/>
</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-25T01:11:47.910259" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:47.910327" elapsed="0.000016"/>
</return>
<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>
<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-25T01:11:47.899953" elapsed="0.010483">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:47.899719" elapsed="0.010787">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:47.899577" elapsed="0.010985">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:47.899178" elapsed="0.011488">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:47.910915" elapsed="0.000028"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:47.871481" elapsed="0.039578">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:49.938655" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:11:49.938982" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:49.937959" elapsed="0.001088"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:49.937481" elapsed="0.001660"/>
</kw>
<msg time="2026-04-25T01:11:49.939189" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:49.928760" elapsed="0.010475"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:49.928336" elapsed="0.010976"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:49.939780" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:49.939514" elapsed="0.000313"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:49.945146" 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-25T01:11:49.944695" elapsed="0.000482"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:49.945647" 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-25T01:11:49.945348" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:49.945722" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:11:49.945881" 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-25T01:11:49.944315" elapsed="0.001591"/>
</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-25T01:11:49.946157" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:49.946848" level="INFO">${ds_type} = operational</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-25T01:11:49.946498" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:49.947319" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:49.947058" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:49.947747" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:49.947502" elapsed="0.000272"/>
</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-25T01:11:49.948201" elapsed="0.000028"/>
</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-25T01:11:49.948475" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:49.948324" elapsed="0.000208"/>
</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-25T01:11:49.948870" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:49.948558" elapsed="0.000371"/>
</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-25T01:11:49.949138" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:49.948954" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:49.948302" elapsed="0.000915"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:49.948026" elapsed="0.001221"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:49.947822" elapsed="0.001460"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:49.949327" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:49.949535" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:49.949583" 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-25T01:11:49.943568" elapsed="0.006039"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:49.950081" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:49.950161" 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-25T01:11:49.949784" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:49.950776" 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-25T01:11:49.950493" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:49.950263" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:49.950240" elapsed="0.000709">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-25T01:11:49.951131" elapsed="0.000023"/>
</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-25T01:11:49.951322" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:49.951392" elapsed="0.000016"/>
</return>
<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>
<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-25T01:11:49.940866" elapsed="0.010634">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:49.940631" elapsed="0.010940">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:49.940489" elapsed="0.011138">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:49.940079" elapsed="0.011638">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:49.951956" elapsed="0.000042"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:49.911956" elapsed="0.040137">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:51.984462" elapsed="0.000371"/>
</kw>
<msg time="2026-04-25T01:11:51.984903" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:51.983715" elapsed="0.001271"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:51.983165" elapsed="0.001907"/>
</kw>
<msg time="2026-04-25T01:11:51.985120" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:51.973291" elapsed="0.011879"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:51.972744" elapsed="0.012520"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:51.985749" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:51.985481" elapsed="0.000314"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:51.991424" 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-25T01:11:51.991015" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:51.991988" 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-25T01:11:51.991646" elapsed="0.000371"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:51.992068" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:11:51.992232" 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-25T01:11:51.990590" elapsed="0.001668"/>
</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-25T01:11:51.992428" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:51.993142" level="INFO">${ds_type} = operational</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-25T01:11:51.992754" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:51.993602" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:51.993352" elapsed="0.000277"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:51.994213" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:51.993935" elapsed="0.000306"/>
</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-25T01:11:51.994644" elapsed="0.000025"/>
</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-25T01:11:51.994907" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:51.994757" elapsed="0.000222"/>
</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-25T01:11:51.995181" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:51.995008" elapsed="0.000231"/>
</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-25T01:11:51.995411" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:51.995264" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:51.994736" elapsed="0.000751"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:51.994473" elapsed="0.001038"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:51.994289" elapsed="0.001248"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:51.995618" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:11:51.995836" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:51.995884" 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-25T01:11:51.989825" elapsed="0.006083"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:51.996410" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:51.996491" 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-25T01:11:51.996100" elapsed="0.000416"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:51.997168" 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-25T01:11:51.996856" elapsed="0.000399">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:51.996630" elapsed="0.000709">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:51.996610" elapsed="0.000764">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-25T01:11:51.997533" elapsed="0.000024"/>
</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-25T01:11:51.997712" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:51.997780" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:51.986880" elapsed="0.011006">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:51.986637" elapsed="0.011340">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:51.986487" elapsed="0.011555">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:51.986055" elapsed="0.012079">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:51.998388" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:51.953060" elapsed="0.045456">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:54.028300" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:11:54.028613" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:54.027621" elapsed="0.001055"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:54.027153" elapsed="0.001603"/>
</kw>
<msg time="2026-04-25T01:11:54.028802" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:54.018506" elapsed="0.010339"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:54.018034" elapsed="0.010885"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:54.029386" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:54.029125" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:54.034625" 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-25T01:11:54.034222" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:54.035119" 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-25T01:11:54.034815" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:54.035191" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:11:54.035350" 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-25T01:11:54.033824" elapsed="0.001551"/>
</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-25T01:11:54.035531" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:54.036198" level="INFO">${ds_type} = operational</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-25T01:11:54.035847" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:54.036620" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:54.036383" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:54.037116" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:54.036858" elapsed="0.000284"/>
</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-25T01:11:54.037542" 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-25T01:11:54.037802" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:54.037653" elapsed="0.000206"/>
</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-25T01:11:54.038041" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:54.037883" elapsed="0.000214"/>
</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-25T01:11:54.038266" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:54.038121" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:54.037633" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:54.037374" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:54.037189" elapsed="0.001203"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:54.038433" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:54.038667" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:54.038714" 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-25T01:11:54.033107" elapsed="0.005631"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:54.039204" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:54.039283" 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-25T01:11:54.038912" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:54.040086" 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-25T01:11:54.039785" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:54.039559" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:54.039359" elapsed="0.000902">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-25T01:11:54.040417" elapsed="0.000022"/>
</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-25T01:11:54.040593" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:54.040660" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:54.030465" elapsed="0.010302">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:54.030229" elapsed="0.010609">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:54.030083" elapsed="0.010811">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:54.029666" elapsed="0.011331">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:54.041238" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:53.999401" elapsed="0.041954">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:56.071514" elapsed="0.000249"/>
</kw>
<msg time="2026-04-25T01:11:56.071831" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:56.070832" elapsed="0.001064"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:56.070336" elapsed="0.001656"/>
</kw>
<msg time="2026-04-25T01:11:56.072126" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:56.061368" elapsed="0.010807"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:56.060762" elapsed="0.011491"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:56.072713" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:56.072448" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:56.078312" 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-25T01:11:56.077872" elapsed="0.000470"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:56.078810" 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-25T01:11:56.078511" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:56.078885" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:11:56.079067" 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-25T01:11:56.077476" elapsed="0.001617"/>
</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-25T01:11:56.079252" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:56.079926" level="INFO">${ds_type} = operational</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-25T01:11:56.079584" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:56.080377" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:56.080132" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:56.080797" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:56.080553" elapsed="0.000270"/>
</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-25T01:11:56.081251" elapsed="0.000025"/>
</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-25T01:11:56.081579" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:56.081375" elapsed="0.000265"/>
</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-25T01:11:56.081810" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:56.081666" elapsed="0.000198"/>
</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-25T01:11:56.082045" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:56.081887" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:56.081345" elapsed="0.000775"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:56.081078" elapsed="0.001065"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:56.080871" elapsed="0.001298"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:56.082208" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:56.082432" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:56.082497" 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-25T01:11:56.076708" elapsed="0.005815"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:56.083028" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:56.083109" 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-25T01:11:56.082720" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:56.083715" 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-25T01:11:56.083429" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:56.083205" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:56.083186" elapsed="0.000706">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-25T01:11:56.084067" elapsed="0.000024"/>
</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-25T01:11:56.084331" elapsed="0.000033"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:56.084419" elapsed="0.000017"/>
</return>
<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>
<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-25T01:11:56.073851" elapsed="0.010683">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:56.073607" elapsed="0.011002">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:56.073435" elapsed="0.011233">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:56.073010" elapsed="0.011754">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:56.085038" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:56.042352" elapsed="0.042810">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:11:58.113855" elapsed="0.000267"/>
</kw>
<msg time="2026-04-25T01:11:58.114193" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:58.113187" elapsed="0.001071"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:58.112679" elapsed="0.001663"/>
</kw>
<msg time="2026-04-25T01:11:58.114389" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:11:58.103935" elapsed="0.010500"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:11:58.103505" elapsed="0.011005"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:11:58.114992" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:11:58.114715" elapsed="0.000325"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:11:58.120308" 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-25T01:11:58.119893" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:58.120996" 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-25T01:11:58.120528" elapsed="0.000496"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:11:58.121075" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:11:58.121239" 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-25T01:11:58.119506" elapsed="0.001758"/>
</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-25T01:11:58.121425" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:11:58.122103" level="INFO">${ds_type} = operational</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-25T01:11:58.121748" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:58.122533" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:58.122291" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:11:58.122949" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:11:58.122708" elapsed="0.000282"/>
</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-25T01:11:58.123391" elapsed="0.000025"/>
</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-25T01:11:58.123735" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:58.123503" elapsed="0.000292"/>
</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-25T01:11:58.123982" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:58.123821" elapsed="0.000218"/>
</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-25T01:11:58.124208" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:11:58.124063" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:11:58.123482" elapsed="0.000802"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:11:58.123222" elapsed="0.001086"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:58.123038" elapsed="0.001297"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:11:58.124375" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:11:58.124593" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:11:58.124640" 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-25T01:11:58.118761" elapsed="0.005903"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:11:58.125136" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:11:58.125216" 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-25T01:11:58.124841" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:11:58.126058" 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-25T01:11:58.125741" elapsed="0.000393">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:11:58.125509" elapsed="0.000694">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:11:58.125293" elapsed="0.000942">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-25T01:11:58.126392" elapsed="0.000022"/>
</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-25T01:11:58.126570" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:11:58.126637" elapsed="0.000015"/>
</return>
<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>
<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-25T01:11:58.116092" elapsed="0.010653">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:11:58.115824" elapsed="0.010990">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:11:58.115679" elapsed="0.011190">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:11:58.115274" elapsed="0.011684">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:11:58.127216" elapsed="0.000031"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:11:58.086093" elapsed="0.041257">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:00.156850" elapsed="0.000259"/>
</kw>
<msg time="2026-04-25T01:12:00.157175" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:00.156167" elapsed="0.001071"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:00.155640" elapsed="0.001679"/>
</kw>
<msg time="2026-04-25T01:12:00.157368" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:00.146692" elapsed="0.010721"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:00.146221" elapsed="0.011268"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:00.158063" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:00.157692" elapsed="0.000419"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:00.163608" 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-25T01:12:00.163134" elapsed="0.000502"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:00.164112" 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-25T01:12:00.163802" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:00.164187" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:12:00.164348" 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-25T01:12:00.162738" elapsed="0.001634"/>
</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-25T01:12:00.164534" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:00.165210" level="INFO">${ds_type} = operational</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-25T01:12:00.164855" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:00.165653" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:00.165398" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:00.166086" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:00.165831" elapsed="0.000281"/>
</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-25T01:12:00.166522" elapsed="0.000025"/>
</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-25T01:12:00.166792" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:00.166635" elapsed="0.000214"/>
</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-25T01:12:00.167036" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:00.166875" elapsed="0.000219"/>
</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-25T01:12:00.167263" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:00.167117" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:00.166615" elapsed="0.000723"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:00.166345" elapsed="0.001017"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:00.166160" elapsed="0.001294"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:00.167499" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:12:00.167712" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:00.167760" 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-25T01:12:00.162012" elapsed="0.005772"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:00.168269" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:00.168350" 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-25T01:12:00.167980" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:00.168975" 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-25T01:12:00.168675" elapsed="0.000381">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:00.168448" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:00.168429" elapsed="0.000729">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-25T01:12:00.169315" elapsed="0.000023"/>
</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-25T01:12:00.169497" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:00.169566" elapsed="0.000017"/>
</return>
<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>
<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-25T01:12:00.159160" elapsed="0.010516">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:00.158905" elapsed="0.010912">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:00.158762" elapsed="0.011115">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:00.158353" elapsed="0.011630">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:00.170233" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:00.128270" elapsed="0.042082">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:02.201947" elapsed="0.000367"/>
</kw>
<msg time="2026-04-25T01:12:02.202458" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:02.200950" elapsed="0.001601"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:02.200228" elapsed="0.002443"/>
</kw>
<msg time="2026-04-25T01:12:02.202743" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:02.189501" elapsed="0.013309"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:02.189067" elapsed="0.013857"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:02.203582" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:02.203231" elapsed="0.000398"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:02.208906" 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-25T01:12:02.208508" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:02.209413" 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-25T01:12:02.209116" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:02.209489" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:12:02.209655" 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-25T01:12:02.208124" elapsed="0.001556"/>
</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-25T01:12:02.209837" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:02.210550" level="INFO">${ds_type} = operational</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-25T01:12:02.210177" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:02.211001" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:02.210738" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:02.211423" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:02.211182" elapsed="0.000267"/>
</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-25T01:12:02.211855" elapsed="0.000025"/>
</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-25T01:12:02.212140" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:02.211986" 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-25T01:12:02.212368" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:02.212225" elapsed="0.000205"/>
</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-25T01:12:02.212613" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:02.212459" elapsed="0.000284"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:02.211950" elapsed="0.000818"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:02.211683" elapsed="0.001111"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:02.211498" elapsed="0.001324"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:02.212865" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:12:02.213092" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:02.213140" 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-25T01:12:02.207382" elapsed="0.005782"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:02.213819" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:02.213900" 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-25T01:12:02.213344" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:02.214638" 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-25T01:12:02.214240" elapsed="0.000476">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:02.214017" elapsed="0.000770">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:02.213996" elapsed="0.000824">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-25T01:12:02.214997" elapsed="0.000024"/>
</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-25T01:12:02.215178" elapsed="0.000032"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:02.215256" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:02.204690" elapsed="0.010675">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:02.204435" elapsed="0.011000">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:02.204288" elapsed="0.011201">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:02.203866" elapsed="0.011710">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:02.215824" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:02.171262" elapsed="0.044681">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:04.247993" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:12:04.248309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:04.247290" elapsed="0.001086"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:04.246748" elapsed="0.001708"/>
</kw>
<msg time="2026-04-25T01:12:04.248503" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:04.235808" elapsed="0.012739"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:04.235125" elapsed="0.013498"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:04.249105" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:04.248828" elapsed="0.000324"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:04.255070" 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-25T01:12:04.254584" elapsed="0.000518"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:04.255679" 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-25T01:12:04.255373" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:04.255756" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:12:04.255930" 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-25T01:12:04.253827" elapsed="0.002128"/>
</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-25T01:12:04.256134" elapsed="0.000171"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:04.256805" level="INFO">${ds_type} = operational</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-25T01:12:04.256469" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:04.257253" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:04.257009" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:04.257708" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:04.257465" elapsed="0.000269"/>
</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-25T01:12:04.258209" elapsed="0.000025"/>
</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-25T01:12:04.258480" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:04.258326" elapsed="0.000214"/>
</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-25T01:12:04.258710" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:04.258567" elapsed="0.000197"/>
</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-25T01:12:04.258932" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:04.258788" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:04.258304" elapsed="0.000718"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:04.258010" elapsed="0.001038"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:04.257786" elapsed="0.001289"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:04.259116" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:04.259321" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:04.259367" 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-25T01:12:04.253065" elapsed="0.006326"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:04.259857" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:04.259935" 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-25T01:12:04.259568" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:04.260639" 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-25T01:12:04.260344" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:04.260062" elapsed="0.000721">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:04.260030" elapsed="0.000785">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-25T01:12:04.260987" elapsed="0.000023"/>
</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-25T01:12:04.261165" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:04.261230" elapsed="0.000017"/>
</return>
<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>
<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-25T01:12:04.250211" elapsed="0.011143">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:04.249958" elapsed="0.011468">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:04.249812" elapsed="0.011670">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:04.249409" elapsed="0.012164">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:04.261819" elapsed="0.000072"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:04.216778" elapsed="0.045228">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:06.291567" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:12:06.291876" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:06.290860" elapsed="0.001079"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:06.290338" elapsed="0.001701"/>
</kw>
<msg time="2026-04-25T01:12:06.292087" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:06.281586" elapsed="0.010547"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:06.281105" elapsed="0.011105"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:06.292714" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:06.292453" elapsed="0.000306"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:06.298073" 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-25T01:12:06.297643" elapsed="0.000459"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:06.298562" 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-25T01:12:06.298267" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:06.298636" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:12:06.298803" 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-25T01:12:06.297257" elapsed="0.001570"/>
</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-25T01:12:06.299000" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:06.299661" level="INFO">${ds_type} = operational</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-25T01:12:06.299325" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:06.300102" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:06.299847" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:06.300531" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:06.300277" elapsed="0.000280"/>
</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-25T01:12:06.300990" elapsed="0.000026"/>
</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-25T01:12:06.301255" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:06.301105" elapsed="0.000205"/>
</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-25T01:12:06.301478" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:06.301336" elapsed="0.000196"/>
</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-25T01:12:06.301698" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:06.301555" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:06.301084" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:06.300797" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:06.300605" elapsed="0.001217"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:06.301861" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:12:06.302081" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:06.302127" 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-25T01:12:06.296477" elapsed="0.005673"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:06.302913" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:06.303010" 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-25T01:12:06.302406" elapsed="0.000629"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:06.303618" 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-25T01:12:06.303332" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:06.303108" elapsed="0.000654">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:06.303088" elapsed="0.000706">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-25T01:12:06.303952" elapsed="0.000039"/>
</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-25T01:12:06.304150" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:06.304218" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:06.293808" elapsed="0.010558">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:06.293568" elapsed="0.010872">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:06.293424" elapsed="0.011072">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:06.293016" elapsed="0.011569">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:06.304834" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:06.262860" elapsed="0.042094">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:08.333491" elapsed="0.000341"/>
</kw>
<msg time="2026-04-25T01:12:08.333918" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:08.332492" elapsed="0.001533"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:08.331926" elapsed="0.002216"/>
</kw>
<msg time="2026-04-25T01:12:08.334209" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:08.323251" elapsed="0.011020"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:08.322773" elapsed="0.011606"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:08.335044" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:08.334652" elapsed="0.000459"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:08.340921" 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-25T01:12:08.340516" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:08.341427" 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-25T01:12:08.341135" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:08.341500" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:12:08.341663" 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-25T01:12:08.340129" elapsed="0.001559"/>
</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-25T01:12:08.341926" elapsed="0.000184"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:08.342625" level="INFO">${ds_type} = operational</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-25T01:12:08.342277" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:08.343080" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:08.342817" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:08.343538" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:08.343260" elapsed="0.000304"/>
</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-25T01:12:08.343990" elapsed="0.000026"/>
</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-25T01:12:08.344255" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:08.344105" elapsed="0.000206"/>
</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-25T01:12:08.344477" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:08.344336" elapsed="0.000195"/>
</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-25T01:12:08.344696" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:08.344554" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:08.344085" elapsed="0.000685"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:08.343803" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:08.343613" elapsed="0.001207"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:08.344859" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:08.345079" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:08.345126" 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-25T01:12:08.339331" elapsed="0.005818"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:08.345601" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:08.345677" 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-25T01:12:08.345325" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:08.346287" 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-25T01:12:08.346005" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:08.345771" elapsed="0.000656">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:08.345752" elapsed="0.000707">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-25T01:12:08.346613" elapsed="0.000022"/>
</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-25T01:12:08.346789" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:08.346855" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:08.336349" elapsed="0.010628">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:08.336111" elapsed="0.010939">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:08.335949" elapsed="0.011158">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:08.335543" elapsed="0.011654">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:08.347451" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:08.305909" elapsed="0.041664">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:10.378779" elapsed="0.000399"/>
</kw>
<msg time="2026-04-25T01:12:10.379261" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:10.377915" elapsed="0.001424"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:10.377332" elapsed="0.002105"/>
</kw>
<msg time="2026-04-25T01:12:10.379496" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:10.365742" elapsed="0.013810"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:10.365215" elapsed="0.014430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:10.380227" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:10.379890" elapsed="0.000392"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:10.386897" 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-25T01:12:10.386418" elapsed="0.000512"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:10.387515" 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-25T01:12:10.387156" elapsed="0.000392"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:10.387607" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:12:10.387799" 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-25T01:12:10.385916" elapsed="0.001913"/>
</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-25T01:12:10.388045" elapsed="0.000191"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:10.388852" level="INFO">${ds_type} = operational</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-25T01:12:10.388442" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:10.389401" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:10.389106" elapsed="0.000326"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:10.389916" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:10.389624" elapsed="0.000323"/>
</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-25T01:12:10.390471" elapsed="0.000032"/>
</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-25T01:12:10.390799" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:10.390610" elapsed="0.000258"/>
</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-25T01:12:10.391098" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:10.390899" elapsed="0.000267"/>
</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-25T01:12:10.391380" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:10.391195" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:10.390584" elapsed="0.000888"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:10.390259" elapsed="0.001246"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:10.390022" elapsed="0.001515"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:10.391587" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:12:10.391832" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:10.391889" 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-25T01:12:10.385013" elapsed="0.006905"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:10.392490" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:10.392587" 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-25T01:12:10.392157" elapsed="0.000460"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:10.393623" 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-25T01:12:10.393273" elapsed="0.000436">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:10.392985" elapsed="0.000806">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:10.392723" elapsed="0.001108">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-25T01:12:10.394050" elapsed="0.000028"/>
</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-25T01:12:10.394313" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:10.394401" elapsed="0.000019"/>
</return>
<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>
<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-25T01:12:10.381550" elapsed="0.012987">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:10.381255" elapsed="0.013371">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:10.381084" elapsed="0.013611">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:10.380582" elapsed="0.014229">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:10.395132" elapsed="0.000032"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:10.348264" elapsed="0.047017">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:12.424649" elapsed="0.000234"/>
</kw>
<msg time="2026-04-25T01:12:12.424946" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:12.423982" elapsed="0.001045"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:12.423503" elapsed="0.001605"/>
</kw>
<msg time="2026-04-25T01:12:12.425155" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:12.414890" elapsed="0.010311"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:12.414461" elapsed="0.010828"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:12.425753" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:12.425494" elapsed="0.000304"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:12.431253" 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-25T01:12:12.430832" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:12.431741" 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-25T01:12:12.431446" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:12.431815" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:12:12.431991" 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-25T01:12:12.430444" elapsed="0.001574"/>
</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-25T01:12:12.432177" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:12.432841" level="INFO">${ds_type} = operational</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-25T01:12:12.432501" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:12.433318" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:12.433043" elapsed="0.000301"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:12.433825" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:12.433578" elapsed="0.000273"/>
</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-25T01:12:12.434270" elapsed="0.000025"/>
</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-25T01:12:12.434532" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:12.434383" elapsed="0.000205"/>
</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-25T01:12:12.434757" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:12.434614" elapsed="0.000196"/>
</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-25T01:12:12.434990" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:12.434833" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:12.434363" elapsed="0.000704"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:12.434100" elapsed="0.000992"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:12.433899" elapsed="0.001219"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:12.435159" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:12.435363" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:12.435410" 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-25T01:12:12.429704" elapsed="0.005730"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:12.435887" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:12.435979" 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-25T01:12:12.435611" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:12.436576" 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-25T01:12:12.436295" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:12.436075" elapsed="0.000641">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:12.436057" elapsed="0.000691">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-25T01:12:12.436903" 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-25T01:12:12.437094" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:12.437162" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:12.426835" elapsed="0.010445">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:12.426597" elapsed="0.010754">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:12.426450" elapsed="0.010956">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:12.426049" elapsed="0.011445">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:12.437738" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:12.396229" elapsed="0.041628">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:14.466977" elapsed="0.000237"/>
</kw>
<msg time="2026-04-25T01:12:14.467279" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:14.466303" elapsed="0.001037"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:14.465820" elapsed="0.001599"/>
</kw>
<msg time="2026-04-25T01:12:14.467544" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:14.457181" elapsed="0.010411"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:14.456747" elapsed="0.010923"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:14.468142" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:14.467863" elapsed="0.000351"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:14.473405" 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-25T01:12:14.473016" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:14.473892" 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-25T01:12:14.473601" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:14.473980" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:12:14.474142" 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-25T01:12:14.472626" elapsed="0.001541"/>
</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-25T01:12:14.474325" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:14.474994" level="INFO">${ds_type} = operational</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-25T01:12:14.474643" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:14.475437" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:14.475194" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:14.475854" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:14.475613" elapsed="0.000267"/>
</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-25T01:12:14.476323" elapsed="0.000025"/>
</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-25T01:12:14.476582" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:14.476432" elapsed="0.000206"/>
</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-25T01:12:14.476806" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:14.476663" elapsed="0.000198"/>
</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-25T01:12:14.477043" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:14.476885" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:14.476413" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:14.476130" elapsed="0.001014"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:14.475926" elapsed="0.001244"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:14.477209" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:14.477412" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:14.477459" 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-25T01:12:14.471872" elapsed="0.005612"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:14.477941" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:14.478037" 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-25T01:12:14.477659" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:14.478829" 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-25T01:12:14.478546" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:14.478318" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:14.478116" elapsed="0.000904">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-25T01:12:14.479177" elapsed="0.000022"/>
</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-25T01:12:14.479393" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:14.479461" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:14.469247" elapsed="0.010321">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:14.469014" elapsed="0.010632">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:14.468857" elapsed="0.010845">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:14.468451" elapsed="0.011342">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:14.480049" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:14.438724" elapsed="0.041445">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:16.509419" elapsed="0.000295"/>
</kw>
<msg time="2026-04-25T01:12:16.509795" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:16.508577" elapsed="0.001297"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:16.507990" elapsed="0.002001"/>
</kw>
<msg time="2026-04-25T01:12:16.510051" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:16.496361" elapsed="0.013744"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:16.495790" elapsed="0.014407"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:16.510763" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:16.510446" elapsed="0.000374"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:16.517801" 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-25T01:12:16.517327" elapsed="0.000506"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:16.518416" 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-25T01:12:16.518058" elapsed="0.000389"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:16.518506" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:12:16.518699" 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-25T01:12:16.516757" elapsed="0.001972"/>
</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-25T01:12:16.518927" elapsed="0.000214"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:16.519809" level="INFO">${ds_type} = operational</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-25T01:12:16.519399" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:16.520362" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:16.520063" elapsed="0.000331"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:16.520880" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:16.520587" elapsed="0.000324"/>
</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-25T01:12:16.521424" elapsed="0.000030"/>
</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-25T01:12:16.521838" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:16.521558" elapsed="0.000350"/>
</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-25T01:12:16.522145" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:16.521940" elapsed="0.000272"/>
</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-25T01:12:16.522428" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:16.522241" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:16.521534" elapsed="0.000988"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:16.521212" elapsed="0.001340"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:16.520984" elapsed="0.001600"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:16.522634" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:12:16.522878" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:16.522933" 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-25T01:12:16.515840" elapsed="0.007136"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:16.523565" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:16.523659" 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-25T01:12:16.523225" elapsed="0.000462"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:16.524411" 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-25T01:12:16.524067" elapsed="0.000433">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:16.523773" elapsed="0.000811">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:16.523750" elapsed="0.000872">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-25T01:12:16.524817" elapsed="0.000027"/>
</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-25T01:12:16.525067" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:16.525149" elapsed="0.000019"/>
</return>
<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>
<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-25T01:12:16.512143" elapsed="0.013139">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:16.511821" elapsed="0.013549">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:16.511651" elapsed="0.013789">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:16.511137" elapsed="0.014414">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:16.525848" elapsed="0.000030"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:16.480898" elapsed="0.045287">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:18.558539" elapsed="0.000254"/>
</kw>
<msg time="2026-04-25T01:12:18.558866" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:18.557685" elapsed="0.001247"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:18.556904" elapsed="0.002133"/>
</kw>
<msg time="2026-04-25T01:12:18.559099" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:18.545787" elapsed="0.013381"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:18.545232" elapsed="0.014055"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:18.560136" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:18.559597" elapsed="0.000610"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:18.567337" 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-25T01:12:18.566865" elapsed="0.000504"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:18.567921" 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-25T01:12:18.567591" elapsed="0.000358"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:18.568020" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:12:18.568198" 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-25T01:12:18.566297" elapsed="0.001927"/>
</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-25T01:12:18.568443" elapsed="0.000245"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:18.569502" level="INFO">${ds_type} = operational</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-25T01:12:18.568938" elapsed="0.000604"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:18.570109" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:18.569790" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:18.570591" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:18.570317" elapsed="0.000305"/>
</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-25T01:12:18.571217" elapsed="0.000030"/>
</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-25T01:12:18.571556" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:18.571346" elapsed="0.000297"/>
</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-25T01:12:18.571914" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:18.571685" elapsed="0.000338"/>
</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-25T01:12:18.572295" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:18.572063" elapsed="0.000316"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:18.571324" elapsed="0.001095"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:18.570935" elapsed="0.001525"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:18.570677" elapsed="0.001827"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:18.572571" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:12:18.572886" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:18.572956" 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-25T01:12:18.565146" elapsed="0.007869"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:18.573806" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:18.573910" 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-25T01:12:18.573218" elapsed="0.000727"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:18.574765" 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-25T01:12:18.574410" elapsed="0.000465">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:18.574070" elapsed="0.001074">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:18.574041" elapsed="0.001157">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-25T01:12:18.575442" elapsed="0.000036"/>
</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-25T01:12:18.575722" elapsed="0.000034"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:18.575830" elapsed="0.000026"/>
</return>
<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>
<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-25T01:12:18.561499" elapsed="0.014524">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:18.561219" elapsed="0.014999">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:18.561067" elapsed="0.015242">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:18.560580" elapsed="0.015858">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:18.576711" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:18.527054" elapsed="0.049780">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:20.607604" elapsed="0.000255"/>
</kw>
<msg time="2026-04-25T01:12:20.607927" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:20.606867" elapsed="0.001143"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:20.606193" elapsed="0.001903"/>
</kw>
<msg time="2026-04-25T01:12:20.608144" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:20.596022" elapsed="0.012173"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:20.595342" elapsed="0.012951"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:20.608767" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:20.608496" elapsed="0.000317"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:20.614833" 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-25T01:12:20.614424" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:20.615499" 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-25T01:12:20.615078" elapsed="0.000458"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:20.615604" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T01:12:20.615805" 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-25T01:12:20.614008" elapsed="0.001833"/>
</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-25T01:12:20.616086" elapsed="0.000214"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:20.616841" level="INFO">${ds_type} = operational</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-25T01:12:20.616489" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:20.617486" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:20.617221" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:20.617910" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:20.617666" elapsed="0.000271"/>
</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-25T01:12:20.618499" elapsed="0.000037"/>
</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-25T01:12:20.618822" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:20.618657" elapsed="0.000224"/>
</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-25T01:12:20.619069" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:20.618907" elapsed="0.000220"/>
</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-25T01:12:20.619303" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:20.619151" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:20.618629" elapsed="0.000816"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:20.618251" elapsed="0.001219"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:20.618006" elapsed="0.001491"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:20.619550" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:12:20.619797" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:20.619846" 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-25T01:12:20.613241" elapsed="0.006630"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:20.620398" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:20.620481" 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-25T01:12:20.620072" elapsed="0.000434"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:20.621170" 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-25T01:12:20.620804" elapsed="0.000474">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:20.620579" elapsed="0.000798">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:20.620559" elapsed="0.000868">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-25T01:12:20.621658" elapsed="0.000035"/>
</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-25T01:12:20.621887" elapsed="0.000031"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:20.622003" elapsed="0.000024"/>
</return>
<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>
<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-25T01:12:20.610095" elapsed="0.012063">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:20.609829" elapsed="0.012438">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:20.609677" elapsed="0.012656">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:20.609142" elapsed="0.013283">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:20.622709" elapsed="0.000028"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:20.577617" elapsed="0.045217">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:22.652288" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:12:22.652600" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:22.651579" elapsed="0.001086"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:22.651109" elapsed="0.001637"/>
</kw>
<msg time="2026-04-25T01:12:22.652793" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:22.642405" elapsed="0.010432"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:22.641943" elapsed="0.010968"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:22.653390" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:22.653133" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:22.658676" 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-25T01:12:22.658283" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:22.659270" 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-25T01:12:22.658960" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:22.659345" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:12:22.659506" 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-25T01:12:22.657889" elapsed="0.001641"/>
</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-25T01:12:22.659687" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:22.660380" level="INFO">${ds_type} = operational</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-25T01:12:22.660022" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:22.660810" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:22.660567" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:22.661236" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:22.660999" elapsed="0.000262"/>
</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-25T01:12:22.661656" 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-25T01:12:22.661920" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:22.661769" elapsed="0.000220"/>
</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-25T01:12:22.662158" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:22.662015" elapsed="0.000197"/>
</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-25T01:12:22.662376" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:22.662235" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:22.661748" elapsed="0.000701"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:22.661488" elapsed="0.000986"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:22.661307" elapsed="0.001193"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:22.662539" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:12:22.662741" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:22.662786" 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-25T01:12:22.657168" elapsed="0.005642"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:22.663457" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:22.663536" 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-25T01:12:22.662996" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:22.664176" 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-25T01:12:22.663850" elapsed="0.000410">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:22.663631" elapsed="0.000697">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:22.663612" elapsed="0.000748">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-25T01:12:22.664515" 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-25T01:12:22.664691" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:22.664757" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:22.654474" elapsed="0.010388">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:22.654238" elapsed="0.010693">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:22.654098" elapsed="0.010905">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:22.653682" elapsed="0.011411">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:22.665329" elapsed="0.000060"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:22.623714" elapsed="0.041771">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:24.697659" elapsed="0.000287"/>
</kw>
<msg time="2026-04-25T01:12:24.698033" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:24.696866" elapsed="0.001236"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:24.696377" elapsed="0.001814"/>
</kw>
<msg time="2026-04-25T01:12:24.698243" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:24.687325" elapsed="0.010975"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:24.685859" elapsed="0.012546"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:24.698941" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:24.698645" elapsed="0.000375"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:24.704844" 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-25T01:12:24.704437" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:24.705358" 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-25T01:12:24.705053" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:24.705432" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:12:24.705596" 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-25T01:12:24.704051" elapsed="0.001571"/>
</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-25T01:12:24.705781" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:24.706481" level="INFO">${ds_type} = operational</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-25T01:12:24.706125" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:24.707047" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:24.706667" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:24.707471" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:24.707226" elapsed="0.000270"/>
</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-25T01:12:24.707912" elapsed="0.000025"/>
</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-25T01:12:24.708195" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:24.708044" elapsed="0.000207"/>
</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-25T01:12:24.708418" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:24.708275" elapsed="0.000196"/>
</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-25T01:12:24.708635" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:24.708494" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:24.708023" elapsed="0.000686"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:24.707733" elapsed="0.000999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:24.707544" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:24.708798" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:12:24.709019" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:24.709065" 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-25T01:12:24.703300" elapsed="0.005789"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:24.709612" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:24.709691" 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-25T01:12:24.709331" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:24.710311" 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-25T01:12:24.710024" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:24.709786" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:24.709766" elapsed="0.000719">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-25T01:12:24.710641" elapsed="0.000023"/>
</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-25T01:12:24.710817" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:24.710882" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:24.700310" elapsed="0.010750">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:24.700065" elapsed="0.011066">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:24.699898" elapsed="0.011289">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:24.699443" elapsed="0.011834">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:24.711527" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:24.666389" elapsed="0.045335">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:26.740293" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:12:26.740599" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:26.739619" elapsed="0.001041"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:26.739133" elapsed="0.001607"/>
</kw>
<msg time="2026-04-25T01:12:26.740786" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:26.730413" elapsed="0.010417"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:26.729978" elapsed="0.010927"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:26.741410" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:26.741142" elapsed="0.000314"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:26.746755" 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-25T01:12:26.746340" elapsed="0.000444"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:26.747273" 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-25T01:12:26.746953" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:26.747351" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:12:26.747518" 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-25T01:12:26.745933" elapsed="0.001612"/>
</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-25T01:12:26.747785" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:26.748492" level="INFO">${ds_type} = operational</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-25T01:12:26.748141" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:26.748945" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:26.748692" elapsed="0.000296"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:26.749410" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:26.749157" elapsed="0.000282"/>
</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-25T01:12:26.749859" elapsed="0.000025"/>
</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-25T01:12:26.750140" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:26.749988" elapsed="0.000210"/>
</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-25T01:12:26.750366" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:26.750223" elapsed="0.000201"/>
</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-25T01:12:26.750594" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:26.750449" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:26.749952" elapsed="0.000718"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:26.749684" elapsed="0.001010"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:26.749489" elapsed="0.001233"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:26.750763" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:26.750982" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:26.751032" 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-25T01:12:26.745184" elapsed="0.005873"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:26.751514" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:26.751595" 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-25T01:12:26.751233" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:26.752417" 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-25T01:12:26.752130" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:26.751879" elapsed="0.000684">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:26.751676" elapsed="0.000919">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-25T01:12:26.752759" elapsed="0.000024"/>
</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-25T01:12:26.752940" elapsed="0.000041"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:26.753038" elapsed="0.000018"/>
</return>
<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>
<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-25T01:12:26.742494" elapsed="0.010656">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:26.742256" elapsed="0.010966">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:26.742109" elapsed="0.011170">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:26.741690" elapsed="0.011679">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:26.753613" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:26.712636" elapsed="0.041098">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:28.783741" elapsed="0.000364"/>
</kw>
<msg time="2026-04-25T01:12:28.784196" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:28.783079" elapsed="0.001183"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:28.782568" elapsed="0.001775"/>
</kw>
<msg time="2026-04-25T01:12:28.784389" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:28.773798" elapsed="0.010635"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:28.773371" elapsed="0.011135"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:28.784976" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:28.784700" elapsed="0.000324"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:28.790631" 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-25T01:12:28.790218" elapsed="0.000444"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:28.791142" 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-25T01:12:28.790832" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:28.791217" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:12:28.791377" 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-25T01:12:28.789820" elapsed="0.001581"/>
</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-25T01:12:28.791559" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:28.792251" level="INFO">${ds_type} = operational</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-25T01:12:28.791875" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:28.792679" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:28.792439" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:28.793113" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:28.792854" elapsed="0.000285"/>
</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-25T01:12:28.793555" elapsed="0.000025"/>
</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-25T01:12:28.793826" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:28.793667" elapsed="0.000214"/>
</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-25T01:12:28.794064" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:28.793905" elapsed="0.000215"/>
</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-25T01:12:28.794288" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:28.794144" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:28.793647" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:28.793378" elapsed="0.001008"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:28.793185" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:28.794453" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:12:28.794662" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:28.794709" 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-25T01:12:28.789068" elapsed="0.005665"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:28.795205" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:28.795284" 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-25T01:12:28.794909" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:28.795956" 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-25T01:12:28.795662" elapsed="0.000405">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:28.795439" elapsed="0.000701">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:28.795419" elapsed="0.000754">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-25T01:12:28.796341" elapsed="0.000023"/>
</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-25T01:12:28.796526" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:28.796595" elapsed="0.000017"/>
</return>
<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>
<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-25T01:12:28.786076" elapsed="0.010631">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:28.785797" elapsed="0.010986">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:28.785656" elapsed="0.011202">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:28.785260" elapsed="0.011731">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:28.797238" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:28.755037" elapsed="0.042320">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:30.827103" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:12:30.827416" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:30.826406" elapsed="0.001072"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:30.825920" elapsed="0.001640"/>
</kw>
<msg time="2026-04-25T01:12:30.827608" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:30.817255" elapsed="0.010398"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:30.816807" elapsed="0.010922"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:30.828208" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:30.827928" elapsed="0.000326"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:30.834570" 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-25T01:12:30.834173" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:30.835082" 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-25T01:12:30.834760" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:30.835156" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:12:30.835316" 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-25T01:12:30.833750" elapsed="0.001592"/>
</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-25T01:12:30.835499" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:30.836179" level="INFO">${ds_type} = operational</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-25T01:12:30.835824" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:30.836607" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:30.836366" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:30.837115" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:30.836854" elapsed="0.000288"/>
</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-25T01:12:30.837547" elapsed="0.000025"/>
</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-25T01:12:30.837811" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:30.837660" elapsed="0.000208"/>
</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-25T01:12:30.838051" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:30.837892" elapsed="0.000215"/>
</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-25T01:12:30.838275" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:30.838131" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:30.837640" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:30.837375" elapsed="0.001000"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:30.837188" elapsed="0.001212"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:30.838441" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:30.838644" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:30.838694" 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-25T01:12:30.832807" elapsed="0.005912"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:30.839216" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:30.839296" 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-25T01:12:30.838894" elapsed="0.000426"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:30.840104" 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-25T01:12:30.839804" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:30.839573" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:30.839372" elapsed="0.000907">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-25T01:12:30.840435" elapsed="0.000022"/>
</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-25T01:12:30.840622" elapsed="0.000032"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:30.840707" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:30.829295" elapsed="0.011523">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:30.829060" elapsed="0.011827">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:30.828901" elapsed="0.012055">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:30.828488" elapsed="0.012582">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:30.841315" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:30.798314" elapsed="0.043120">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:32.871468" elapsed="0.000260"/>
</kw>
<msg time="2026-04-25T01:12:32.871801" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:32.870766" elapsed="0.001100"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:32.870263" elapsed="0.001684"/>
</kw>
<msg time="2026-04-25T01:12:32.872108" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:32.861475" elapsed="0.010682"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:32.860788" elapsed="0.011447"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:32.872714" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:32.872446" elapsed="0.000314"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:32.878600" 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-25T01:12:32.878181" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:32.879117" 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-25T01:12:32.878795" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:32.879195" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:12:32.879365" 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-25T01:12:32.877766" elapsed="0.001624"/>
</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-25T01:12:32.879557" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:32.880250" level="INFO">${ds_type} = operational</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-25T01:12:32.879889" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:32.880681" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:32.880439" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:32.881167" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:32.880891" elapsed="0.000302"/>
</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-25T01:12:32.881622" elapsed="0.000026"/>
</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-25T01:12:32.881893" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:32.881740" elapsed="0.000209"/>
</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-25T01:12:32.882133" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:32.881989" elapsed="0.000198"/>
</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-25T01:12:32.882352" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:32.882210" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:32.881718" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:32.881441" elapsed="0.001010"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:32.881243" elapsed="0.001235"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:32.882520" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:32.882724" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:32.882771" 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-25T01:12:32.876740" elapsed="0.006054"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:32.883270" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:32.883348" 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-25T01:12:32.882983" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:32.883953" 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-25T01:12:32.883666" elapsed="0.000381">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:32.883444" elapsed="0.000675">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:32.883425" elapsed="0.000726">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-25T01:12:32.884308" elapsed="0.000022"/>
</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-25T01:12:32.884566" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:32.884635" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:32.873871" elapsed="0.010903">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:32.873624" elapsed="0.011223">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:32.873476" elapsed="0.011437">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:32.873060" elapsed="0.011963">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:32.885272" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:32.842357" elapsed="0.043034">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:34.912378" elapsed="0.000250"/>
</kw>
<msg time="2026-04-25T01:12:34.912697" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:34.911644" elapsed="0.001137"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:34.911150" elapsed="0.001718"/>
</kw>
<msg time="2026-04-25T01:12:34.912916" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:34.902456" elapsed="0.010523"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:34.901960" elapsed="0.011099"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:34.913560" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:34.913294" elapsed="0.000312"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:34.919261" 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-25T01:12:34.918836" elapsed="0.000453"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:34.919749" 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-25T01:12:34.919455" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:34.919823" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:12:34.920001" 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-25T01:12:34.918450" elapsed="0.001577"/>
</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-25T01:12:34.920184" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:34.920879" level="INFO">${ds_type} = operational</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-25T01:12:34.920508" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:34.921327" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:34.921083" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:34.921740" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:34.921502" 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-25T01:12:34.922193" elapsed="0.000025"/>
</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-25T01:12:34.922540" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:34.922308" elapsed="0.000290"/>
</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-25T01:12:34.922768" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:34.922624" elapsed="0.000198"/>
</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-25T01:12:34.923003" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:34.922845" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:34.922287" elapsed="0.000793"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:34.922017" elapsed="0.001088"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:34.921812" elapsed="0.001322"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:34.923176" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:12:34.923383" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:34.923428" 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-25T01:12:34.917702" elapsed="0.005750"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:34.924161" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:34.924241" 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-25T01:12:34.923627" elapsed="0.000638"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:34.924875" 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-25T01:12:34.924561" elapsed="0.000392">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:34.924338" elapsed="0.000712">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:34.924319" elapsed="0.000763">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-25T01:12:34.925242" elapsed="0.000022"/>
</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-25T01:12:34.925419" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:34.925486" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:34.914659" elapsed="0.010935">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:34.914417" elapsed="0.011246">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:34.914269" elapsed="0.011453">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:34.913850" elapsed="0.011961">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:34.926082" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:34.886319" elapsed="0.039885">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:36.952419" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:12:36.952734" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:36.951749" elapsed="0.001048"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:36.951286" elapsed="0.001590"/>
</kw>
<msg time="2026-04-25T01:12:36.952923" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:36.942640" elapsed="0.010341"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:36.942205" elapsed="0.010852"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:36.953598" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:36.953253" elapsed="0.000390"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:36.959068" 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-25T01:12:36.958665" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:36.959544" 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-25T01:12:36.959258" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:36.959619" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:12:36.959783" 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-25T01:12:36.958247" elapsed="0.001561"/>
</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-25T01:12:36.959979" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:36.960634" level="INFO">${ds_type} = operational</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-25T01:12:36.960297" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:36.961080" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:36.960820" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:36.961494" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:36.961256" elapsed="0.000265"/>
</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-25T01:12:36.961915" elapsed="0.000025"/>
</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-25T01:12:36.962191" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:36.962042" elapsed="0.000204"/>
</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-25T01:12:36.962421" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:36.962270" elapsed="0.000212"/>
</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-25T01:12:36.962655" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:36.962511" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:36.962021" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:36.961747" elapsed="0.001005"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:36.961566" elapsed="0.001211"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:36.962816" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:12:36.963034" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:36.963080" 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-25T01:12:36.957512" elapsed="0.005592"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:36.963551" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:36.963628" 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-25T01:12:36.963278" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:36.964234" 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-25T01:12:36.963938" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:36.963722" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:36.963703" elapsed="0.000703">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-25T01:12:36.964559" elapsed="0.000022"/>
</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-25T01:12:36.964741" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:36.964808" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:36.954681" elapsed="0.010234">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:36.954441" elapsed="0.010598">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:36.954290" elapsed="0.010807">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:36.953876" elapsed="0.011311">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:36.965433" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:36.927148" elapsed="0.038403">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:38.994418" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:12:38.994729" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:38.993730" elapsed="0.001062"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:38.993234" elapsed="0.001639"/>
</kw>
<msg time="2026-04-25T01:12:38.994920" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:38.984473" elapsed="0.010504"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:38.984051" elapsed="0.011004"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:38.995524" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:38.995265" elapsed="0.000304"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:39.000873" 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-25T01:12:39.000477" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:39.001452" 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-25T01:12:39.001088" elapsed="0.000391"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:39.001529" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:12:39.001692" 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-25T01:12:39.000062" elapsed="0.001655"/>
</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-25T01:12:39.001875" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:39.002561" level="INFO">${ds_type} = operational</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-25T01:12:39.002221" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:39.003020" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:39.002759" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:39.003441" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:39.003198" elapsed="0.000269"/>
</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-25T01:12:39.003879" elapsed="0.000025"/>
</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-25T01:12:39.004163" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:39.004011" elapsed="0.000208"/>
</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-25T01:12:39.004385" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:39.004244" elapsed="0.000195"/>
</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-25T01:12:39.004605" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:39.004463" elapsed="0.000264"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:39.003989" elapsed="0.000767"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:39.003709" elapsed="0.001072"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:39.003513" elapsed="0.001294"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:39.004847" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:12:39.005071" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:39.005118" 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-25T01:12:38.999250" elapsed="0.005892"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:39.005795" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:39.005873" 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-25T01:12:39.005338" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:39.006492" 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-25T01:12:39.006208" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:39.005983" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:39.005949" elapsed="0.000734">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-25T01:12:39.006849" elapsed="0.000023"/>
</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-25T01:12:39.007043" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:39.007128" elapsed="0.000021"/>
</return>
<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>
<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-25T01:12:38.996589" elapsed="0.010663">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:38.996357" elapsed="0.010982">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:38.996215" elapsed="0.011196">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:38.995803" elapsed="0.011723">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:39.007775" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:38.966443" elapsed="0.041449">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:41.037724" elapsed="0.000255"/>
</kw>
<msg time="2026-04-25T01:12:41.038069" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:41.037052" elapsed="0.001105"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:41.036565" elapsed="0.001702"/>
</kw>
<msg time="2026-04-25T01:12:41.038332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:41.027169" elapsed="0.011220"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:41.026503" elapsed="0.011963"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:41.038919" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:41.038661" elapsed="0.000320"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:41.044604" 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-25T01:12:41.044209" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:41.045229" 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-25T01:12:41.044889" elapsed="0.000369"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:41.045309" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:12:41.045475" 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-25T01:12:41.043811" elapsed="0.001689"/>
</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-25T01:12:41.045662" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:41.046357" level="INFO">${ds_type} = operational</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-25T01:12:41.046011" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:41.046810" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:41.046548" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:41.047256" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:41.047008" elapsed="0.000276"/>
</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-25T01:12:41.047715" elapsed="0.000026"/>
</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-25T01:12:41.048004" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:41.047833" elapsed="0.000230"/>
</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-25T01:12:41.048234" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:41.048088" elapsed="0.000202"/>
</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-25T01:12:41.048457" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:41.048313" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:41.047812" elapsed="0.000722"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:41.047529" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:41.047331" elapsed="0.001254"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:41.048626" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:12:41.048845" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:41.048893" 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-25T01:12:41.043069" elapsed="0.005847"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:41.049425" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:41.049506" 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-25T01:12:41.049112" elapsed="0.000419"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:41.050157" 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-25T01:12:41.049845" elapsed="0.000402">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:41.049602" elapsed="0.000729">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:41.049584" elapsed="0.000790">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-25T01:12:41.050540" elapsed="0.000023"/>
</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-25T01:12:41.050728" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:41.050798" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:41.040007" elapsed="0.010900">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:41.039753" elapsed="0.011242">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:41.039611" elapsed="0.011445">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:41.039216" elapsed="0.011930">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:41.051413" elapsed="0.000062"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:41.009385" elapsed="0.042190">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:43.081947" elapsed="0.000264"/>
</kw>
<msg time="2026-04-25T01:12:43.082277" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:43.081240" elapsed="0.001101"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:43.080757" elapsed="0.001663"/>
</kw>
<msg time="2026-04-25T01:12:43.082465" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:43.072102" elapsed="0.010407"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:43.071660" elapsed="0.010922"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:43.083055" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:43.082778" elapsed="0.000323"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:43.088297" 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-25T01:12:43.087885" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:43.088780" 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-25T01:12:43.088488" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:43.088856" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:12:43.089035" 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-25T01:12:43.087507" elapsed="0.001553"/>
</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-25T01:12:43.089217" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:43.089892" level="INFO">${ds_type} = operational</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-25T01:12:43.089536" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:43.090342" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:43.090097" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:43.090759" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:43.090517" elapsed="0.000270"/>
</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-25T01:12:43.091202" 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-25T01:12:43.091459" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:43.091311" elapsed="0.000203"/>
</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-25T01:12:43.091679" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:43.091538" elapsed="0.000194"/>
</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-25T01:12:43.091896" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:43.091755" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:43.091291" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:43.091031" elapsed="0.000979"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:43.090833" elapsed="0.001203"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:43.092076" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:43.092277" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:43.092323" 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-25T01:12:43.086767" elapsed="0.005579"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:43.092878" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:43.092960" 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-25T01:12:43.092590" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:43.093767" 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-25T01:12:43.093477" elapsed="0.000401">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:43.093245" elapsed="0.000705">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:43.093053" elapsed="0.000948">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-25T01:12:43.094159" elapsed="0.000023"/>
</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-25T01:12:43.094334" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:43.094399" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:43.084132" elapsed="0.010373">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:43.083881" elapsed="0.010693">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:43.083735" elapsed="0.010893">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:43.083333" elapsed="0.011383">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:43.094951" elapsed="0.000040"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:43.052483" elapsed="0.042601">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:45.123215" elapsed="0.000262"/>
</kw>
<msg time="2026-04-25T01:12:45.123544" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:45.122468" elapsed="0.001141"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:45.121948" elapsed="0.001744"/>
</kw>
<msg time="2026-04-25T01:12:45.123738" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:45.113314" elapsed="0.010468"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:45.112817" elapsed="0.011041"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:45.124344" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:45.124078" elapsed="0.000313"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:45.129902" 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-25T01:12:45.129493" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:45.130429" 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-25T01:12:45.130113" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:45.130505" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:12:45.130702" 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-25T01:12:45.129107" elapsed="0.001623"/>
</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-25T01:12:45.130985" elapsed="0.000194"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:45.131725" level="INFO">${ds_type} = operational</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-25T01:12:45.131371" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:45.132181" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:45.131914" elapsed="0.000293"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:45.132603" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:45.132360" elapsed="0.000269"/>
</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-25T01:12:45.133054" elapsed="0.000026"/>
</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-25T01:12:45.133317" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:45.133168" elapsed="0.000205"/>
</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-25T01:12:45.133541" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:45.133398" elapsed="0.000196"/>
</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-25T01:12:45.133761" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:45.133618" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:45.133147" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:45.132861" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:45.132676" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:45.133924" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:45.134157" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:45.134206" 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-25T01:12:45.128363" elapsed="0.005867"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:45.134719" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:45.134811" 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-25T01:12:45.134408" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:45.135569" 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-25T01:12:45.135262" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:45.134914" elapsed="0.000798">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:45.134894" elapsed="0.000850">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-25T01:12:45.135901" elapsed="0.000022"/>
</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-25T01:12:45.136096" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:45.136164" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:45.125435" elapsed="0.010836">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:45.125195" elapsed="0.011147">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:45.125050" elapsed="0.011348">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:45.124630" elapsed="0.011857">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:45.136726" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:45.096028" elapsed="0.040815">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:47.167205" elapsed="0.000354"/>
</kw>
<msg time="2026-04-25T01:12:47.167652" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:47.166487" elapsed="0.001235"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:47.165981" elapsed="0.001826"/>
</kw>
<msg time="2026-04-25T01:12:47.167855" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:47.157097" elapsed="0.010802"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:47.156537" elapsed="0.011454"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:47.168465" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:47.168199" elapsed="0.000313"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:47.173951" 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-25T01:12:47.173524" elapsed="0.000472"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:47.174468" 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-25T01:12:47.174168" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:47.174553" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:12:47.174724" 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-25T01:12:47.173128" elapsed="0.001620"/>
</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-25T01:12:47.174908" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:47.175625" level="INFO">${ds_type} = operational</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-25T01:12:47.175253" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:47.176087" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:47.175821" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:47.176515" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:47.176268" elapsed="0.000275"/>
</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-25T01:12:47.177002" elapsed="0.000027"/>
</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-25T01:12:47.177277" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:47.177120" elapsed="0.000212"/>
</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-25T01:12:47.177506" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:47.177358" elapsed="0.000217"/>
</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-25T01:12:47.177751" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:47.177601" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:47.177099" elapsed="0.000727"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:47.176805" elapsed="0.001045"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:47.176591" elapsed="0.001286"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:47.177919" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:47.178141" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:47.178188" 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-25T01:12:47.172325" elapsed="0.005886"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:47.178688" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:47.178769" 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-25T01:12:47.178393" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:47.179684" 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-25T01:12:47.179370" elapsed="0.000396">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:47.179132" elapsed="0.000707">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:47.178901" elapsed="0.000971">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-25T01:12:47.180048" elapsed="0.000024"/>
</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-25T01:12:47.180232" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:47.180300" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:47.169615" elapsed="0.010796">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:47.169351" elapsed="0.011131">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:47.169199" elapsed="0.011356">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:47.168774" elapsed="0.011892">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:47.180912" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:47.137819" elapsed="0.043241">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:49.210914" elapsed="0.000270"/>
</kw>
<msg time="2026-04-25T01:12:49.211252" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:49.210205" elapsed="0.001111"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:49.209679" elapsed="0.001721"/>
</kw>
<msg time="2026-04-25T01:12:49.211448" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:49.200669" elapsed="0.010825"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:49.200231" elapsed="0.011345"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:49.212081" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:49.211789" elapsed="0.000340"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:49.217708" 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-25T01:12:49.217305" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:49.218263" 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-25T01:12:49.217907" elapsed="0.000385"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:49.218342" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:12:49.218613" 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-25T01:12:49.216894" elapsed="0.001751"/>
</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-25T01:12:49.218814" elapsed="0.000213"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:49.219579" level="INFO">${ds_type} = operational</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-25T01:12:49.219201" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:49.220065" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:49.219770" elapsed="0.000324"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:49.220637" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:49.220327" elapsed="0.000346"/>
</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-25T01:12:49.221193" elapsed="0.000026"/>
</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-25T01:12:49.221462" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:49.221309" elapsed="0.000208"/>
</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-25T01:12:49.221688" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:49.221543" elapsed="0.000199"/>
</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-25T01:12:49.221914" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:49.221765" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:49.221290" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:49.220979" elapsed="0.001052"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:49.220733" elapsed="0.001323"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:49.222097" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:49.222303" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:49.222350" 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-25T01:12:49.216161" elapsed="0.006212"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:49.222878" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:49.222982" 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-25T01:12:49.222548" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:49.223589" 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-25T01:12:49.223306" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:49.223082" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:49.223062" elapsed="0.000702">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-25T01:12:49.223920" elapsed="0.000022"/>
</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-25T01:12:49.224116" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:49.224182" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:49.213186" elapsed="0.011104">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:49.212928" elapsed="0.011430">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:49.212784" elapsed="0.011631">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:49.212373" elapsed="0.012131">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:49.224744" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:49.181960" elapsed="0.042907">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:51.253587" elapsed="0.000270"/>
</kw>
<msg time="2026-04-25T01:12:51.253937" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:51.252782" elapsed="0.001264"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:51.252156" elapsed="0.002029"/>
</kw>
<msg time="2026-04-25T01:12:51.254349" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:51.243000" elapsed="0.011403"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:51.242433" elapsed="0.012053"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:51.255057" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:51.254730" elapsed="0.000377"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:51.260799" 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-25T01:12:51.260330" elapsed="0.000501"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:51.261361" 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-25T01:12:51.261017" elapsed="0.000377"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:51.261454" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:12:51.261669" 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-25T01:12:51.259911" elapsed="0.001790"/>
</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-25T01:12:51.261904" elapsed="0.000243"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:51.262829" level="INFO">${ds_type} = operational</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-25T01:12:51.262372" elapsed="0.000486"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:51.263293" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:51.263041" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:51.263719" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:51.263473" elapsed="0.000273"/>
</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-25T01:12:51.264251" elapsed="0.000026"/>
</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-25T01:12:51.264521" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:51.264368" elapsed="0.000213"/>
</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-25T01:12:51.264787" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:51.264614" elapsed="0.000231"/>
</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-25T01:12:51.265032" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:51.264869" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:51.264348" elapsed="0.000762"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:51.264052" elapsed="0.001082"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:51.263799" elapsed="0.001361"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:51.265202" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:12:51.265416" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:51.265463" 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-25T01:12:51.258998" elapsed="0.006490"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:51.266267" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:51.266352" 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-25T01:12:51.265667" elapsed="0.000711"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:51.266995" 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-25T01:12:51.266686" elapsed="0.000386">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:51.266452" elapsed="0.000689">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:51.266433" elapsed="0.000743">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-25T01:12:51.267337" elapsed="0.000023"/>
</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-25T01:12:51.267587" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:51.267659" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:51.256185" elapsed="0.011584">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:51.255923" elapsed="0.011919">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:51.255773" elapsed="0.012128">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:51.255361" elapsed="0.012649">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:51.268263" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:51.225687" elapsed="0.042698">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:53.301175" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:12:53.301489" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:53.300496" elapsed="0.001058"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:53.300022" elapsed="0.001612"/>
</kw>
<msg time="2026-04-25T01:12:53.301680" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:53.288883" elapsed="0.012842"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:53.288201" elapsed="0.013597"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:53.302310" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:53.302042" elapsed="0.000314"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:53.307920" 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-25T01:12:53.307522" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:53.308425" 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-25T01:12:53.308133" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:53.308500" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:12:53.308688" 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-25T01:12:53.307138" elapsed="0.001575"/>
</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-25T01:12:53.308896" elapsed="0.000183"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:53.309582" level="INFO">${ds_type} = operational</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-25T01:12:53.309245" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:53.310092" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:53.309767" elapsed="0.000354"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:53.310520" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:53.310274" elapsed="0.000271"/>
</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-25T01:12:53.310948" elapsed="0.000039"/>
</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-25T01:12:53.311316" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:53.311073" elapsed="0.000320"/>
</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-25T01:12:53.311608" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:53.311452" elapsed="0.000213"/>
</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-25T01:12:53.311862" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:53.311689" elapsed="0.000234"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:53.311054" elapsed="0.000900"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:53.310774" elapsed="0.001222"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:53.310591" elapsed="0.001432"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:53.312064" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:53.312267" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:53.312312" 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-25T01:12:53.306372" elapsed="0.005964"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:53.312787" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:53.312865" 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-25T01:12:53.312511" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:53.313483" 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-25T01:12:53.313200" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:53.312959" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:53.312940" elapsed="0.000718">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-25T01:12:53.313813" elapsed="0.000022"/>
</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-25T01:12:53.314003" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:53.314070" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:53.303414" elapsed="0.010763">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:53.303174" elapsed="0.011072">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:53.303002" elapsed="0.011299">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:53.302590" elapsed="0.011800">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:53.314628" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:53.269278" elapsed="0.045467">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:55.343692" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:12:55.344019" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:55.343027" elapsed="0.001055"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:55.342537" elapsed="0.001629"/>
</kw>
<msg time="2026-04-25T01:12:55.344214" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:55.333605" elapsed="0.010655"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:55.333175" elapsed="0.011163"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:55.344870" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:55.344535" elapsed="0.000384"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:55.350284" 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-25T01:12:55.349863" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:55.350766" 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-25T01:12:55.350475" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:55.350841" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:12:55.351016" 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-25T01:12:55.349453" elapsed="0.001589"/>
</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-25T01:12:55.351207" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:55.351865" level="INFO">${ds_type} = operational</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-25T01:12:55.351526" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:55.352311" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:55.352068" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:55.352723" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:55.352486" elapsed="0.000262"/>
</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-25T01:12:55.353207" 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-25T01:12:55.353484" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:55.353321" elapsed="0.000226"/>
</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-25T01:12:55.353738" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:55.353572" elapsed="0.000221"/>
</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-25T01:12:55.353978" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:55.353816" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:55.353302" elapsed="0.000751"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:55.353027" elapsed="0.001049"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:55.352793" elapsed="0.001309"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:55.354140" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:12:55.354338" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:55.354384" 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-25T01:12:55.348717" elapsed="0.005690"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:55.355048" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:55.355127" 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-25T01:12:55.354579" elapsed="0.000572"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:55.355725" 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-25T01:12:55.355443" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:55.355223" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:55.355204" elapsed="0.000703">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-25T01:12:55.356085" elapsed="0.000023"/>
</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-25T01:12:55.356265" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:55.356331" elapsed="0.000015"/>
</return>
<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>
<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-25T01:12:55.346087" elapsed="0.010350">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:55.345828" elapsed="0.010716">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:55.345616" elapsed="0.010984">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:55.345210" elapsed="0.011478">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:55.356927" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:55.315722" elapsed="0.041340">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:57.384128" elapsed="0.000240"/>
</kw>
<msg time="2026-04-25T01:12:57.384435" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:57.383457" elapsed="0.001042"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:57.382989" elapsed="0.001588"/>
</kw>
<msg time="2026-04-25T01:12:57.384623" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:57.374368" elapsed="0.010298"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:57.373887" elapsed="0.010852"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:57.385231" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:57.384959" elapsed="0.000318"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:57.390654" 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-25T01:12:57.390255" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:57.391338" 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-25T01:12:57.390844" elapsed="0.000520"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:57.391414" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T01:12:57.391636" 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-25T01:12:57.389857" elapsed="0.001814"/>
</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-25T01:12:57.391848" elapsed="0.000183"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:57.392529" level="INFO">${ds_type} = operational</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-25T01:12:57.392194" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:57.393004" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:57.392729" elapsed="0.000302"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:57.393417" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:57.393180" elapsed="0.000262"/>
</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-25T01:12:57.393844" 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-25T01:12:57.394118" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:57.393953" elapsed="0.000221"/>
</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-25T01:12:57.394340" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:57.394199" elapsed="0.000194"/>
</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-25T01:12:57.394561" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:57.394416" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:57.393934" elapsed="0.000764"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:57.393676" elapsed="0.001046"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:57.393489" elapsed="0.001259"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:57.394789" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:57.395006" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:57.395053" 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-25T01:12:57.389143" elapsed="0.005934"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:57.395524" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:57.395601" 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-25T01:12:57.395251" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:57.396380" 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-25T01:12:57.395912" elapsed="0.000540">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:57.395695" elapsed="0.000823">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:57.395677" elapsed="0.000874">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-25T01:12:57.396704" elapsed="0.000022"/>
</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-25T01:12:57.396909" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:57.396992" elapsed="0.000016"/>
</return>
<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>
<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-25T01:12:57.386311" elapsed="0.010789">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:57.386072" elapsed="0.011098">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:57.385910" elapsed="0.011316">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:57.385511" elapsed="0.011804">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:57.397554" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:57.358101" elapsed="0.039569">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:12:59.425997" elapsed="0.000255"/>
</kw>
<msg time="2026-04-25T01:12:59.426317" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:59.425289" elapsed="0.001089"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:59.424789" elapsed="0.001666"/>
</kw>
<msg time="2026-04-25T01:12:59.426502" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:12:59.416043" elapsed="0.010504"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:12:59.415583" elapsed="0.011039"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:12:59.427090" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:12:59.426811" elapsed="0.000326"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:12:59.432620" 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-25T01:12:59.432079" elapsed="0.000569"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:59.433199" 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-25T01:12:59.432874" elapsed="0.000352"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:12:59.433275" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:12:59.433438" 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-25T01:12:59.431660" elapsed="0.001803"/>
</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-25T01:12:59.433620" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:12:59.434301" level="INFO">${ds_type} = operational</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-25T01:12:59.433938" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:59.434731" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:59.434488" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:12:59.435181" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:12:59.434908" elapsed="0.000299"/>
</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-25T01:12:59.435607" elapsed="0.000025"/>
</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-25T01:12:59.435893" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:59.435721" elapsed="0.000230"/>
</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-25T01:12:59.436142" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:59.435977" elapsed="0.000221"/>
</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-25T01:12:59.436365" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:12:59.436221" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:12:59.435698" elapsed="0.000745"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:12:59.435438" elapsed="0.001030"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:59.435255" elapsed="0.001238"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:12:59.436534" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:12:59.436740" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:12:59.436787" 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-25T01:12:59.430833" elapsed="0.005979"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:12:59.437286" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:12:59.437368" 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-25T01:12:59.436991" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:12:59.438250" 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-25T01:12:59.437926" elapsed="0.000399">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:12:59.437649" elapsed="0.000746">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:12:59.437445" elapsed="0.000984">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-25T01:12:59.438590" elapsed="0.000023"/>
</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-25T01:12:59.438771" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:12:59.438841" elapsed="0.000017"/>
</return>
<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>
<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-25T01:12:59.428205" elapsed="0.010747">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:12:59.427951" elapsed="0.011098">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:12:59.427808" elapsed="0.011301">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:12:59.427372" elapsed="0.011829">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:12:59.439442" elapsed="0.000061"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:12:59.398749" elapsed="0.040853">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:01.466651" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:13:01.466959" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:01.465975" elapsed="0.001063"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:01.465501" elapsed="0.001619"/>
</kw>
<msg time="2026-04-25T01:13:01.467168" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:01.456602" elapsed="0.010610"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:01.456177" elapsed="0.011109"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:01.467815" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:01.467486" elapsed="0.000376"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:01.473425" 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-25T01:13:01.473028" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:01.474038" 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-25T01:13:01.473618" elapsed="0.000460"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:01.474151" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:13:01.474385" 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-25T01:13:01.472622" elapsed="0.001800"/>
</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-25T01:13:01.474657" elapsed="0.000229"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:01.475658" level="INFO">${ds_type} = operational</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-25T01:13:01.475150" elapsed="0.000547"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:01.476323" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:01.475936" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:01.477060" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:01.476590" elapsed="0.000509"/>
</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-25T01:13:01.477697" elapsed="0.000036"/>
</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-25T01:13:01.478029" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:01.477859" elapsed="0.000228"/>
</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-25T01:13:01.478254" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:01.478112" elapsed="0.000195"/>
</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-25T01:13:01.478473" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:01.478331" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:01.477832" elapsed="0.000716"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:01.477445" elapsed="0.001127"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:01.477171" elapsed="0.001427"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:01.478638" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:01.478840" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:01.478886" 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-25T01:13:01.471770" elapsed="0.007139"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:01.479446" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:01.479524" 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-25T01:13:01.479168" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:01.480138" 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-25T01:13:01.479838" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:01.479618" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:01.479599" elapsed="0.000714">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-25T01:13:01.480469" elapsed="0.000023"/>
</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-25T01:13:01.480647" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:01.480714" elapsed="0.000017"/>
</return>
<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>
<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-25T01:13:01.468933" elapsed="0.011894">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:01.468694" elapsed="0.012222">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:01.468549" elapsed="0.012423">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:01.468116" elapsed="0.012962">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:01.481316" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:01.440620" elapsed="0.040814">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:03.507942" elapsed="0.000257"/>
</kw>
<msg time="2026-04-25T01:13:03.508265" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:03.507284" elapsed="0.001042"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:03.506798" elapsed="0.001607"/>
</kw>
<msg time="2026-04-25T01:13:03.508451" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:03.498086" elapsed="0.010410"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:03.497636" elapsed="0.010936"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:03.509044" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:03.508769" elapsed="0.000321"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:03.514344" 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-25T01:13:03.513937" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:03.514823" 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-25T01:13:03.514533" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:03.514897" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:13:03.515074" 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-25T01:13:03.513522" elapsed="0.001577"/>
</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-25T01:13:03.515342" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:03.516075" level="INFO">${ds_type} = operational</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-25T01:13:03.515666" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:03.516506" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:03.516265" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:03.516922" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:03.516681" elapsed="0.000267"/>
</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-25T01:13:03.517367" 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-25T01:13:03.517625" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:03.517477" elapsed="0.000203"/>
</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-25T01:13:03.517844" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:03.517705" elapsed="0.000194"/>
</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-25T01:13:03.518092" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:03.517926" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:03.517458" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:03.517199" elapsed="0.000992"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:03.517011" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:03.518257" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:03.518459" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:03.518506" 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-25T01:13:03.512752" elapsed="0.005777"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:03.518978" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:03.519071" 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-25T01:13:03.518701" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:03.519851" 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-25T01:13:03.519566" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:03.519340" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:03.519146" elapsed="0.000897">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-25T01:13:03.520199" 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-25T01:13:03.520373" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:03.520439" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:03.510127" elapsed="0.010416">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:03.509877" elapsed="0.010735">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:03.509716" elapsed="0.010950">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:03.509323" elapsed="0.011430">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:03.521005" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:03.482266" elapsed="0.038858">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:05.548278" elapsed="0.000346"/>
</kw>
<msg time="2026-04-25T01:13:05.548691" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:05.547597" elapsed="0.001159"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:05.547126" elapsed="0.001712"/>
</kw>
<msg time="2026-04-25T01:13:05.548885" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:05.538374" elapsed="0.010555"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:05.537932" elapsed="0.011091"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:05.549489" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:05.549225" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:05.555001" 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-25T01:13:05.554566" elapsed="0.000463"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:05.555485" 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-25T01:13:05.555195" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:05.555559" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:13:05.555718" 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-25T01:13:05.554172" elapsed="0.001572"/>
</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-25T01:13:05.555901" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:05.556573" level="INFO">${ds_type} = operational</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-25T01:13:05.556236" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:05.557023" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:05.556760" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:05.557442" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:05.557200" elapsed="0.000268"/>
</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-25T01:13:05.557867" 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-25T01:13:05.558144" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:05.557991" elapsed="0.000208"/>
</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-25T01:13:05.558364" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:05.558223" elapsed="0.000194"/>
</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-25T01:13:05.558582" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:05.558441" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:05.557956" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:05.557698" elapsed="0.000981"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:05.557514" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:05.558743" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:05.558947" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:05.559023" 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-25T01:13:05.553426" elapsed="0.005622"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:05.559498" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:05.559576" 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-25T01:13:05.559223" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:05.560242" 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-25T01:13:05.559940" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:05.559711" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:05.559691" elapsed="0.000725">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-25T01:13:05.560572" elapsed="0.000023"/>
</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-25T01:13:05.560749" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:05.560816" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:05.550581" elapsed="0.010342">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:05.550341" elapsed="0.010668">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:05.550196" elapsed="0.010871">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:05.549775" elapsed="0.011382">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:05.561394" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:05.522107" elapsed="0.039403">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:07.589754" elapsed="0.000309"/>
</kw>
<msg time="2026-04-25T01:13:07.590145" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:07.588938" elapsed="0.001284"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:07.588359" elapsed="0.001959"/>
</kw>
<msg time="2026-04-25T01:13:07.590373" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:07.577132" elapsed="0.013295"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:07.576608" elapsed="0.013958"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:07.591131" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:07.590806" elapsed="0.000378"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:07.597552" 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-25T01:13:07.597099" elapsed="0.000485"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:07.598138" 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-25T01:13:07.597782" elapsed="0.000386"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:07.598224" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:13:07.598409" 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-25T01:13:07.596575" elapsed="0.001865"/>
</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-25T01:13:07.598666" elapsed="0.000186"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:07.599466" level="INFO">${ds_type} = operational</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-25T01:13:07.599066" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:07.600002" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:07.599694" elapsed="0.000340"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:07.600577" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:07.600292" elapsed="0.000317"/>
</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-25T01:13:07.601639" elapsed="0.000031"/>
</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-25T01:13:07.601956" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:07.601774" elapsed="0.000265"/>
</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-25T01:13:07.602248" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:07.602070" elapsed="0.000241"/>
</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-25T01:13:07.602530" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:07.602340" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:07.601750" elapsed="0.000885"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:07.600881" elapsed="0.001787"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:07.600664" elapsed="0.002035"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:07.602748" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:13:07.603005" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:07.603064" 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-25T01:13:07.595700" elapsed="0.007395"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:07.603862" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:07.603954" 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-25T01:13:07.603320" elapsed="0.000682"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:07.604688" 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-25T01:13:07.604357" elapsed="0.000417">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:07.604089" elapsed="0.000764">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:07.604066" elapsed="0.000825">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-25T01:13:07.605100" elapsed="0.000027"/>
</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-25T01:13:07.605315" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:07.605393" elapsed="0.000019"/>
</return>
<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>
<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-25T01:13:07.592418" elapsed="0.013102">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:07.592140" elapsed="0.013462">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:07.591955" elapsed="0.013712">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:07.591466" elapsed="0.014305">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:07.606077" elapsed="0.000030"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:07.562198" elapsed="0.044016">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:09.632536" elapsed="0.000253"/>
</kw>
<msg time="2026-04-25T01:13:09.632867" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:09.631773" elapsed="0.001166"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:09.631244" elapsed="0.001796"/>
</kw>
<msg time="2026-04-25T01:13:09.633180" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:09.622346" elapsed="0.010882"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:09.621873" elapsed="0.011433"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:09.633792" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:09.633512" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:09.641501" 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-25T01:13:09.640917" elapsed="0.000624"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:09.642113" 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-25T01:13:09.641772" elapsed="0.000368"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:09.642203" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:13:09.642433" 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-25T01:13:09.640418" elapsed="0.002042"/>
</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-25T01:13:09.642625" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:09.643387" level="INFO">${ds_type} = operational</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-25T01:13:09.643019" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:09.643838" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:09.643577" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:09.644286" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:09.644038" elapsed="0.000274"/>
</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-25T01:13:09.644826" elapsed="0.000026"/>
</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-25T01:13:09.645115" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:09.644942" elapsed="0.000230"/>
</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-25T01:13:09.645398" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:09.645198" elapsed="0.000282"/>
</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-25T01:13:09.645725" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:09.645517" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:09.644921" elapsed="0.000888"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:09.644633" elapsed="0.001200"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:09.644375" elapsed="0.001484"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:09.645900" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:09.646144" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:09.646191" 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-25T01:13:09.639537" elapsed="0.006677"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:09.646697" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:09.646774" 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-25T01:13:09.646407" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:09.647578" 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-25T01:13:09.647169" elapsed="0.000517">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:09.646870" elapsed="0.000905">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:09.646851" elapsed="0.000958">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-25T01:13:09.647986" elapsed="0.000024"/>
</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-25T01:13:09.648243" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:09.648315" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:09.635139" elapsed="0.013286">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:09.634790" elapsed="0.013705">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:09.634584" elapsed="0.013966">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:09.634113" elapsed="0.014528">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:09.649566" elapsed="0.000032"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:09.606956" elapsed="0.042744">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:11.676059" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:13:11.676367" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:11.675383" elapsed="0.001046"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:11.674897" elapsed="0.001610"/>
</kw>
<msg time="2026-04-25T01:13:11.676553" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:11.666286" elapsed="0.010310"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:11.665849" elapsed="0.010820"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:11.677146" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:11.676864" elapsed="0.000335"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:11.682392" 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-25T01:13:11.681999" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:11.682870" 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-25T01:13:11.682581" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:11.682942" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T01:13:11.683118" 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-25T01:13:11.681576" elapsed="0.001566"/>
</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-25T01:13:11.683297" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:11.683951" level="INFO">${ds_type} = operational</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-25T01:13:11.683616" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:11.684391" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:11.684153" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:11.684818" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:11.684568" elapsed="0.000275"/>
</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-25T01:13:11.685255" 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-25T01:13:11.685577" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:11.685363" elapsed="0.000271"/>
</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-25T01:13:11.685805" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:11.685660" elapsed="0.000200"/>
</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-25T01:13:11.686072" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:11.685883" elapsed="0.000243"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:11.685344" elapsed="0.000805"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:11.685087" elapsed="0.001086"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:11.684889" elapsed="0.001311"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:11.686239" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:11.686439" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:11.686485" 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-25T01:13:11.680835" elapsed="0.005672"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:11.687151" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:11.687231" 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-25T01:13:11.686681" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:11.687828" 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-25T01:13:11.687548" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:11.687327" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:11.687308" elapsed="0.000712">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-25T01:13:11.688176" elapsed="0.000022"/>
</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-25T01:13:11.688350" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:11.688416" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:11.678241" elapsed="0.010280">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:11.678002" elapsed="0.010588">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:11.677830" elapsed="0.010814">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:11.677434" elapsed="0.011296">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:11.688961" elapsed="0.000041"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:11.650571" elapsed="0.038523">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:13.715169" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:13:13.715483" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:13.714492" elapsed="0.001055"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:13.714021" elapsed="0.001604"/>
</kw>
<msg time="2026-04-25T01:13:13.715672" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:13.705304" elapsed="0.010411"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:13.704856" elapsed="0.010931"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:13.716351" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:13.716009" elapsed="0.000388"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:13.721815" 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-25T01:13:13.721425" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:13.722311" 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-25T01:13:13.722022" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:13.722386" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:13.722545" 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-25T01:13:13.721053" elapsed="0.001517"/>
</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-25T01:13:13.722732" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:13.723409" level="INFO">${ds_type} = operational</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-25T01:13:13.723075" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:13.723836" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:13.723593" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:13.724265" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:13.724027" elapsed="0.000264"/>
</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-25T01:13:13.724717" elapsed="0.000025"/>
</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-25T01:13:13.725001" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:13.724829" elapsed="0.000228"/>
</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-25T01:13:13.725231" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:13.725082" elapsed="0.000204"/>
</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-25T01:13:13.725450" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:13.725309" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:13.724809" elapsed="0.000714"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:13.724518" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:13.724336" elapsed="0.001238"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:13.725613" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:13:13.725810" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:13.725854" 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-25T01:13:13.720291" elapsed="0.005586"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:13.726363" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:13.726441" 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-25T01:13:13.726084" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:13.727092" 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-25T01:13:13.726774" elapsed="0.000395">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:13.726538" elapsed="0.000700">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:13.726519" elapsed="0.000752">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-25T01:13:13.727424" 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-25T01:13:13.727600" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:13.727665" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:13.717478" elapsed="0.010298">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:13.717240" elapsed="0.010677">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:13.717092" elapsed="0.010901">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:13.716671" elapsed="0.011416">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:13.728492" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:13.690073" elapsed="0.038558">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:15.758273" elapsed="0.000239"/>
</kw>
<msg time="2026-04-25T01:13:15.758577" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:15.757603" elapsed="0.001036"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:15.757137" elapsed="0.001581"/>
</kw>
<msg time="2026-04-25T01:13:15.758763" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:15.748589" elapsed="0.010218"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:15.748165" elapsed="0.010715"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:15.759347" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:15.759089" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:15.764523" 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-25T01:13:15.764136" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:15.765016" 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-25T01:13:15.764711" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:15.765089" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:15.765246" 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-25T01:13:15.763723" elapsed="0.001548"/>
</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-25T01:13:15.765424" elapsed="0.000152"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:15.766084" level="INFO">${ds_type} = operational</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-25T01:13:15.765735" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:15.766505" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:15.766268" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:15.766911" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:15.766678" elapsed="0.000258"/>
</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-25T01:13:15.767347" 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-25T01:13:15.767604" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:15.767456" elapsed="0.000203"/>
</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-25T01:13:15.767826" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:15.767684" elapsed="0.000195"/>
</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-25T01:13:15.768073" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:15.767902" elapsed="0.000284"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:15.767436" elapsed="0.000775"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:15.767181" elapsed="0.001054"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:15.766998" elapsed="0.001261"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:15.768299" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:15.768499" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:15.768544" 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-25T01:13:15.763011" elapsed="0.005556"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:15.769029" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:15.769107" 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-25T01:13:15.768740" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:15.769871" 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-25T01:13:15.769588" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:15.769363" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:15.769181" elapsed="0.000882">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-25T01:13:15.770220" elapsed="0.000022"/>
</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-25T01:13:15.770395" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:15.770461" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:15.760419" elapsed="0.010149">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:15.760188" elapsed="0.010448">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:15.760045" elapsed="0.010646">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:15.759620" elapsed="0.011158">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:15.771029" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:15.729604" elapsed="0.041543">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:17.798709" elapsed="0.000259"/>
</kw>
<msg time="2026-04-25T01:13:17.799052" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:17.798006" elapsed="0.001114"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:17.797510" elapsed="0.001691"/>
</kw>
<msg time="2026-04-25T01:13:17.799249" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:17.788618" elapsed="0.010675"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:17.788127" elapsed="0.011239"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:17.799875" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:17.799571" elapsed="0.000353"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:17.805675" 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-25T01:13:17.805187" elapsed="0.000526"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:17.806355" 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-25T01:13:17.806049" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:17.806432" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:13:17.806597" 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-25T01:13:17.804727" elapsed="0.001895"/>
</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-25T01:13:17.806782" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:17.807512" level="INFO">${ds_type} = operational</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-25T01:13:17.807133" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:17.807952" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:17.807705" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:17.808396" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:17.808153" elapsed="0.000269"/>
</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-25T01:13:17.808850" elapsed="0.000032"/>
</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-25T01:13:17.809219" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:17.809036" elapsed="0.000244"/>
</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-25T01:13:17.809454" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:17.809306" elapsed="0.000202"/>
</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-25T01:13:17.809677" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:17.809531" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:17.809014" elapsed="0.000738"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:17.808657" elapsed="0.001119"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:17.808471" elapsed="0.001331"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:17.809845" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:13:17.810117" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:17.810165" 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-25T01:13:17.803936" elapsed="0.006253"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:17.810669" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:17.810759" 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-25T01:13:17.810370" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:17.811385" 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-25T01:13:17.811098" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:17.810856" elapsed="0.000677">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:17.810838" elapsed="0.000726">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-25T01:13:17.811720" elapsed="0.000022"/>
</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-25T01:13:17.811897" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:17.811979" elapsed="0.000019"/>
</return>
<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>
<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-25T01:13:17.801044" elapsed="0.011050">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:17.800742" elapsed="0.011424">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:17.800594" elapsed="0.011629">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:17.800187" elapsed="0.012128">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:17.812558" elapsed="0.000064"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:17.771900" elapsed="0.040822">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:19.841626" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:13:19.841938" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:19.840941" elapsed="0.001078"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:19.840467" elapsed="0.001636"/>
</kw>
<msg time="2026-04-25T01:13:19.842151" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:19.831733" elapsed="0.010462"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:19.831299" elapsed="0.010971"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:19.842730" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:19.842469" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:19.848043" 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-25T01:13:19.847611" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:19.848535" 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-25T01:13:19.848237" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:19.848609" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:13:19.848770" 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-25T01:13:19.847229" elapsed="0.001565"/>
</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-25T01:13:19.848951" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:19.849630" level="INFO">${ds_type} = operational</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-25T01:13:19.849290" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:19.850080" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:19.849818" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:19.850494" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:19.850257" elapsed="0.000262"/>
</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-25T01:13:19.850916" 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-25T01:13:19.851195" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:19.851046" elapsed="0.000204"/>
</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-25T01:13:19.851417" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:19.851275" elapsed="0.000195"/>
</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-25T01:13:19.851637" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:19.851493" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:19.851025" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:19.850748" elapsed="0.000988"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:19.850565" elapsed="0.001196"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:19.851800" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:19.852873" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:19.852923" 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-25T01:13:19.846484" elapsed="0.006463"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:19.853485" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:19.853566" 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-25T01:13:19.853203" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:19.854383" 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-25T01:13:19.854096" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:19.853847" elapsed="0.000679">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:19.853644" elapsed="0.000914">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-25T01:13:19.854713" elapsed="0.000022"/>
</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-25T01:13:19.854982" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:19.855053" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:19.843806" elapsed="0.011355">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:19.843570" elapsed="0.011661">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:19.843427" elapsed="0.011859">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:19.843025" elapsed="0.012349">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:19.855613" elapsed="0.000033"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:19.813669" elapsed="0.042071">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:21.883478" elapsed="0.000235"/>
</kw>
<msg time="2026-04-25T01:13:21.883775" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:21.882800" elapsed="0.001036"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:21.882331" elapsed="0.001585"/>
</kw>
<msg time="2026-04-25T01:13:21.883962" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:21.873641" elapsed="0.010383"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:21.873207" elapsed="0.010894"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:21.884560" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:21.884302" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:21.890044" 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-25T01:13:21.889632" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:21.890535" 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-25T01:13:21.890243" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:21.890610" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:13:21.890770" 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-25T01:13:21.889234" elapsed="0.001561"/>
</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-25T01:13:21.891044" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:21.891708" level="INFO">${ds_type} = operational</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-25T01:13:21.891367" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:21.892160" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:21.891897" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:21.892579" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:21.892338" elapsed="0.000267"/>
</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-25T01:13:21.893024" 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-25T01:13:21.893289" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:21.893134" elapsed="0.000213"/>
</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-25T01:13:21.893516" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:21.893372" elapsed="0.000199"/>
</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-25T01:13:21.893767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:21.893620" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:21.893115" elapsed="0.000728"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:21.892837" elapsed="0.001030"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:21.892652" elapsed="0.001240"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:21.893932" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:13:21.894150" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:21.894198" 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-25T01:13:21.888491" elapsed="0.005731"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:21.894670" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:21.894748" 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-25T01:13:21.894397" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:21.895361" 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-25T01:13:21.895084" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:21.894843" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:21.894825" elapsed="0.000706">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-25T01:13:21.895684" elapsed="0.000022"/>
</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-25T01:13:21.895859" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:21.895925" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:21.885656" elapsed="0.010392">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:21.885392" elapsed="0.010726">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:21.885251" elapsed="0.010922">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:21.884838" elapsed="0.011423">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:21.896497" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:21.856642" elapsed="0.039975">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:23.925387" elapsed="0.000353"/>
</kw>
<msg time="2026-04-25T01:13:23.925808" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:23.924654" elapsed="0.001218"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:23.924180" elapsed="0.001775"/>
</kw>
<msg time="2026-04-25T01:13:23.926023" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:23.915232" elapsed="0.010900"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:23.914708" elapsed="0.011522"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:23.926704" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:23.926429" elapsed="0.000321"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:23.932220" 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-25T01:13:23.931775" elapsed="0.000492"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:23.932743" 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-25T01:13:23.932442" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:23.932819" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:23.932998" 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-25T01:13:23.931387" elapsed="0.001638"/>
</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-25T01:13:23.933195" elapsed="0.000195"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:23.933899" level="INFO">${ds_type} = operational</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-25T01:13:23.933558" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:23.934438" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:23.934156" elapsed="0.000309"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:23.934865" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:23.934619" elapsed="0.000272"/>
</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-25T01:13:23.935311" 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-25T01:13:23.935571" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:23.935422" elapsed="0.000203"/>
</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-25T01:13:23.935790" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:23.935651" elapsed="0.000193"/>
</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-25T01:13:23.936025" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:23.935866" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:23.935402" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:23.935140" elapsed="0.000984"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:23.934938" elapsed="0.001212"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:23.936190" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:23.936391" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:23.936436" 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-25T01:13:23.930600" elapsed="0.005859"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:23.937115" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:23.937193" 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-25T01:13:23.936631" elapsed="0.000586"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:23.937831" 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-25T01:13:23.937552" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:23.937331" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:23.937312" elapsed="0.000710">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-25T01:13:23.938202" elapsed="0.000023"/>
</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-25T01:13:23.938379" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:23.938445" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:23.927848" elapsed="0.010702">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:23.927610" elapsed="0.011008">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:23.927460" elapsed="0.011213">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:23.927010" elapsed="0.011750">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:23.939008" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:23.897563" elapsed="0.041563">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:25.967096" elapsed="0.000254"/>
</kw>
<msg time="2026-04-25T01:13:25.967419" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:25.966404" elapsed="0.001081"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:25.965894" elapsed="0.001673"/>
</kw>
<msg time="2026-04-25T01:13:25.967613" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:25.957052" elapsed="0.010605"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:25.956590" elapsed="0.011142"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:25.968218" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:25.967942" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:25.973890" 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-25T01:13:25.973462" elapsed="0.000456"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:25.974401" 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-25T01:13:25.974109" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:25.974475" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:25.974635" 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-25T01:13:25.973078" elapsed="0.001581"/>
</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-25T01:13:25.974818" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:25.975509" level="INFO">${ds_type} = operational</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-25T01:13:25.975155" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:25.976031" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:25.975731" elapsed="0.000335"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:25.976585" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:25.976316" elapsed="0.000298"/>
</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-25T01:13:25.977099" elapsed="0.000028"/>
</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-25T01:13:25.977402" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:25.977228" elapsed="0.000240"/>
</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-25T01:13:25.977661" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:25.977496" elapsed="0.000230"/>
</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-25T01:13:25.977956" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:25.977753" elapsed="0.000285"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:25.977205" elapsed="0.000860"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:25.976886" elapsed="0.001208"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:25.976673" elapsed="0.001451"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:25.978171" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:13:25.978405" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:25.978465" 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-25T01:13:25.972287" elapsed="0.006205"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:25.979020" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:25.979114" 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-25T01:13:25.978695" elapsed="0.000448"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:25.979809" 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-25T01:13:25.979486" elapsed="0.000406">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:25.979227" elapsed="0.000760">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:25.979202" elapsed="0.000824">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-25T01:13:25.980204" elapsed="0.000024"/>
</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-25T01:13:25.980407" elapsed="0.000028"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:25.980492" elapsed="0.000017"/>
</return>
<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>
<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-25T01:13:25.969371" elapsed="0.011244">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:25.969095" elapsed="0.011602">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:25.968921" elapsed="0.011838">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:25.968498" elapsed="0.012363">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:25.981149" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:25.940077" elapsed="0.041203">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:28.010756" elapsed="0.000258"/>
</kw>
<msg time="2026-04-25T01:13:28.011087" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:28.010101" elapsed="0.001049"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:28.009615" elapsed="0.001614"/>
</kw>
<msg time="2026-04-25T01:13:28.011342" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:27.998180" elapsed="0.013209"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:27.997724" elapsed="0.013740"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:28.011918" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:28.011660" elapsed="0.000318"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:28.017364" 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-25T01:13:28.016888" elapsed="0.000504"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:28.017845" 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-25T01:13:28.017555" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:28.017917" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:28.018101" 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-25T01:13:28.016388" elapsed="0.001738"/>
</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-25T01:13:28.018281" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:28.018932" level="INFO">${ds_type} = operational</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-25T01:13:28.018598" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:28.019374" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:28.019134" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:28.019783" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:28.019547" elapsed="0.000261"/>
</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-25T01:13:28.020222" 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-25T01:13:28.020483" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:28.020334" elapsed="0.000204"/>
</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-25T01:13:28.020702" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:28.020563" elapsed="0.000192"/>
</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-25T01:13:28.020939" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:28.020777" elapsed="0.000228"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:28.020314" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:28.020052" elapsed="0.001001"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:28.019853" elapsed="0.001225"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:28.021118" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:13:28.021318" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:28.021364" 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-25T01:13:28.015657" elapsed="0.005730"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:28.022028" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:28.022108" 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-25T01:13:28.021557" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:28.022705" 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-25T01:13:28.022423" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:28.022202" elapsed="0.000648">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:28.022184" elapsed="0.000698">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-25T01:13:28.023051" elapsed="0.000023"/>
</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-25T01:13:28.023267" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:28.023335" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:28.013043" elapsed="0.010401">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:28.012761" elapsed="0.010751">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:28.012616" elapsed="0.010951">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:28.012213" elapsed="0.011440">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:28.023890" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:27.982231" elapsed="0.041791">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:30.052651" elapsed="0.000237"/>
</kw>
<msg time="2026-04-25T01:13:30.052954" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:30.051990" elapsed="0.001064"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:30.051508" elapsed="0.001636"/>
</kw>
<msg time="2026-04-25T01:13:30.053191" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:30.042980" elapsed="0.010256"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:30.042539" elapsed="0.010772"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:30.053771" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:30.053513" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:30.059227" 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-25T01:13:30.058827" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:30.059700" 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-25T01:13:30.059415" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:30.059773" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:13:30.059929" 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-25T01:13:30.058454" elapsed="0.001499"/>
</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-25T01:13:30.060126" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:30.060770" level="INFO">${ds_type} = operational</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-25T01:13:30.060440" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:30.061227" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:30.060988" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:30.061640" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:30.061399" elapsed="0.000266"/>
</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-25T01:13:30.062072" elapsed="0.000030"/>
</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-25T01:13:30.062414" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:30.062189" elapsed="0.000283"/>
</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-25T01:13:30.062643" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:30.062496" elapsed="0.000201"/>
</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-25T01:13:30.062864" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:30.062721" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:30.062169" elapsed="0.000770"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:30.061888" elapsed="0.001088"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:30.061710" elapsed="0.001294"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:30.063044" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:30.063244" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:30.063290" 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-25T01:13:30.057720" elapsed="0.005592"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:30.063759" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:30.063834" 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-25T01:13:30.063487" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:30.064585" 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-25T01:13:30.064159" elapsed="0.000500">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:30.063926" elapsed="0.000828">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:30.063908" elapsed="0.000879">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-25T01:13:30.064959" elapsed="0.000035"/>
</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-25T01:13:30.065151" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:30.065217" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:30.054903" elapsed="0.010421">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:30.054610" elapsed="0.010782">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:30.054468" elapsed="0.010979">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:30.054067" elapsed="0.011467">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:30.065768" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:30.024807" elapsed="0.041078">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:32.094454" elapsed="0.000286"/>
</kw>
<msg time="2026-04-25T01:13:32.094804" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:32.093713" elapsed="0.001153"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:32.093153" elapsed="0.001794"/>
</kw>
<msg time="2026-04-25T01:13:32.095013" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:32.084132" elapsed="0.010928"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:32.083691" elapsed="0.011446"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:32.095753" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:32.095361" elapsed="0.000441"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:32.101236" 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-25T01:13:32.100775" elapsed="0.000489"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:32.101743" 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-25T01:13:32.101431" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:32.101817" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:13:32.102003" 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-25T01:13:32.100393" elapsed="0.001637"/>
</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-25T01:13:32.102251" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:32.102915" level="INFO">${ds_type} = operational</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-25T01:13:32.102577" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:32.103359" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:32.103119" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:32.103768" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:32.103533" elapsed="0.000260"/>
</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-25T01:13:32.104214" elapsed="0.000025"/>
</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-25T01:13:32.104474" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:32.104326" elapsed="0.000203"/>
</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-25T01:13:32.104692" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:32.104553" elapsed="0.000192"/>
</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-25T01:13:32.104909" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:32.104768" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:32.104306" elapsed="0.000692"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:32.104043" elapsed="0.000979"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:32.103839" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:32.105088" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:32.105286" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:32.105332" 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-25T01:13:32.099652" elapsed="0.005703"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:32.105830" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:32.105910" 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-25T01:13:32.105538" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:32.106732" 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-25T01:13:32.106442" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:32.106211" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:32.106010" elapsed="0.000896">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-25T01:13:32.107080" elapsed="0.000024"/>
</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-25T01:13:32.107261" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:32.107328" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:32.096939" elapsed="0.010496">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:32.096701" elapsed="0.010848">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:32.096556" elapsed="0.011050">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:32.096069" elapsed="0.011628">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:32.107936" elapsed="0.000038"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:32.066753" elapsed="0.041325">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:34.140466" elapsed="0.000274"/>
</kw>
<msg time="2026-04-25T01:13:34.140809" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:34.139699" elapsed="0.001175"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:34.139192" elapsed="0.001788"/>
</kw>
<msg time="2026-04-25T01:13:34.141030" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:34.130304" elapsed="0.010772"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:34.129704" elapsed="0.011446"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:34.141612" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:34.141351" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:34.147420" 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-25T01:13:34.146980" elapsed="0.000469"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:34.147924" 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-25T01:13:34.147629" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:34.148017" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:13:34.148201" 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-25T01:13:34.146580" elapsed="0.001647"/>
</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-25T01:13:34.148388" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:34.149118" level="INFO">${ds_type} = operational</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-25T01:13:34.148747" elapsed="0.000399"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:34.149583" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:34.149333" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:34.150021" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:34.149760" elapsed="0.000288"/>
</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-25T01:13:34.150457" elapsed="0.000026"/>
</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-25T01:13:34.150719" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:34.150570" elapsed="0.000220"/>
</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-25T01:13:34.150984" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:34.150822" elapsed="0.000218"/>
</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-25T01:13:34.151207" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:34.151063" elapsed="0.000277"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:34.150549" elapsed="0.000816"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:34.150287" elapsed="0.001102"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:34.150100" elapsed="0.001315"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:34.151455" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:13:34.151696" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:34.151756" 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-25T01:13:34.145832" elapsed="0.005956"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:34.152378" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:34.152528" 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-25T01:13:34.152048" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:34.153189" 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-25T01:13:34.152857" elapsed="0.000432">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:34.152631" elapsed="0.000744">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:34.152611" elapsed="0.000805">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-25T01:13:34.153616" elapsed="0.000026"/>
</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-25T01:13:34.153800" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:34.153867" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:34.142789" elapsed="0.011216">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:34.142550" elapsed="0.011544">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:34.142404" elapsed="0.011748">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:34.141993" elapsed="0.012265">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:34.154530" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:34.109780" elapsed="0.044907">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:36.189748" elapsed="0.000697"/>
</kw>
<msg time="2026-04-25T01:13:36.190592" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:36.187096" elapsed="0.003651"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:36.186096" elapsed="0.005142"/>
</kw>
<msg time="2026-04-25T01:13:36.191379" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:36.174089" elapsed="0.017405"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:36.173214" elapsed="0.018468"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:36.192796" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:36.192183" elapsed="0.000718"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:36.204331" 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-25T01:13:36.203836" elapsed="0.000527"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:36.204981" 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-25T01:13:36.204656" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:36.205064" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T01:13:36.205251" 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-25T01:13:36.203415" elapsed="0.001861"/>
</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-25T01:13:36.205441" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:36.206150" level="INFO">${ds_type} = operational</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-25T01:13:36.205785" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:36.206582" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:36.206339" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:36.207027" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:36.206759" elapsed="0.000295"/>
</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-25T01:13:36.207502" 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-25T01:13:36.207785" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:36.207625" elapsed="0.000217"/>
</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-25T01:13:36.208027" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:36.207869" elapsed="0.000214"/>
</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-25T01:13:36.208254" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:36.208107" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:36.207600" elapsed="0.000728"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:36.207323" elapsed="0.001030"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:36.207112" elapsed="0.001272"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:36.208426" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:13:36.208675" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:36.208724" 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-25T01:13:36.201902" elapsed="0.006845"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:36.209253" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:36.209335" 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-25T01:13:36.208929" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:36.210294" 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-25T01:13:36.209983" elapsed="0.000394">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:36.209727" elapsed="0.000725">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:36.209412" elapsed="0.001072">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-25T01:13:36.210643" elapsed="0.000022"/>
</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-25T01:13:36.210820" elapsed="0.000031"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:36.210897" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:36.195510" elapsed="0.015542">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:36.194893" elapsed="0.016231">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:36.194556" elapsed="0.016625">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:36.193518" elapsed="0.017752">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:36.211517" elapsed="0.000065"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:36.155633" elapsed="0.056050">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:38.241369" elapsed="0.000237"/>
</kw>
<msg time="2026-04-25T01:13:38.241672" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:38.240683" elapsed="0.001050"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:38.240192" elapsed="0.001623"/>
</kw>
<msg time="2026-04-25T01:13:38.241863" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:38.231355" elapsed="0.010554"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:38.230745" elapsed="0.011255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:38.242459" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:38.242196" elapsed="0.000451"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:38.248048" 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-25T01:13:38.247638" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:38.248527" 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-25T01:13:38.248239" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:38.248601" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:13:38.248760" 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-25T01:13:38.247250" elapsed="0.001534"/>
</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-25T01:13:38.248939" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:38.249607" level="INFO">${ds_type} = operational</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-25T01:13:38.249270" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:38.250048" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:38.249793" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:38.250464" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:38.250224" elapsed="0.000265"/>
</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-25T01:13:38.250889" 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-25T01:13:38.251168" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:38.251016" elapsed="0.000208"/>
</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-25T01:13:38.251391" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:38.251249" elapsed="0.000195"/>
</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-25T01:13:38.251619" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:38.251467" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:38.250994" elapsed="0.000701"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:38.250719" elapsed="0.001001"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:38.250536" elapsed="0.001208"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:38.251782" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:38.252002" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:38.252049" 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-25T01:13:38.246513" elapsed="0.005559"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:38.252583" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:38.252661" 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-25T01:13:38.252307" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:38.253271" 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-25T01:13:38.252989" elapsed="0.000355">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:38.252755" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:38.252736" elapsed="0.000708">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-25T01:13:38.253598" elapsed="0.000022"/>
</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-25T01:13:38.253774" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:38.253840" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:38.243699" elapsed="0.010248">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:38.243438" elapsed="0.010595">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:38.243297" elapsed="0.010792">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:38.242881" elapsed="0.011298">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:38.254415" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:38.212659" elapsed="0.041872">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:40.283600" elapsed="0.000271"/>
</kw>
<msg time="2026-04-25T01:13:40.283943" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:40.282911" elapsed="0.001116"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:40.282420" elapsed="0.001693"/>
</kw>
<msg time="2026-04-25T01:13:40.284161" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:40.273611" elapsed="0.010596"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:40.273085" elapsed="0.011201"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:40.284800" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:40.284507" elapsed="0.000339"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:40.290197" 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-25T01:13:40.289765" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:40.290703" 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-25T01:13:40.290390" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:40.290780" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:13:40.290945" 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-25T01:13:40.289382" elapsed="0.001604"/>
</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-25T01:13:40.291243" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:40.291952" level="INFO">${ds_type} = operational</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-25T01:13:40.291578" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:40.292411" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:40.292163" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:40.292859" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:40.292611" elapsed="0.000275"/>
</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-25T01:13:40.293321" elapsed="0.000025"/>
</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-25T01:13:40.293586" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:40.293436" elapsed="0.000206"/>
</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-25T01:13:40.293811" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:40.293668" elapsed="0.000197"/>
</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-25T01:13:40.294048" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:40.293889" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:40.293415" elapsed="0.000712"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:40.293147" elapsed="0.001008"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:40.292935" elapsed="0.001245"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:40.294221" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:13:40.294426" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:40.294473" 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-25T01:13:40.288636" elapsed="0.005860"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:40.295216" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:40.295298" 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-25T01:13:40.294670" elapsed="0.000652"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:40.295941" 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-25T01:13:40.295614" elapsed="0.000428">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:40.295393" elapsed="0.000721">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:40.295374" elapsed="0.000772">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-25T01:13:40.296304" elapsed="0.000023"/>
</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-25T01:13:40.296482" elapsed="0.000041"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:40.296594" elapsed="0.000024"/>
</return>
<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>
<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-25T01:13:40.285911" elapsed="0.010812">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:40.285669" elapsed="0.011127">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:40.285521" elapsed="0.011333">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:40.285112" elapsed="0.011833">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:40.297215" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:40.255469" elapsed="0.041885">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:42.329787" elapsed="0.000350"/>
</kw>
<msg time="2026-04-25T01:13:42.330204" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:42.329121" elapsed="0.001147"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:42.328611" elapsed="0.001737"/>
</kw>
<msg time="2026-04-25T01:13:42.330396" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:42.318465" elapsed="0.011977"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:42.317505" elapsed="0.013012"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:42.330997" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:42.330719" elapsed="0.000325"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:42.337072" 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-25T01:13:42.336462" elapsed="0.000648"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:42.337573" 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-25T01:13:42.337284" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:42.337647" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:42.337807" 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-25T01:13:42.335917" elapsed="0.001915"/>
</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-25T01:13:42.338003" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:42.338661" level="INFO">${ds_type} = operational</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-25T01:13:42.338325" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:42.339103" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:42.338847" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:42.339513" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:42.339277" elapsed="0.000261"/>
</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-25T01:13:42.339939" elapsed="0.000038"/>
</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-25T01:13:42.340212" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:42.340064" elapsed="0.000203"/>
</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-25T01:13:42.340432" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:42.340292" elapsed="0.000193"/>
</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-25T01:13:42.340649" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:42.340508" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:42.340043" elapsed="0.000679"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:42.339770" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:42.339585" elapsed="0.001186"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:42.340810" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:13:42.341044" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:42.341090" 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-25T01:13:42.334952" elapsed="0.006161"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:42.341560" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:42.341637" 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-25T01:13:42.341286" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:42.342290" 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-25T01:13:42.342005" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:42.341769" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:42.341749" elapsed="0.000715">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-25T01:13:42.342618" elapsed="0.000022"/>
</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-25T01:13:42.342792" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:42.342858" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:42.332151" elapsed="0.010825">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:42.331897" elapsed="0.011150">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:42.331754" elapsed="0.011347">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:42.331354" elapsed="0.011835">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:42.343424" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:42.298303" elapsed="0.045236">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:44.370157" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:13:44.370467" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:44.369487" elapsed="0.001042"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:44.369012" elapsed="0.001595"/>
</kw>
<msg time="2026-04-25T01:13:44.370653" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:44.360346" elapsed="0.010350"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:44.359901" elapsed="0.010868"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:44.371235" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:44.370978" elapsed="0.000301"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:44.376500" 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-25T01:13:44.376101" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:44.376991" 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-25T01:13:44.376689" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:44.377065" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:44.377223" 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-25T01:13:44.375663" elapsed="0.001585"/>
</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-25T01:13:44.377403" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:44.378064" level="INFO">${ds_type} = operational</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-25T01:13:44.377717" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:44.378483" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:44.378248" elapsed="0.000260"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:44.378986" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:44.378732" elapsed="0.000282"/>
</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-25T01:13:44.379468" elapsed="0.000025"/>
</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-25T01:13:44.379727" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:44.379579" elapsed="0.000218"/>
</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-25T01:13:44.379980" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:44.379822" elapsed="0.000215"/>
</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-25T01:13:44.380205" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:44.380061" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:44.379559" elapsed="0.000720"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:44.379299" elapsed="0.001004"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:44.379060" elapsed="0.001270"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:44.380370" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:13:44.380585" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:44.380632" 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-25T01:13:44.374934" elapsed="0.005721"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:44.381293" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:44.381372" 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-25T01:13:44.380829" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:44.381958" 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-25T01:13:44.381683" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:44.381465" elapsed="0.000648">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:44.381447" elapsed="0.000698">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-25T01:13:44.382299" elapsed="0.000022"/>
</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-25T01:13:44.382476" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:44.382543" elapsed="0.000016"/>
</return>
<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>
<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-25T01:13:44.372322" elapsed="0.010327">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:44.372082" elapsed="0.010636">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:44.371921" elapsed="0.010852">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:44.371507" elapsed="0.011363">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:44.383135" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:44.344447" elapsed="0.038809">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:46.410165" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:13:46.410476" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:46.409491" elapsed="0.001049"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:46.409020" elapsed="0.001599"/>
</kw>
<msg time="2026-04-25T01:13:46.410746" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:46.400393" elapsed="0.010404"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:46.399975" elapsed="0.010899"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:46.411346" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:46.411088" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:46.416765" 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-25T01:13:46.416354" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:46.417258" 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-25T01:13:46.416954" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:46.417332" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:13:46.417490" 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-25T01:13:46.415978" elapsed="0.001536"/>
</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-25T01:13:46.417669" elapsed="0.000152"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:46.418333" level="INFO">${ds_type} = operational</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-25T01:13:46.417999" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:46.418765" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:46.418518" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:46.419192" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:46.418938" elapsed="0.000279"/>
</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-25T01:13:46.419612" 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-25T01:13:46.419872" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:46.419723" elapsed="0.000204"/>
</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-25T01:13:46.420112" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:46.419952" elapsed="0.000214"/>
</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-25T01:13:46.420330" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:46.420189" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:46.419702" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:46.419444" elapsed="0.000984"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:46.419262" elapsed="0.001192"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:46.420493" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:13:46.420726" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:46.420772" 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-25T01:13:46.415247" elapsed="0.005548"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:46.421258" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:46.421335" 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-25T01:13:46.420985" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:46.421923" 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-25T01:13:46.421647" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:46.421429" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:46.421410" elapsed="0.000703">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-25T01:13:46.422269" elapsed="0.000022"/>
</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-25T01:13:46.422481" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:46.422549" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:46.412425" elapsed="0.010230">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:46.412187" elapsed="0.010537">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:46.412038" elapsed="0.010740">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:46.411624" elapsed="0.011242">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:46.423122" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:46.384174" elapsed="0.039065">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:48.450730" elapsed="0.000270"/>
</kw>
<msg time="2026-04-25T01:13:48.451069" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:48.450070" elapsed="0.001062"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:48.449587" elapsed="0.001624"/>
</kw>
<msg time="2026-04-25T01:13:48.451258" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:48.440920" elapsed="0.010382"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:48.440496" elapsed="0.010879"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:48.451829" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:48.451573" elapsed="0.000300"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:48.457067" 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-25T01:13:48.456654" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:48.457555" 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-25T01:13:48.457263" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:48.457629" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:48.457787" 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-25T01:13:48.456280" elapsed="0.001532"/>
</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-25T01:13:48.457983" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:48.458638" level="INFO">${ds_type} = operational</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-25T01:13:48.458306" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:48.459093" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:48.458822" elapsed="0.000296"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:48.459506" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:48.459271" elapsed="0.000260"/>
</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-25T01:13:48.459929" 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-25T01:13:48.460279" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:48.460060" elapsed="0.000276"/>
</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-25T01:13:48.460502" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:48.460361" elapsed="0.000196"/>
</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-25T01:13:48.460722" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:48.460579" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:48.460039" elapsed="0.000756"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:48.459762" elapsed="0.001057"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:48.459578" elapsed="0.001267"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:48.460885" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:13:48.461099" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:48.461145" 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-25T01:13:48.455545" elapsed="0.005622"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:48.461611" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:48.461689" 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-25T01:13:48.461339" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:48.462500" 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-25T01:13:48.462203" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:48.461959" elapsed="0.000681">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:48.461764" elapsed="0.000908">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-25T01:13:48.462827" elapsed="0.000022"/>
</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-25T01:13:48.463038" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:48.463106" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:48.452892" elapsed="0.010321">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:48.452659" elapsed="0.010624">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:48.452515" elapsed="0.010824">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:48.452118" elapsed="0.011310">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:48.463664" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:48.424184" elapsed="0.039599">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:50.493829" elapsed="0.000253"/>
</kw>
<msg time="2026-04-25T01:13:50.494145" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:50.493168" elapsed="0.001037"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:50.492687" elapsed="0.001597"/>
</kw>
<msg time="2026-04-25T01:13:50.494353" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:50.484085" elapsed="0.010313"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:50.483652" elapsed="0.010821"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:50.495022" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:50.494669" elapsed="0.000400"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:50.500679" 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-25T01:13:50.500285" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:50.501175" 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-25T01:13:50.500868" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:50.501249" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:13:50.501405" 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-25T01:13:50.499885" elapsed="0.001544"/>
</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-25T01:13:50.501584" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:50.502248" level="INFO">${ds_type} = operational</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-25T01:13:50.501898" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:50.502701" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:50.502454" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:50.503130" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:50.502874" elapsed="0.000281"/>
</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-25T01:13:50.503549" elapsed="0.000025"/>
</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-25T01:13:50.503808" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:50.503659" elapsed="0.000205"/>
</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-25T01:13:50.504044" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:50.503888" elapsed="0.000212"/>
</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-25T01:13:50.504265" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:50.504122" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:50.503640" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:50.503382" elapsed="0.000979"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:50.503201" elapsed="0.001187"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:50.504427" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:13:50.504626" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:50.504672" 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-25T01:13:50.499164" elapsed="0.005532"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:50.505162" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:50.505239" 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-25T01:13:50.504871" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:50.505839" 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-25T01:13:50.505551" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:50.505332" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:50.505314" elapsed="0.000715">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-25T01:13:50.506184" elapsed="0.000022"/>
</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-25T01:13:50.506376" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:50.506444" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:50.496087" elapsed="0.010464">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:50.495839" elapsed="0.010836">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:50.495697" elapsed="0.011035">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:50.495302" elapsed="0.011520">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:50.507077" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:50.464868" elapsed="0.042326">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:52.538002" elapsed="0.000237"/>
</kw>
<msg time="2026-04-25T01:13:52.538301" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:52.537328" elapsed="0.001034"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:52.536842" elapsed="0.001600"/>
</kw>
<msg time="2026-04-25T01:13:52.538489" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:52.528069" elapsed="0.010470"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:52.527623" elapsed="0.011028"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:52.539129" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:52.538851" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:52.544395" 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-25T01:13:52.544005" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:52.544876" 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-25T01:13:52.544586" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:52.544950" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:13:52.545127" 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-25T01:13:52.543613" elapsed="0.001539"/>
</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-25T01:13:52.545309" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:52.545998" level="INFO">${ds_type} = operational</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-25T01:13:52.545629" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:52.546475" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:52.546201" elapsed="0.000305"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:52.546942" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:52.546693" elapsed="0.000295"/>
</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-25T01:13:52.547412" elapsed="0.000025"/>
</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-25T01:13:52.547678" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:52.547526" elapsed="0.000210"/>
</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-25T01:13:52.547905" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:52.547760" elapsed="0.000219"/>
</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-25T01:13:52.548165" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:52.548013" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:52.547505" elapsed="0.000805"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:52.547237" elapsed="0.001098"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:52.547047" elapsed="0.001314"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:52.548403" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:13:52.548610" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:52.548657" 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-25T01:13:52.542877" elapsed="0.005804"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:52.549181" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:52.549262" 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-25T01:13:52.548860" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:52.550120" 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-25T01:13:52.549805" elapsed="0.000389">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:52.549545" elapsed="0.000719">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:52.549341" elapsed="0.000956">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-25T01:13:52.550454" elapsed="0.000023"/>
</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-25T01:13:52.550651" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:52.550720" elapsed="0.000017"/>
</return>
<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>
<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-25T01:13:52.540202" elapsed="0.010629">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:52.539948" elapsed="0.010955">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:52.539804" elapsed="0.011175">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:52.539408" elapsed="0.011676">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:52.551336" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:52.508066" elapsed="0.043393">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:54.590454" elapsed="0.000276"/>
</kw>
<msg time="2026-04-25T01:13:54.590823" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:54.589683" elapsed="0.001225"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:54.589070" elapsed="0.001953"/>
</kw>
<msg time="2026-04-25T01:13:54.591076" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:54.579625" elapsed="0.011498"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:54.578689" elapsed="0.012514"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:54.591745" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:54.591465" elapsed="0.000330"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:54.597979" 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-25T01:13:54.597478" elapsed="0.000544"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:54.598637" 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-25T01:13:54.598311" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:54.598717" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T01:13:54.598901" 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-25T01:13:54.597052" elapsed="0.001874"/>
</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-25T01:13:54.599125" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:54.599872" level="INFO">${ds_type} = operational</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-25T01:13:54.599522" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:54.600362" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:54.600083" elapsed="0.000306"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:54.600790" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:54.600545" elapsed="0.000270"/>
</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-25T01:13:54.601270" elapsed="0.000033"/>
</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-25T01:13:54.601562" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:54.601408" 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-25T01:13:54.601789" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:54.601645" elapsed="0.000198"/>
</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-25T01:13:54.602028" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:54.601867" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:54.601383" elapsed="0.000723"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:54.601087" elapsed="0.001044"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:54.600869" elapsed="0.001290"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:54.602209" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:13:54.602449" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:54.602499" 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-25T01:13:54.596253" elapsed="0.006276"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:54.603052" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:54.603133" 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-25T01:13:54.602733" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:54.603821" 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-25T01:13:54.603515" elapsed="0.000381">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:54.603250" elapsed="0.000733">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:54.603229" elapsed="0.000789">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-25T01:13:54.604177" elapsed="0.000023"/>
</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-25T01:13:54.604356" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:54.604422" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:54.592992" elapsed="0.011538">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:54.592717" elapsed="0.011884">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:54.592547" elapsed="0.012111">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:54.592094" elapsed="0.012654">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:54.605022" elapsed="0.000070"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:54.552604" elapsed="0.052589">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:56.633575" elapsed="0.000241"/>
</kw>
<msg time="2026-04-25T01:13:56.633883" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:56.632845" elapsed="0.001100"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:56.632373" elapsed="0.001670"/>
</kw>
<msg time="2026-04-25T01:13:56.634090" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:56.623572" elapsed="0.010563"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:56.623146" elapsed="0.011063"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:56.634666" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:56.634410" elapsed="0.000301"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:56.640034" 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-25T01:13:56.639623" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:56.640511" 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-25T01:13:56.640224" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:56.640585" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:13:56.640743" 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-25T01:13:56.639224" elapsed="0.001543"/>
</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-25T01:13:56.640975" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:56.641631" level="INFO">${ds_type} = operational</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-25T01:13:56.641295" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:56.642099" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:56.641816" elapsed="0.000310"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:56.642523" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:56.642280" elapsed="0.000269"/>
</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-25T01:13:56.642950" elapsed="0.000044"/>
</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-25T01:13:56.643231" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:56.643082" elapsed="0.000205"/>
</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-25T01:13:56.643457" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:56.643312" elapsed="0.000200"/>
</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-25T01:13:56.643707" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:56.643535" elapsed="0.000225"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:56.643062" elapsed="0.000722"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:56.642780" elapsed="0.001028"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:56.642595" elapsed="0.001238"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:56.643873" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:13:56.644090" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:56.644137" 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-25T01:13:56.638482" elapsed="0.005679"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:56.644915" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:56.645014" 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-25T01:13:56.644403" elapsed="0.000637"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:56.645642" 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-25T01:13:56.645359" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:56.645113" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:56.645094" elapsed="0.000720">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-25T01:13:56.646002" elapsed="0.000023"/>
</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-25T01:13:56.646181" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:56.646247" elapsed="0.000015"/>
</return>
<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>
<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-25T01:13:56.635766" elapsed="0.010588">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:56.635529" elapsed="0.010893">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:56.635374" elapsed="0.011102">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:56.634961" elapsed="0.011603">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:56.646821" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:56.606102" elapsed="0.040853">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:13:58.676135" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:13:58.676442" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:58.675396" elapsed="0.001109"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:58.674779" elapsed="0.001807"/>
</kw>
<msg time="2026-04-25T01:13:58.676634" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:13:58.665874" elapsed="0.010804"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:13:58.665300" elapsed="0.011453"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:13:58.677267" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:13:58.677002" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:13:58.682846" 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-25T01:13:58.682380" elapsed="0.000495"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:58.683350" 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-25T01:13:58.683058" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:13:58.683424" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:13:58.683588" 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-25T01:13:58.681980" elapsed="0.001631"/>
</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-25T01:13:58.683847" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:13:58.684548" level="INFO">${ds_type} = operational</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-25T01:13:58.684200" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:58.684996" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:58.684737" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:13:58.685417" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:13:58.685176" elapsed="0.000266"/>
</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-25T01:13:58.685869" 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-25T01:13:58.686149" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:58.685997" elapsed="0.000209"/>
</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-25T01:13:58.686374" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:58.686231" elapsed="0.000197"/>
</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-25T01:13:58.686594" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:13:58.686452" elapsed="0.000236"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:13:58.685975" elapsed="0.000736"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:13:58.685691" elapsed="0.001043"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:58.685493" elapsed="0.001267"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:13:58.686800" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:13:58.687019" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:13:58.687067" 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-25T01:13:58.681236" elapsed="0.005854"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:13:58.687548" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:13:58.687626" 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-25T01:13:58.687265" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:13:58.688286" 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-25T01:13:58.687994" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:13:58.687720" elapsed="0.000709">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:13:58.687701" elapsed="0.000760">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-25T01:13:58.688635" elapsed="0.000023"/>
</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-25T01:13:58.688815" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:13:58.688882" elapsed="0.000017"/>
</return>
<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>
<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-25T01:13:58.678360" elapsed="0.010647">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:13:58.678123" elapsed="0.010957">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:13:58.677960" elapsed="0.011176">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:13:58.677559" elapsed="0.011668">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:13:58.689478" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:13:58.647867" elapsed="0.041730">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:00.718545" elapsed="0.000321"/>
</kw>
<msg time="2026-04-25T01:14:00.718934" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:00.717860" elapsed="0.001151"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:00.717372" elapsed="0.001724"/>
</kw>
<msg time="2026-04-25T01:14:00.719144" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:00.707845" elapsed="0.011343"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:00.707411" elapsed="0.011851"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:00.719720" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:00.719458" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:00.725060" 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-25T01:14:00.724612" elapsed="0.000476"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:00.725545" 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-25T01:14:00.725253" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:00.725619" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:14:00.725777" 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-25T01:14:00.724235" elapsed="0.001566"/>
</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-25T01:14:00.725975" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:00.726632" level="INFO">${ds_type} = operational</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-25T01:14:00.726296" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:00.727072" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:00.726817" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:00.727491" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:00.727247" elapsed="0.000269"/>
</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-25T01:14:00.727914" elapsed="0.000025"/>
</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-25T01:14:00.728195" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:00.728045" elapsed="0.000204"/>
</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-25T01:14:00.728415" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:00.728274" elapsed="0.000193"/>
</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-25T01:14:00.728638" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:00.728491" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:00.728024" elapsed="0.000704"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:00.727746" elapsed="0.001006"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:00.727563" elapsed="0.001214"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:00.728817" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:14:00.729033" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:00.729080" 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-25T01:14:00.723499" elapsed="0.005604"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:00.729734" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:00.729813" 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-25T01:14:00.729277" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:00.730472" 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-25T01:14:00.730189" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:00.729950" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:00.729930" elapsed="0.000715">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-25T01:14:00.730800" elapsed="0.000022"/>
</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-25T01:14:00.730990" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:00.731059" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:00.720848" elapsed="0.010317">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:00.720586" elapsed="0.010649">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:00.720438" elapsed="0.010852">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:00.720017" elapsed="0.011361">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:00.731613" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:00.690550" elapsed="0.041181">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:02.760598" elapsed="0.000250"/>
</kw>
<msg time="2026-04-25T01:14:02.760918" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:02.759913" elapsed="0.001075"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:02.759408" elapsed="0.001678"/>
</kw>
<msg time="2026-04-25T01:14:02.761132" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:02.750617" elapsed="0.010561"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:02.750175" elapsed="0.011078"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:02.761715" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:02.761455" elapsed="0.000304"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:02.767382" 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-25T01:14:02.766946" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:02.767946" 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-25T01:14:02.767577" elapsed="0.000397"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:02.768053" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:14:02.768234" 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-25T01:14:02.766565" elapsed="0.001695"/>
</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-25T01:14:02.768418" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:02.769125" level="INFO">${ds_type} = operational</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-25T01:14:02.768755" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:02.769618" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:02.769313" elapsed="0.000333"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:02.770172" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:02.769871" elapsed="0.000328"/>
</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-25T01:14:02.770604" elapsed="0.000026"/>
</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-25T01:14:02.770872" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:02.770719" elapsed="0.000209"/>
</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-25T01:14:02.771116" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:02.770954" elapsed="0.000219"/>
</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-25T01:14:02.771351" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:02.771197" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:02.770699" elapsed="0.000730"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:02.770433" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:02.770248" elapsed="0.001231"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:02.771521" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:02.771726" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:02.771773" 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-25T01:14:02.765821" elapsed="0.005978"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:02.772359" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:02.772439" 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-25T01:14:02.772068" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:02.773056" 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-25T01:14:02.772755" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:02.772534" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:02.772515" elapsed="0.000719">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-25T01:14:02.773390" elapsed="0.000022"/>
</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-25T01:14:02.773568" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:02.773633" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:02.762798" elapsed="0.010942">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:02.762560" elapsed="0.011249">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:02.762415" elapsed="0.011449">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:02.762010" elapsed="0.011942">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:02.774206" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:02.732871" elapsed="0.041457">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:04.802794" elapsed="0.000278"/>
</kw>
<msg time="2026-04-25T01:14:04.803161" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:04.802069" elapsed="0.001174"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:04.801570" elapsed="0.001788"/>
</kw>
<msg time="2026-04-25T01:14:04.803482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:04.792692" elapsed="0.010839"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:04.792225" elapsed="0.011383"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:04.804091" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:04.803805" elapsed="0.000333"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:04.809524" 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-25T01:14:04.809126" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:04.810026" 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-25T01:14:04.809714" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:04.810106" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:14:04.810294" 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-25T01:14:04.808720" elapsed="0.001600"/>
</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-25T01:14:04.810503" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:04.811196" level="INFO">${ds_type} = operational</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-25T01:14:04.810832" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:04.811678" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:04.811425" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:04.812191" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:04.811858" elapsed="0.000362"/>
</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-25T01:14:04.812626" elapsed="0.000025"/>
</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-25T01:14:04.812892" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:04.812740" elapsed="0.000209"/>
</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-25T01:14:04.813157" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:04.812979" elapsed="0.000245"/>
</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-25T01:14:04.813402" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:04.813249" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:04.812720" elapsed="0.000759"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:04.812455" elapsed="0.001048"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:04.812269" elapsed="0.001260"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:04.813568" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:04.813774" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:04.813821" 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-25T01:14:04.807954" elapsed="0.005891"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:04.814343" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:04.814426" 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-25T01:14:04.814040" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:04.815394" 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-25T01:14:04.815084" elapsed="0.000386">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:04.814801" elapsed="0.000740">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:04.814563" elapsed="0.001012">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-25T01:14:04.815807" elapsed="0.000033"/>
</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-25T01:14:04.816136" elapsed="0.000032"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:04.816232" elapsed="0.000021"/>
</return>
<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>
<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-25T01:14:04.805182" elapsed="0.011197">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:04.804924" elapsed="0.011539">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:04.804781" elapsed="0.011742">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:04.804376" elapsed="0.012245">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:04.816893" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:04.775590" elapsed="0.041448">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:06.844187" elapsed="0.000322"/>
</kw>
<msg time="2026-04-25T01:14:06.844583" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:06.843443" elapsed="0.001210"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:06.842817" elapsed="0.001920"/>
</kw>
<msg time="2026-04-25T01:14:06.844784" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:06.833610" elapsed="0.011220"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:06.833129" elapsed="0.011777"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:06.845433" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:06.845133" elapsed="0.000347"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:06.851133" 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-25T01:14:06.850714" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:06.851631" 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-25T01:14:06.851331" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:06.851707" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:14:06.851870" 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-25T01:14:06.850327" elapsed="0.001569"/>
</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-25T01:14:06.852076" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:06.852850" level="INFO">${ds_type} = operational</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-25T01:14:06.852407" elapsed="0.000471"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:06.853327" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:06.853072" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:06.853889" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:06.853509" elapsed="0.000407"/>
</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-25T01:14:06.854350" elapsed="0.000026"/>
</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-25T01:14:06.854694" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:06.854464" elapsed="0.000290"/>
</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-25T01:14:06.854928" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:06.854781" elapsed="0.000220"/>
</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-25T01:14:06.855176" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:06.855028" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:06.854443" elapsed="0.000809"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:06.854171" elapsed="0.001105"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:06.853967" elapsed="0.001337"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:06.855345" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:14:06.855552" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:06.855599" 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-25T01:14:06.849573" elapsed="0.006050"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:06.856104" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:06.856184" 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-25T01:14:06.855801" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:06.856842" 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-25T01:14:06.856508" elapsed="0.000408">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:06.856282" elapsed="0.000721">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:06.856263" elapsed="0.000775">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-25T01:14:06.857227" elapsed="0.000028"/>
</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-25T01:14:06.857418" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:06.857486" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:06.846570" elapsed="0.011027">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:06.846322" elapsed="0.011346">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:06.846173" elapsed="0.011554">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:06.845743" elapsed="0.012075">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:06.858079" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:06.818031" elapsed="0.040170">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:08.886531" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:14:08.886845" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:08.885840" elapsed="0.001069"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:08.885358" elapsed="0.001650"/>
</kw>
<msg time="2026-04-25T01:14:08.887057" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:08.876534" elapsed="0.010569"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:08.876073" elapsed="0.011106"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:08.887754" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:08.887384" elapsed="0.000418"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:08.893070" 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-25T01:14:08.892618" elapsed="0.000481"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:08.893562" 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-25T01:14:08.893264" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:08.893638" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:14:08.893798" 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-25T01:14:08.892240" elapsed="0.001583"/>
</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-25T01:14:08.893997" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:08.894660" level="INFO">${ds_type} = operational</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-25T01:14:08.894319" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:08.895108" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:08.894847" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:08.895524" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:08.895287" 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-25T01:14:08.895959" elapsed="0.000040"/>
</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-25T01:14:08.896239" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:08.896090" elapsed="0.000206"/>
</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-25T01:14:08.896469" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:08.896325" elapsed="0.000198"/>
</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-25T01:14:08.896690" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:08.896547" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:08.896069" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:08.895784" elapsed="0.001004"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:08.895596" elapsed="0.001219"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:08.896856" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:14:08.897099" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:08.897147" 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-25T01:14:08.891499" elapsed="0.005672"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:08.897634" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:08.897714" 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-25T01:14:08.897352" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:08.898568" 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-25T01:14:08.898278" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:08.898045" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:08.897788" elapsed="0.000952">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-25T01:14:08.898898" elapsed="0.000022"/>
</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-25T01:14:08.899092" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:08.899161" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:08.888871" elapsed="0.010397">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:08.888615" elapsed="0.010794">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:08.888471" elapsed="0.010996">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:08.888063" elapsed="0.011495">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:08.899803" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:08.859138" elapsed="0.040785">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:10.926921" elapsed="0.000260"/>
</kw>
<msg time="2026-04-25T01:14:10.927249" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:10.926246" elapsed="0.001070"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:10.925709" elapsed="0.001696"/>
</kw>
<msg time="2026-04-25T01:14:10.927453" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:10.916754" elapsed="0.010744"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:10.916281" elapsed="0.011292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:10.928087" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:10.927771" elapsed="0.000362"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:10.933709" 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-25T01:14:10.933306" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:10.934249" 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-25T01:14:10.933905" elapsed="0.000370"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:10.934323" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:14:10.934482" 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-25T01:14:10.932871" elapsed="0.001635"/>
</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-25T01:14:10.934662" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:10.935332" level="INFO">${ds_type} = operational</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-25T01:14:10.934995" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:10.935756" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:10.935518" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:10.936184" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:10.935929" elapsed="0.000280"/>
</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-25T01:14:10.936606" 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-25T01:14:10.936865" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:10.936716" elapsed="0.000205"/>
</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-25T01:14:10.937104" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:10.936947" elapsed="0.000212"/>
</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-25T01:14:10.937322" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:10.937182" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:10.936696" elapsed="0.000779"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:10.936437" elapsed="0.001063"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:10.936255" elapsed="0.001271"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:10.937567" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:10.937769" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:10.937814" 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-25T01:14:10.932096" elapsed="0.005742"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:10.938326" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:10.938407" 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-25T01:14:10.938040" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:10.939011" 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-25T01:14:10.938716" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:10.938501" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:10.938482" elapsed="0.000704">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-25T01:14:10.939341" 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-25T01:14:10.939515" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:10.939581" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:10.929250" elapsed="0.010437">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:10.929007" elapsed="0.010748">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:10.928842" elapsed="0.010968">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:10.928370" elapsed="0.011529">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:10.940152" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:10.900879" elapsed="0.039391">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:12.967559" elapsed="0.000259"/>
</kw>
<msg time="2026-04-25T01:14:12.967887" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:12.966877" elapsed="0.001075"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:12.966381" elapsed="0.001673"/>
</kw>
<msg time="2026-04-25T01:14:12.968102" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:12.957603" elapsed="0.010544"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:12.957005" elapsed="0.011217"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:12.968682" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:12.968421" elapsed="0.000316"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:12.974234" 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-25T01:14:12.973819" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:12.974811" 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-25T01:14:12.974500" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:12.974888" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:14:12.975071" 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-25T01:14:12.973423" elapsed="0.001673"/>
</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-25T01:14:12.975254" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:12.975931" level="INFO">${ds_type} = operational</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-25T01:14:12.975581" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:12.976379" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:12.976138" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:12.976789" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:12.976554" elapsed="0.000261"/>
</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-25T01:14:12.977229" 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-25T01:14:12.977525" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:12.977374" elapsed="0.000206"/>
</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-25T01:14:12.977751" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:12.977605" elapsed="0.000201"/>
</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-25T01:14:12.977986" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:12.977828" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:12.977351" elapsed="0.000711"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:12.977060" elapsed="0.001026"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:12.976861" elapsed="0.001250"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:12.978150" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:14:12.978354" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:12.978407" 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-25T01:14:12.972612" elapsed="0.005819"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:12.979074" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:12.979153" 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-25T01:14:12.978604" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:12.979779" 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-25T01:14:12.979483" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:12.979248" elapsed="0.000677">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:12.979229" elapsed="0.000730">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-25T01:14:12.980138" elapsed="0.000022"/>
</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-25T01:14:12.980317" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:12.980384" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:12.969814" elapsed="0.010678">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:12.969582" elapsed="0.010981">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:12.969438" elapsed="0.011181">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:12.968990" elapsed="0.011720">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:12.980965" elapsed="0.000076"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:12.941247" elapsed="0.039893">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:15.009565" elapsed="0.000244"/>
</kw>
<msg time="2026-04-25T01:14:15.009877" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:15.008887" elapsed="0.001056"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:15.008419" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:14:15.010087" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:14.999770" elapsed="0.010361"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:14.999348" elapsed="0.010856"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:15.010658" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:15.010402" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:15.016112" 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-25T01:14:15.015711" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:15.016614" 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-25T01:14:15.016326" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:15.016688" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:14:15.016844" 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-25T01:14:15.015336" elapsed="0.001533"/>
</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-25T01:14:15.017047" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:15.017695" level="INFO">${ds_type} = operational</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-25T01:14:15.017364" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:15.018137" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:15.017879" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:15.018547" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:15.018310" elapsed="0.000262"/>
</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-25T01:14:15.018985" elapsed="0.000025"/>
</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-25T01:14:15.019247" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:15.019097" elapsed="0.000205"/>
</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-25T01:14:15.019468" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:15.019327" elapsed="0.000194"/>
</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-25T01:14:15.019685" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:15.019544" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:15.019077" elapsed="0.000682"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:15.018800" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:15.018618" elapsed="0.001189"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:15.019845" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:14:15.020060" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:15.020106" 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-25T01:14:15.014599" elapsed="0.005530"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:15.020676" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:15.020754" 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-25T01:14:15.020402" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:15.021374" 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-25T01:14:15.021088" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:15.020847" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:15.020828" elapsed="0.000718">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-25T01:14:15.021700" elapsed="0.000022"/>
</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-25T01:14:15.021874" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:15.021940" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:15.011734" elapsed="0.010335">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:15.011498" elapsed="0.010640">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:15.011356" elapsed="0.010838">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:15.010938" elapsed="0.011343">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:15.022517" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:14.982055" elapsed="0.040577">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:17.051513" elapsed="0.000236"/>
</kw>
<msg time="2026-04-25T01:14:17.051815" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:17.050829" elapsed="0.001047"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:17.050358" elapsed="0.001663"/>
</kw>
<msg time="2026-04-25T01:14:17.052072" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:17.040274" elapsed="0.011845"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:17.039811" elapsed="0.012384"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:17.052657" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:17.052393" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:17.058010" 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-25T01:14:17.057578" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:17.058516" 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-25T01:14:17.058203" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:17.058591" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:14:17.058751" 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-25T01:14:17.057200" elapsed="0.001576"/>
</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-25T01:14:17.059020" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:17.059687" level="INFO">${ds_type} = operational</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-25T01:14:17.059345" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:17.060173" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:17.059876" elapsed="0.000324"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:17.060593" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:17.060353" elapsed="0.000265"/>
</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-25T01:14:17.061040" elapsed="0.000026"/>
</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-25T01:14:17.061299" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:17.061150" elapsed="0.000204"/>
</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-25T01:14:17.061519" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:17.061379" elapsed="0.000193"/>
</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-25T01:14:17.061738" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:17.061596" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:17.061132" elapsed="0.000679"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:17.060847" elapsed="0.000987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:17.060664" elapsed="0.001196"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:17.061906" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:14:17.062151" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:17.062199" 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-25T01:14:17.056433" elapsed="0.005789"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:17.062848" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:17.062928" 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-25T01:14:17.062398" elapsed="0.000555"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:17.063570" 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-25T01:14:17.063289" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:17.063063" elapsed="0.000647">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:17.063039" elapsed="0.000711">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-25T01:14:17.063915" elapsed="0.000025"/>
</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-25T01:14:17.064130" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:17.064198" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:17.053745" elapsed="0.010560">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:17.053513" elapsed="0.010864">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:17.053372" elapsed="0.011059">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:17.052954" elapsed="0.011564">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:17.064753" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:17.023670" elapsed="0.041199">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:19.093843" elapsed="0.000432"/>
</kw>
<msg time="2026-04-25T01:14:19.094356" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:19.092982" elapsed="0.001454"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:19.092379" elapsed="0.002155"/>
</kw>
<msg time="2026-04-25T01:14:19.094592" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:19.080715" elapsed="0.013930"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:19.080172" elapsed="0.014565"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:19.095320" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:19.095000" elapsed="0.000376"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:19.102351" 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-25T01:14:19.101843" elapsed="0.000541"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:19.102945" 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-25T01:14:19.102594" elapsed="0.000404"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:19.103061" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:14:19.103260" 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-25T01:14:19.101346" elapsed="0.001943"/>
</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-25T01:14:19.103489" elapsed="0.000191"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:19.104319" level="INFO">${ds_type} = operational</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-25T01:14:19.103884" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:19.104851" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:19.104559" elapsed="0.000323"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:19.106471" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:19.105093" elapsed="0.001410"/>
</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-25T01:14:19.107029" elapsed="0.000033"/>
</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-25T01:14:19.107362" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:19.107168" elapsed="0.000261"/>
</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-25T01:14:19.107649" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:19.107460" elapsed="0.000255"/>
</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-25T01:14:19.107928" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:19.107745" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:19.107144" elapsed="0.000898"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:19.106788" elapsed="0.001286"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:19.106562" elapsed="0.001543"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:19.108154" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:14:19.108399" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:19.108454" 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-25T01:14:19.100406" elapsed="0.008076"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:19.109070" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:19.109188" 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-25T01:14:19.108704" elapsed="0.000515"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:19.110013" 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-25T01:14:19.109642" elapsed="0.000465">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:19.109363" elapsed="0.000830">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:19.109338" elapsed="0.000894">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-25T01:14:19.110428" elapsed="0.000027"/>
</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-25T01:14:19.110650" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:19.110732" elapsed="0.000018"/>
</return>
<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>
<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-25T01:14:19.096661" elapsed="0.014201">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:19.096357" elapsed="0.014590">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:19.096186" elapsed="0.014850">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:19.095675" elapsed="0.015478">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:19.111452" elapsed="0.000030"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:19.065563" elapsed="0.046032">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:21.142449" elapsed="0.000234"/>
</kw>
<msg time="2026-04-25T01:14:21.142750" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:21.141762" elapsed="0.001048"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:21.141291" elapsed="0.001598"/>
</kw>
<msg time="2026-04-25T01:14:21.142936" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:21.132586" elapsed="0.010411"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:21.132144" elapsed="0.010931"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:21.143532" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:21.143269" elapsed="0.000310"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:21.148917" 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-25T01:14:21.148526" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:21.149478" 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-25T01:14:21.149143" elapsed="0.000362"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:21.149553" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:14:21.149711" 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-25T01:14:21.148140" elapsed="0.001596"/>
</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-25T01:14:21.149895" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:21.150578" level="INFO">${ds_type} = operational</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-25T01:14:21.150236" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:21.151025" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:21.150766" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:21.151508" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:21.151263" elapsed="0.000271"/>
</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-25T01:14:21.151933" elapsed="0.000025"/>
</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-25T01:14:21.152212" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:21.152063" elapsed="0.000205"/>
</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-25T01:14:21.152461" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:21.152293" elapsed="0.000223"/>
</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-25T01:14:21.152685" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:21.152540" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:21.152043" elapsed="0.000716"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:21.151763" elapsed="0.001019"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:21.151580" elapsed="0.001226"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:21.152845" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:14:21.153061" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:21.153109" 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-25T01:14:21.147256" elapsed="0.005877"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:21.153586" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:21.153664" 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-25T01:14:21.153308" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:21.154461" 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-25T01:14:21.154177" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:21.153932" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:21.153739" elapsed="0.000893">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-25T01:14:21.154787" 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-25T01:14:21.154961" elapsed="0.000036"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:21.155045" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:21.144634" elapsed="0.010518">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:21.144395" elapsed="0.010826">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:21.144222" elapsed="0.011054">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:21.143809" elapsed="0.011556">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:21.155603" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:21.112497" elapsed="0.043224">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:23.186724" elapsed="0.000329"/>
</kw>
<msg time="2026-04-25T01:14:23.187135" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:23.185769" elapsed="0.001447"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:23.185133" elapsed="0.002194"/>
</kw>
<msg time="2026-04-25T01:14:23.187483" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:23.172840" elapsed="0.014707"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:23.172251" elapsed="0.015399"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:23.188301" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:23.187922" elapsed="0.000439"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:23.199855" 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-25T01:14:23.198903" elapsed="0.001016"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:23.200999" 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-25T01:14:23.200320" elapsed="0.000740"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:23.201162" elapsed="0.000071"/>
</return>
<msg time="2026-04-25T01:14:23.201514" 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-25T01:14:23.197925" elapsed="0.003643"/>
</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-25T01:14:23.201915" elapsed="0.000430"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:23.202887" level="INFO">${ds_type} = operational</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-25T01:14:23.202548" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:23.203366" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:23.203113" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:23.203796" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:23.203545" elapsed="0.000277"/>
</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-25T01:14:23.204257" 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-25T01:14:23.204517" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:23.204368" elapsed="0.000205"/>
</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-25T01:14:23.204738" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:23.204598" elapsed="0.000193"/>
</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-25T01:14:23.204955" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:23.204813" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:23.204348" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:23.204083" elapsed="0.000986"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:23.203872" elapsed="0.001222"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:23.205133" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:23.205335" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:23.205382" 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-25T01:14:23.196144" elapsed="0.009262"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:23.205859" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:23.205936" 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-25T01:14:23.205580" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:23.206575" 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-25T01:14:23.206288" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:23.206049" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:23.206030" elapsed="0.000716">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-25T01:14:23.206900" elapsed="0.000022"/>
</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-25T01:14:23.207163" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:23.207232" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:23.189754" elapsed="0.017587">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:23.189435" elapsed="0.017979">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:23.189245" elapsed="0.018226">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:23.188690" elapsed="0.018870">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:23.207816" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:23.156408" elapsed="0.051529">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:25.236611" elapsed="0.000233"/>
</kw>
<msg time="2026-04-25T01:14:25.236907" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:25.235933" elapsed="0.001048"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:25.235462" elapsed="0.001603"/>
</kw>
<msg time="2026-04-25T01:14:25.237112" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:25.226811" elapsed="0.010346"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:25.226343" elapsed="0.010890"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:25.237689" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:25.237431" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:25.242987" 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-25T01:14:25.242553" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:25.243471" 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-25T01:14:25.243178" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:25.243544" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:14:25.243702" 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-25T01:14:25.242173" elapsed="0.001553"/>
</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-25T01:14:25.243881" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:25.244554" level="INFO">${ds_type} = operational</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-25T01:14:25.244216" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:25.244996" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:25.244740" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:25.245410" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:25.245173" elapsed="0.000262"/>
</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-25T01:14:25.245831" 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-25T01:14:25.246176" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:25.245941" elapsed="0.000294"/>
</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-25T01:14:25.246408" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:25.246261" elapsed="0.000202"/>
</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-25T01:14:25.246633" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:25.246487" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:25.245921" elapsed="0.000788"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:25.245665" elapsed="0.001096"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:25.245481" elapsed="0.001307"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:25.246828" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:25.247046" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:25.247093" 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-25T01:14:25.241424" elapsed="0.005692"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:25.247563" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:25.247641" 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-25T01:14:25.247291" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:25.248445" 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-25T01:14:25.248161" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:25.247915" elapsed="0.000674">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:25.247716" elapsed="0.000913">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-25T01:14:25.248811" elapsed="0.000023"/>
</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-25T01:14:25.249017" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:25.249086" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:25.238780" elapsed="0.010413">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:25.238515" elapsed="0.010746">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:25.238376" elapsed="0.010941">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:25.237979" elapsed="0.011427">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:25.249643" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:25.208831" elapsed="0.040928">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:27.276673" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:14:27.277001" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:27.276001" elapsed="0.001064"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:27.275525" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:14:27.277194" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:27.266877" elapsed="0.010360"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:27.266459" elapsed="0.010852"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:27.277853" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:27.277506" elapsed="0.000393"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:27.283350" 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-25T01:14:27.282911" elapsed="0.000472"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:27.283848" 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-25T01:14:27.283553" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:27.283923" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:14:27.284111" 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-25T01:14:27.282535" elapsed="0.001603"/>
</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-25T01:14:27.284297" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:27.284979" level="INFO">${ds_type} = operational</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-25T01:14:27.284620" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:27.285407" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:27.285168" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:27.285817" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:27.285581" elapsed="0.000262"/>
</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-25T01:14:27.286250" 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-25T01:14:27.286535" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:27.286363" elapsed="0.000235"/>
</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-25T01:14:27.286766" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:27.286623" elapsed="0.000197"/>
</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-25T01:14:27.286999" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:27.286843" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:27.286342" elapsed="0.000740"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:27.286083" elapsed="0.001030"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:27.285888" elapsed="0.001257"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:27.287191" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:14:27.287399" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:27.287445" 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-25T01:14:27.281784" elapsed="0.005684"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:27.287914" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:27.288006" 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-25T01:14:27.287643" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:27.288597" 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-25T01:14:27.288319" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:27.288101" elapsed="0.000635">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:27.288083" elapsed="0.000684">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-25T01:14:27.288921" elapsed="0.000022"/>
</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-25T01:14:27.289114" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:27.289181" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:27.278961" elapsed="0.010325">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:27.278723" elapsed="0.010670">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:27.278581" elapsed="0.010869">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:27.278147" elapsed="0.011392">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:27.289777" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:27.250715" elapsed="0.039178">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:29.319069" elapsed="0.000244"/>
</kw>
<msg time="2026-04-25T01:14:29.319379" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:29.318395" elapsed="0.001047"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:29.317905" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:14:29.319574" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:29.309213" elapsed="0.010406"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:29.308766" elapsed="0.010928"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:29.320168" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:29.319888" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:29.325574" 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-25T01:14:29.325120" elapsed="0.000483"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:29.326075" 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-25T01:14:29.325766" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:29.326148" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:14:29.326307" 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-25T01:14:29.324698" elapsed="0.001633"/>
</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-25T01:14:29.326485" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:29.327154" level="INFO">${ds_type} = operational</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-25T01:14:29.326801" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:29.327582" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:29.327341" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:29.328011" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:29.327757" elapsed="0.000280"/>
</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-25T01:14:29.328436" 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-25T01:14:29.328692" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:29.328544" elapsed="0.000214"/>
</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-25T01:14:29.329001" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:29.328795" elapsed="0.000266"/>
</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-25T01:14:29.329228" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:29.329085" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:29.328525" elapsed="0.000843"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:29.328267" elapsed="0.001125"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:29.328084" elapsed="0.001333"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:29.329462" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:29.329689" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:29.329735" 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-25T01:14:29.323901" elapsed="0.005858"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:29.330409" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:29.330489" 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-25T01:14:29.329934" elapsed="0.000579"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:29.331114" 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-25T01:14:29.330809" elapsed="0.000379">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:29.330586" elapsed="0.000670">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:29.330566" elapsed="0.000722">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-25T01:14:29.331447" elapsed="0.000024"/>
</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-25T01:14:29.331624" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:29.331690" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:29.321236" elapsed="0.010559">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:29.321001" elapsed="0.010862">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:29.320843" elapsed="0.011074">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:29.320446" elapsed="0.011576">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:29.332261" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:29.290719" elapsed="0.041659">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:31.359645" elapsed="0.000268"/>
</kw>
<msg time="2026-04-25T01:14:31.360004" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:31.358903" elapsed="0.001170"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:31.358423" elapsed="0.001772"/>
</kw>
<msg time="2026-04-25T01:14:31.360256" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:31.349481" elapsed="0.010823"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:31.348956" elapsed="0.011425"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:31.360863" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:31.360582" elapsed="0.000341"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:31.366537" 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-25T01:14:31.366107" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:31.367138" 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-25T01:14:31.366810" elapsed="0.000357"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:31.367218" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:14:31.367383" 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-25T01:14:31.365708" elapsed="0.001702"/>
</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-25T01:14:31.367572" elapsed="0.000197"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:31.368453" level="INFO">${ds_type} = operational</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-25T01:14:31.368023" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:31.368900" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:31.368649" elapsed="0.000278"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:31.369364" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:31.369100" elapsed="0.000292"/>
</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-25T01:14:31.369801" elapsed="0.000026"/>
</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-25T01:14:31.370094" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:31.369919" elapsed="0.000233"/>
</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-25T01:14:31.370321" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:31.370178" elapsed="0.000211"/>
</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-25T01:14:31.370575" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:31.370421" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:31.369895" elapsed="0.000756"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:31.369628" elapsed="0.001047"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:31.369442" elapsed="0.001257"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:31.370738" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:14:31.370954" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:31.371027" 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-25T01:14:31.364934" elapsed="0.006118"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:31.371511" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:31.371591" 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-25T01:14:31.371232" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:31.372341" 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-25T01:14:31.371978" elapsed="0.000442">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:31.371695" elapsed="0.000794">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:31.371670" elapsed="0.000851">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-25T01:14:31.372688" elapsed="0.000028"/>
</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-25T01:14:31.372884" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:31.372953" elapsed="0.000033"/>
</return>
<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>
<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-25T01:14:31.362023" elapsed="0.011060">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:31.361757" elapsed="0.011398">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:31.361600" elapsed="0.011611">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:31.361183" elapsed="0.012130">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:31.373571" elapsed="0.000068"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:31.333375" elapsed="0.040364">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:33.403837" elapsed="0.000257"/>
</kw>
<msg time="2026-04-25T01:14:33.404158" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:33.403180" elapsed="0.001039"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:33.402694" elapsed="0.001605"/>
</kw>
<msg time="2026-04-25T01:14:33.404347" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:33.394056" elapsed="0.010335"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:33.393516" elapsed="0.010951"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:33.404917" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:33.404661" elapsed="0.000316"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:33.410165" 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-25T01:14:33.409761" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:33.410666" 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-25T01:14:33.410354" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:33.410740" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:14:33.410896" 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-25T01:14:33.409387" elapsed="0.001533"/>
</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-25T01:14:33.411090" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:33.411731" level="INFO">${ds_type} = operational</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-25T01:14:33.411402" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:33.412170" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:33.411915" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:33.412582" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:33.412342" elapsed="0.000266"/>
</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-25T01:14:33.413015" elapsed="0.000025"/>
</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-25T01:14:33.413281" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:33.413132" elapsed="0.000204"/>
</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-25T01:14:33.413501" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:33.413360" elapsed="0.000193"/>
</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-25T01:14:33.413717" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:33.413576" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:33.413108" elapsed="0.000682"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:33.412833" elapsed="0.000980"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:33.412653" elapsed="0.001185"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:33.413877" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:14:33.414089" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:33.414135" 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-25T01:14:33.408657" elapsed="0.005501"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:33.414885" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:33.414979" 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-25T01:14:33.414432" elapsed="0.000572"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:33.415580" 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-25T01:14:33.415299" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:33.415076" elapsed="0.000643">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:33.415057" elapsed="0.000694">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-25T01:14:33.415905" elapsed="0.000022"/>
</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-25T01:14:33.416097" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:33.416165" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:33.406011" elapsed="0.010261">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:33.405762" elapsed="0.010579">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:33.405606" elapsed="0.010789">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:33.405212" elapsed="0.011271">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:33.416717" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:33.374634" elapsed="0.042200">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:35.446796" elapsed="0.000265"/>
</kw>
<msg time="2026-04-25T01:14:35.447130" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:35.446130" elapsed="0.001063"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:35.445638" elapsed="0.001637"/>
</kw>
<msg time="2026-04-25T01:14:35.447322" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:35.436810" elapsed="0.010555"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:35.436277" elapsed="0.011162"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:35.447897" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:35.447637" elapsed="0.000306"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:35.453432" 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-25T01:14:35.453032" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:35.453910" 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-25T01:14:35.453622" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:35.454000" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:14:35.454163" 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-25T01:14:35.452639" elapsed="0.001549"/>
</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-25T01:14:35.454419" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:35.455102" level="INFO">${ds_type} = operational</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-25T01:14:35.454745" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:35.455532" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:35.455290" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:35.455946" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:35.455708" elapsed="0.000278"/>
</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-25T01:14:35.456414" 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-25T01:14:35.456679" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:35.456528" elapsed="0.000207"/>
</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-25T01:14:35.456901" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:35.456760" elapsed="0.000194"/>
</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-25T01:14:35.457140" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:35.456995" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:35.456508" elapsed="0.000706"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:35.456240" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:35.456035" elapsed="0.001230"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:35.457305" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:35.457504" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:35.457550" 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-25T01:14:35.451866" elapsed="0.005707"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:35.458044" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:35.458122" 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-25T01:14:35.457747" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:35.458773" 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-25T01:14:35.458482" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:35.458233" elapsed="0.000688">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:35.458199" elapsed="0.000753">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-25T01:14:35.459130" elapsed="0.000022"/>
</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-25T01:14:35.459306" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:35.459372" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:35.449010" elapsed="0.010470">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:35.448759" elapsed="0.010790">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:35.448619" elapsed="0.010984">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:35.448219" elapsed="0.011471">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:35.459937" elapsed="0.000041"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:35.417778" elapsed="0.042300">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:37.490648" elapsed="0.000339"/>
</kw>
<msg time="2026-04-25T01:14:37.491054" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:37.489933" elapsed="0.001188"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:37.489415" elapsed="0.001787"/>
</kw>
<msg time="2026-04-25T01:14:37.491250" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:37.480309" elapsed="0.010987"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:37.479765" elapsed="0.011610"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:37.491850" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:37.491588" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:37.497215" 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-25T01:14:37.496791" elapsed="0.000453"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:37.497704" 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-25T01:14:37.497410" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:37.497781" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:14:37.497945" 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-25T01:14:37.496377" elapsed="0.001608"/>
</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-25T01:14:37.498147" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:37.498830" level="INFO">${ds_type} = operational</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-25T01:14:37.498488" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:37.499279" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:37.499036" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:37.499694" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:37.499457" 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-25T01:14:37.500141" elapsed="0.000025"/>
</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-25T01:14:37.500404" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:37.500255" elapsed="0.000273"/>
</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-25T01:14:37.500718" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:37.500563" elapsed="0.000211"/>
</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-25T01:14:37.500941" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:37.500797" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:37.500234" elapsed="0.000800"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:37.499955" elapsed="0.001103"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:37.499769" elapsed="0.001315"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:37.501124" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:37.501327" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:37.501373" 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-25T01:14:37.495633" elapsed="0.005763"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:37.501852" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:37.501931" 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-25T01:14:37.501574" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:37.547847" 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-25T01:14:37.546675" elapsed="0.001254">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:37.546284" elapsed="0.001743">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:37.502083" elapsed="0.045982">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-25T01:14:37.548228" elapsed="0.000022"/>
</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-25T01:14:37.548424" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:37.548497" elapsed="0.000021"/>
</return>
<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>
<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-25T01:14:37.492978" elapsed="0.055642">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:37.492723" elapsed="0.055968">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:37.492577" elapsed="0.056173">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:37.492151" elapsed="0.056689">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:37.549355" elapsed="0.000029"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:37.461102" elapsed="0.088379">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:39.578995" elapsed="0.000370"/>
</kw>
<msg time="2026-04-25T01:14:39.579474" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:39.577829" elapsed="0.001739"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:39.577106" elapsed="0.002582"/>
</kw>
<msg time="2026-04-25T01:14:39.579757" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:39.568291" elapsed="0.011532"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:39.567740" elapsed="0.012195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:39.580700" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:39.580263" elapsed="0.000514"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:39.586741" 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-25T01:14:39.586290" elapsed="0.000481"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:39.587274" 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-25T01:14:39.586951" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:39.587351" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:14:39.587536" 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-25T01:14:39.585882" elapsed="0.001680"/>
</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-25T01:14:39.587735" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:39.588456" level="INFO">${ds_type} = operational</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-25T01:14:39.588094" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:39.588897" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:39.588648" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:39.589484" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:39.589231" elapsed="0.000280"/>
</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-25T01:14:39.589952" elapsed="0.000042"/>
</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-25T01:14:39.590238" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:39.590087" elapsed="0.000209"/>
</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-25T01:14:39.590467" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:39.590322" elapsed="0.000200"/>
</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-25T01:14:39.590691" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:39.590546" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:39.590065" elapsed="0.000701"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:39.589764" elapsed="0.001026"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:39.589564" elapsed="0.001427"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:39.591035" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:14:39.591245" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:39.591291" 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-25T01:14:39.585124" elapsed="0.006192"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:39.591790" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:39.591868" 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-25T01:14:39.591495" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:39.592495" 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-25T01:14:39.592205" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:39.591978" elapsed="0.000660">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:39.591944" elapsed="0.000726">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-25T01:14:39.592827" elapsed="0.000022"/>
</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-25T01:14:39.593017" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:39.593087" elapsed="0.000020"/>
</return>
<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>
<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-25T01:14:39.582186" elapsed="0.011104">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:39.581919" elapsed="0.011455">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:39.581765" elapsed="0.011669">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:39.581243" elapsed="0.012283">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:39.593783" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:39.550463" elapsed="0.043442">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:41.621299" elapsed="0.000262"/>
</kw>
<msg time="2026-04-25T01:14:41.621634" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:41.620569" elapsed="0.001130"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:41.620091" elapsed="0.001691"/>
</kw>
<msg time="2026-04-25T01:14:41.621910" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:41.611411" elapsed="0.010547"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:41.610980" elapsed="0.011072"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:41.622532" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:41.622252" elapsed="0.000326"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:41.627818" 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-25T01:14:41.627421" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:41.628326" 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-25T01:14:41.628029" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:41.628400" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:14:41.628561" 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-25T01:14:41.627037" elapsed="0.001549"/>
</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-25T01:14:41.628744" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:41.629477" level="INFO">${ds_type} = operational</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-25T01:14:41.629082" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:41.629911" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:41.629667" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:41.630344" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:41.630104" elapsed="0.000265"/>
</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-25T01:14:41.630794" 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-25T01:14:41.631241" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:41.630906" elapsed="0.000394"/>
</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-25T01:14:41.631473" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:41.631327" elapsed="0.000201"/>
</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-25T01:14:41.631708" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:41.631551" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:41.630885" elapsed="0.000900"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:41.630624" elapsed="0.001186"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:41.630415" elapsed="0.001421"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:41.631877" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:14:41.632096" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:41.632143" 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-25T01:14:41.626264" elapsed="0.005903"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:41.632621" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:41.632699" 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-25T01:14:41.632343" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:41.633319" 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-25T01:14:41.633031" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:41.632794" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:41.632775" elapsed="0.000720">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-25T01:14:41.633652" elapsed="0.000022"/>
</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-25T01:14:41.633873" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:41.633940" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:41.623616" elapsed="0.010450">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:41.623377" elapsed="0.010759">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:41.623232" elapsed="0.010960">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:41.622813" elapsed="0.011467">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:41.634536" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:41.594874" elapsed="0.039783">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:43.662151" elapsed="0.000253"/>
</kw>
<msg time="2026-04-25T01:14:43.662481" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:43.661460" elapsed="0.001094"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:43.660984" elapsed="0.001662"/>
</kw>
<msg time="2026-04-25T01:14:43.662693" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:43.652213" elapsed="0.010526"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:43.651738" elapsed="0.011090"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:43.663333" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:43.663067" elapsed="0.000318"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:43.668862" 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-25T01:14:43.668471" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:43.669376" 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-25T01:14:43.669074" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:43.669452" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:14:43.669611" 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-25T01:14:43.668062" elapsed="0.001575"/>
</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-25T01:14:43.669794" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:43.670486" level="INFO">${ds_type} = operational</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-25T01:14:43.670145" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:43.670911" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:43.670673" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:43.671342" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:43.671102" elapsed="0.000265"/>
</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-25T01:14:43.671774" elapsed="0.000025"/>
</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-25T01:14:43.672169" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:43.671884" elapsed="0.000346"/>
</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-25T01:14:43.672401" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:43.672256" elapsed="0.000201"/>
</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-25T01:14:43.672622" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:43.672480" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:43.671864" elapsed="0.000832"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:43.671605" elapsed="0.001116"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:43.671412" elapsed="0.001334"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:43.672786" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:14:43.673011" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:43.673059" 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-25T01:14:43.667309" elapsed="0.005773"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:43.673533" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:43.673610" 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-25T01:14:43.673257" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:43.674226" 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-25T01:14:43.673930" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:43.673705" elapsed="0.000661">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:43.673686" elapsed="0.000712">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-25T01:14:43.674552" elapsed="0.000022"/>
</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-25T01:14:43.674727" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:43.674792" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:43.664456" elapsed="0.010442">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:43.664217" elapsed="0.010766">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:43.664053" elapsed="0.010988">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:43.663623" elapsed="0.011507">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:43.675366" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:43.635721" elapsed="0.039761">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:45.705381" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:14:45.705694" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:45.704705" elapsed="0.001052"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:45.704233" elapsed="0.001606"/>
</kw>
<msg time="2026-04-25T01:14:45.705887" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:45.695499" elapsed="0.010432"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:45.695043" elapsed="0.010982"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:45.706621" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:45.706256" elapsed="0.000412"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:45.712402" 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-25T01:14:45.711989" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:45.712906" 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-25T01:14:45.712598" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:45.713001" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:14:45.713165" 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-25T01:14:45.711565" elapsed="0.001625"/>
</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-25T01:14:45.713348" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:45.714052" level="INFO">${ds_type} = operational</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-25T01:14:45.713678" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:45.714500" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:45.714259" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:45.714909" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:45.714675" elapsed="0.000260"/>
</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-25T01:14:45.715353" 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-25T01:14:45.715616" elapsed="0.000185"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:45.715466" elapsed="0.000373"/>
</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-25T01:14:45.716034" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:45.715866" elapsed="0.000226"/>
</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-25T01:14:45.716263" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:45.716116" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:45.715445" elapsed="0.000894"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:45.715184" elapsed="0.001179"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:45.714996" elapsed="0.001394"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:45.716430" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:14:45.716630" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:45.716676" 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-25T01:14:45.710649" elapsed="0.006050"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:45.717168" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:45.717247" 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-25T01:14:45.716873" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:45.717856" 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-25T01:14:45.717561" elapsed="0.000395">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:45.717341" elapsed="0.000704">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:45.717322" elapsed="0.000779">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-25T01:14:45.718261" elapsed="0.000026"/>
</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-25T01:14:45.718447" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:45.718512" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:45.707846" elapsed="0.010773">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:45.707547" elapsed="0.011184">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:45.707369" elapsed="0.011420">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:45.706904" elapsed="0.011974">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:45.719136" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:45.676398" elapsed="0.042857">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:47.749082" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:14:47.749393" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:47.748401" elapsed="0.001054"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:47.747902" elapsed="0.001634"/>
</kw>
<msg time="2026-04-25T01:14:47.749584" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:47.738302" elapsed="0.011327"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:47.737694" elapsed="0.012011"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:47.750182" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:47.749902" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:47.755807" 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-25T01:14:47.755398" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:47.756310" 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-25T01:14:47.756019" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:47.756395" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:14:47.756556" 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-25T01:14:47.755016" elapsed="0.001570"/>
</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-25T01:14:47.756743" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:47.757414" level="INFO">${ds_type} = operational</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-25T01:14:47.757077" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:47.757842" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:47.757602" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:47.758275" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:47.758033" elapsed="0.000268"/>
</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-25T01:14:47.758701" 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-25T01:14:47.758958" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:47.758810" elapsed="0.000220"/>
</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-25T01:14:47.759198" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:47.759054" elapsed="0.000197"/>
</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-25T01:14:47.759417" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:47.759274" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:47.758790" elapsed="0.000768"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:47.758530" elapsed="0.001055"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:47.758348" elapsed="0.001264"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:47.759653" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:47.759855" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:47.759901" 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-25T01:14:47.754267" elapsed="0.005657"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:47.760407" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:47.760485" 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-25T01:14:47.760117" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:47.761103" 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-25T01:14:47.760808" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:47.760588" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:47.760569" elapsed="0.000709">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-25T01:14:47.761433" elapsed="0.000022"/>
</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-25T01:14:47.761609" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:47.761676" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:47.751259" elapsed="0.010524">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:47.751024" elapsed="0.010829">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:47.750867" elapsed="0.011041">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:47.750462" elapsed="0.011549">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:47.762251" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:47.720231" elapsed="0.042137">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:49.793788" elapsed="0.000336"/>
</kw>
<msg time="2026-04-25T01:14:49.794204" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:49.793005" elapsed="0.001267"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:49.792465" elapsed="0.001903"/>
</kw>
<msg time="2026-04-25T01:14:49.794427" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:49.782851" elapsed="0.011624"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:49.782374" elapsed="0.012187"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:49.795126" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:49.794775" elapsed="0.000406"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:49.800874" 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-25T01:14:49.800446" elapsed="0.000457"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:49.801485" 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-25T01:14:49.801168" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:49.801563" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:14:49.801758" 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-25T01:14:49.799936" elapsed="0.001855"/>
</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-25T01:14:49.802006" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:49.802736" level="INFO">${ds_type} = operational</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-25T01:14:49.802353" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:49.803279" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:49.803018" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:49.803705" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:49.803462" elapsed="0.000269"/>
</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-25T01:14:49.804155" elapsed="0.000026"/>
</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-25T01:14:49.804420" elapsed="0.000191"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:49.804269" elapsed="0.000389"/>
</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-25T01:14:49.804840" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:49.804685" elapsed="0.000214"/>
</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-25T01:14:49.805133" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:49.804928" elapsed="0.000274"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:49.804249" elapsed="0.000987"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:49.803980" elapsed="0.001289"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:49.803779" elapsed="0.001522"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:49.805352" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:14:49.805605" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:49.805663" 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-25T01:14:49.799152" elapsed="0.006542"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:49.806183" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:49.806262" 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-25T01:14:49.805878" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:49.806899" 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-25T01:14:49.806596" elapsed="0.000443">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:49.806358" elapsed="0.000774">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:49.806339" elapsed="0.000834">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-25T01:14:49.807376" elapsed="0.000028"/>
</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-25T01:14:49.807609" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:49.807681" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:49.796284" elapsed="0.011519">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:49.796015" elapsed="0.011863">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:49.795835" elapsed="0.012100">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:49.795427" elapsed="0.012616">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:49.808337" elapsed="0.000069"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:49.763622" elapsed="0.044886">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:51.840778" elapsed="0.000279"/>
</kw>
<msg time="2026-04-25T01:14:51.841126" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:51.840071" elapsed="0.001122"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:51.839546" elapsed="0.001732"/>
</kw>
<msg time="2026-04-25T01:14:51.841328" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:51.828728" elapsed="0.012651"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:51.827912" elapsed="0.013544"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:51.842017" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:51.841673" elapsed="0.000398"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:51.847935" 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-25T01:14:51.847511" elapsed="0.000471"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:51.848467" 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-25T01:14:51.848163" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:51.848543" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:14:51.848710" 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-25T01:14:51.847099" elapsed="0.001635"/>
</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-25T01:14:51.848892" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:51.849600" level="INFO">${ds_type} = operational</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-25T01:14:51.849231" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:51.850063" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:51.849803" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:51.850476" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:51.850239" elapsed="0.000262"/>
</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-25T01:14:51.850900" 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-25T01:14:51.851181" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:51.851031" elapsed="0.000205"/>
</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-25T01:14:51.851404" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:51.851261" elapsed="0.000196"/>
</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-25T01:14:51.851629" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:51.851481" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:51.851008" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:51.850730" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:51.850547" elapsed="0.001207"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:51.851794" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:51.852011" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:51.852066" 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-25T01:14:51.846295" elapsed="0.005795"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:51.852610" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:51.852689" 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-25T01:14:51.852335" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:51.853303" 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-25T01:14:51.853023" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:51.852785" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:51.852766" elapsed="0.000716">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-25T01:14:51.853637" elapsed="0.000023"/>
</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-25T01:14:51.853843" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:51.853912" elapsed="0.000015"/>
</return>
<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>
<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-25T01:14:51.843174" elapsed="0.010862">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:51.842896" elapsed="0.011211">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:51.842745" elapsed="0.011418">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:51.842327" elapsed="0.011926">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:51.854490" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:51.809444" elapsed="0.045163">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:53.884754" elapsed="0.000255"/>
</kw>
<msg time="2026-04-25T01:14:53.885075" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:53.884085" elapsed="0.001052"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:53.883601" elapsed="0.001616"/>
</kw>
<msg time="2026-04-25T01:14:53.885263" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:53.875041" elapsed="0.010265"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:53.874607" elapsed="0.010773"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:53.885836" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:53.885574" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:53.891020" 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-25T01:14:53.890590" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:53.891499" 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-25T01:14:53.891209" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:53.891572" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:14:53.891733" 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-25T01:14:53.890218" elapsed="0.001539"/>
</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-25T01:14:53.891996" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:53.892661" level="INFO">${ds_type} = operational</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-25T01:14:53.892322" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:53.893137" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:53.892877" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:53.893548" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:53.893313" elapsed="0.000260"/>
</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-25T01:14:53.893989" elapsed="0.000026"/>
</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-25T01:14:53.894249" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:53.894101" elapsed="0.000204"/>
</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-25T01:14:53.896094" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:53.894330" elapsed="0.001823"/>
</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-25T01:14:53.896325" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:53.896178" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:53.894082" elapsed="0.002319"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:53.893807" elapsed="0.002618"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:53.893624" elapsed="0.002827"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:53.896490" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:53.896711" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:53.896760" 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-25T01:14:53.889492" elapsed="0.007292"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:53.897251" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:53.897329" 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-25T01:14:53.896959" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:53.897931" 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-25T01:14:53.897651" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:53.897424" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:53.897405" elapsed="0.000713">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-25T01:14:53.898273" elapsed="0.000022"/>
</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-25T01:14:53.898450" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:53.898516" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:53.886883" elapsed="0.011739">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:53.886654" elapsed="0.012042">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:53.886517" elapsed="0.012235">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:53.886126" elapsed="0.012715">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:53.899093" elapsed="0.000035"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:53.855505" elapsed="0.043716">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:55.927724" elapsed="0.000386"/>
</kw>
<msg time="2026-04-25T01:14:55.928176" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:55.927060" elapsed="0.001179"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:55.926578" elapsed="0.001741"/>
</kw>
<msg time="2026-04-25T01:14:55.928365" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:55.917984" elapsed="0.010425"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:55.917550" elapsed="0.010934"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:55.928948" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:55.928679" elapsed="0.000337"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:55.934383" 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-25T01:14:55.933989" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:55.934869" 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-25T01:14:55.934576" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:55.934945" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:14:55.935124" 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-25T01:14:55.933593" elapsed="0.001557"/>
</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-25T01:14:55.935309" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:55.935995" level="INFO">${ds_type} = operational</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-25T01:14:55.935628" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:55.936427" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:55.936184" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:55.936845" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:55.936604" elapsed="0.000267"/>
</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-25T01:14:55.937289" 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-25T01:14:55.937548" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:55.937398" elapsed="0.000206"/>
</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-25T01:14:55.937773" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:55.937628" elapsed="0.000199"/>
</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-25T01:14:55.938010" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:55.937851" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:55.937378" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:55.937118" elapsed="0.000992"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:55.936918" elapsed="0.001218"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:55.938176" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:55.938380" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:55.938428" 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-25T01:14:55.932857" elapsed="0.005595"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:55.938902" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:55.938995" 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-25T01:14:55.938629" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:55.939654" 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-25T01:14:55.939364" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:55.939131" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:55.939111" elapsed="0.000714">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-25T01:14:55.940030" elapsed="0.000023"/>
</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-25T01:14:55.940210" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:55.940278" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:55.930036" elapsed="0.010349">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:55.929787" elapsed="0.010669">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:55.929644" elapsed="0.010869">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:55.929249" elapsed="0.011354">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:55.940844" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:55.900445" elapsed="0.040530">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:14:57.967462" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:14:57.967775" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:57.966749" elapsed="0.001090"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:57.966231" elapsed="0.001689"/>
</kw>
<msg time="2026-04-25T01:14:57.967982" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:14:57.957569" elapsed="0.010461"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:14:57.957138" elapsed="0.010969"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:14:57.968568" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:14:57.968307" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:14:57.973822" 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-25T01:14:57.973425" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:57.974325" 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-25T01:14:57.974030" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:14:57.974400" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:14:57.974562" 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-25T01:14:57.973044" elapsed="0.001543"/>
</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-25T01:14:57.974746" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:14:57.975465" level="INFO">${ds_type} = operational</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-25T01:14:57.975087" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:57.975902" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:57.975656" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:14:57.976404" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:14:57.976160" elapsed="0.000271"/>
</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-25T01:14:57.976834" elapsed="0.000025"/>
</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-25T01:14:57.977116" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:57.976946" elapsed="0.000228"/>
</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-25T01:14:57.977347" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:57.977199" elapsed="0.000203"/>
</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-25T01:14:57.977573" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:14:57.977427" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:14:57.976927" elapsed="0.000727"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:14:57.976663" elapsed="0.001016"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:57.976477" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:14:57.977746" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:14:57.977951" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:14:57.978014" 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-25T01:14:57.972308" elapsed="0.005732"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:14:57.978493" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:14:57.978573" 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-25T01:14:57.978216" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:14:57.979414" 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-25T01:14:57.979104" elapsed="0.000383">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:14:57.978856" elapsed="0.000698">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:14:57.978652" elapsed="0.000935">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-25T01:14:57.979746" elapsed="0.000022"/>
</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-25T01:14:57.979924" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:14:57.980008" elapsed="0.000016"/>
</return>
<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>
<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-25T01:14:57.969641" elapsed="0.010476">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:14:57.969407" elapsed="0.010781">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:14:57.969265" elapsed="0.010980">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:14:57.968848" elapsed="0.011488">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:14:57.980576" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:57.941650" elapsed="0.039044">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:15:00.010502" elapsed="0.000286"/>
</kw>
<msg time="2026-04-25T01:15:00.010867" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:15:00.009814" elapsed="0.001118"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:15:00.009337" elapsed="0.001693"/>
</kw>
<msg time="2026-04-25T01:15:00.011168" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:15:00.000539" elapsed="0.010676"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:15:00.000099" elapsed="0.011194"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:15:00.011755" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:15:00.011490" elapsed="0.000312"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:15:00.017363" 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-25T01:15:00.016930" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:15:00.017847" 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-25T01:15:00.017558" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:15:00.017921" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:15:00.018102" 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-25T01:15:00.016545" elapsed="0.001582"/>
</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-25T01:15:00.018285" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:15:00.019007" level="INFO">${ds_type} = operational</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-25T01:15:00.018614" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:15:00.019471" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:15:00.019225" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:15:00.019889" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:15:00.019649" elapsed="0.000266"/>
</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-25T01:15:00.020352" 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-25T01:15:00.020614" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:15:00.020463" elapsed="0.000207"/>
</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-25T01:15:00.020835" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:15:00.020694" elapsed="0.000196"/>
</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-25T01:15:00.021071" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:15:00.020913" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:15:00.020443" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:15:00.020178" elapsed="0.000995"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:15:00.019984" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:15:00.021240" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:15:00.021453" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:15:00.021516" 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-25T01:15:00.015775" elapsed="0.005766"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:15:00.022020" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:15:00.022099" 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-25T01:15:00.021720" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:15:00.022735" 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-25T01:15:00.022419" elapsed="0.000395">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:15:00.022195" elapsed="0.000691">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:15:00.022177" elapsed="0.000741">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-25T01:15:00.023092" elapsed="0.000024"/>
</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-25T01:15:00.023340" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:15:00.023410" elapsed="0.000016"/>
</return>
<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>
<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-25T01:15:00.012843" elapsed="0.010676">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:15:00.012605" elapsed="0.010985">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:15:00.012460" elapsed="0.011186">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:15:00.012054" elapsed="0.011681">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:15:00.023992" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:14:59.981998" elapsed="0.042114">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:15:02.052431" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:15:02.052738" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:15:02.051736" elapsed="0.001062"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:15:02.051258" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:15:02.052927" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:15:02.042499" elapsed="0.010489"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:15:02.042057" elapsed="0.011010"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.053534" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:15:02.053269" elapsed="0.000312"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:15:02.058868" 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-25T01:15:02.058443" elapsed="0.000453"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.059401" 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-25T01:15:02.059091" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:15:02.059477" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:15:02.059639" 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-25T01:15:02.058027" elapsed="0.001638"/>
</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-25T01:15:02.059825" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.060522" level="INFO">${ds_type} = operational</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-25T01:15:02.060174" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.060958" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:15:02.060712" elapsed="0.000296"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.061415" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:15:02.061162" elapsed="0.000279"/>
</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-25T01:15:02.061848" elapsed="0.000025"/>
</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-25T01:15:02.062378" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:15:02.062142" elapsed="0.000296"/>
</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-25T01:15:02.062610" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:15:02.062464" elapsed="0.000202"/>
</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-25T01:15:02.062833" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:15:02.062690" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:15:02.061939" elapsed="0.000970"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:15:02.061676" elapsed="0.001257"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:15:02.061489" elapsed="0.001486"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:15:02.063018" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:15:02.063229" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:15:02.063275" 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-25T01:15:02.057275" elapsed="0.006024"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.063936" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:15:02.064033" 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-25T01:15:02.063478" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.064637" 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-25T01:15:02.064354" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:15:02.064131" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:15:02.064112" elapsed="0.000701">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-25T01:15:02.064982" elapsed="0.000023"/>
</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-25T01:15:02.065160" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:15:02.065226" elapsed="0.000015"/>
</return>
<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>
<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-25T01:15:02.054636" elapsed="0.010697">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:15:02.054395" elapsed="0.011006">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:15:02.054251" elapsed="0.011204">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:15:02.053822" elapsed="0.011722">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:15:02.065780" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:15:02.025139" elapsed="0.040758">No leader found.</status>
</kw>
<msg time="2026-04-25T01:15:02.065992" level="FAIL">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 5 minutes 50 seconds. The last error was: No leader found.</msg>
<arg>${restart_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Check OpenFlow Shards Status</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.208624" elapsed="350.857474">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 5 minutes 50 seconds. The last error was: No leader found.</status>
</kw>
<doc>Wait for node convergence and check status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:09:11.194589" elapsed="350.871680">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 5 minutes 50 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s2-t12" name="Verify Data Recovery After Leader Restart" line="119">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:15:02.069527" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:15:02.069258" elapsed="0.000536"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:15:02.070821" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:15:02.070711" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:15:02.070693" elapsed="0.000197"/>
</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-25T01:15:02.075857" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:15:02.075750" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T01:15:02.075732" elapsed="0.000246"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.077004" 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-25T01:15:02.076598" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:15:02.077488" 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-25T01:15:02.077197" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:15:02.077560" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:15:02.077714" 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-25T01:15:02.076211" elapsed="0.001529"/>
</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-25T01:15:02.078099" elapsed="0.000023"/>
</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-25T01:15:02.078359" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:15:02.078199" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:15:02.078182" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:15:02.077940" elapsed="0.000520"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:15:02.077791" elapsed="0.000693"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:15:02.075389" elapsed="0.003147"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:15:02.070419" elapsed="0.008172"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:15:02.069948" elapsed="0.008694"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:15:02.067067" elapsed="0.011637"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:02.092024" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:02.087688" elapsed="0.004378">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:04.113076" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:04.108756" elapsed="0.004374">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:06.133586" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:06.129258" elapsed="0.004385">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:08.150387" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:08.145935" elapsed="0.004519">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:10.168807" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:10.163988" elapsed="0.004878">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:12.187287" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:12.183035" elapsed="0.004306">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:14.206158" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:14.199797" elapsed="0.006469">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:16.225880" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:16.220615" elapsed="0.005323">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:18.245410" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:18.240170" elapsed="0.005294">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:20.266614" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:20.260900" elapsed="0.005780">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:22.287208" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:22.282509" elapsed="0.004757">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:24.307194" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:24.302857" elapsed="0.004396">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:26.326530" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:26.320448" elapsed="0.006155">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:28.348486" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:28.344145" elapsed="0.004397">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:30.368731" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:30.364444" elapsed="0.004341">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:32.388120" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:32.382870" elapsed="0.005306">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:34.409231" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:34.404983" elapsed="0.004301">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:36.430934" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:36.425587" elapsed="0.005450">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:38.451121" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:38.446065" elapsed="0.005111">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:40.470320" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:40.465998" elapsed="0.004381">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:42.487751" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:42.482447" elapsed="0.005376">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:44.506333" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:44.501916" elapsed="0.004474">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:46.527030" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:46.522141" elapsed="0.004951">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:48.545984" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:48.541625" elapsed="0.004418">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:50.565576" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:50.561213" elapsed="0.004421">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:52.586114" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:52.581292" elapsed="0.004895">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:54.605638" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:54.601252" elapsed="0.004447">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:56.625632" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:56.620947" elapsed="0.004750">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:15:58.644169" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:15:58.639292" elapsed="0.004941">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:00.663806" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:00.658784" elapsed="0.005082">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:02.683208" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:02.678817" elapsed="0.004448">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:04.701839" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:04.697288" elapsed="0.004610">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:06.719834" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:06.715483" elapsed="0.004405">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:08.742488" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:08.733621" elapsed="0.009005">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:10.761634" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:10.757337" elapsed="0.004352">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:12.779761" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:12.775366" elapsed="0.004451">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:14.798822" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:14.794421" elapsed="0.004565">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:16.818040" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:16.813707" elapsed="0.004388">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:18.838033" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:18.833457" elapsed="0.004683">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:20.858277" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:20.853877" elapsed="0.004457">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:22.878122" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:22.873085" elapsed="0.005106">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:24.896734" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:24.892447" elapsed="0.004341">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:26.915829" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:26.911428" elapsed="0.004472">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:28.936048" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:28.931710" elapsed="0.004400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:30.955327" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:30.949075" elapsed="0.006343">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:32.973774" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:32.967924" elapsed="0.005926">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:34.992286" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:34.987929" elapsed="0.004414">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:37.013199" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:37.007013" elapsed="0.006250">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:39.033215" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:39.028385" elapsed="0.004910">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:41.053228" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:41.048774" elapsed="0.004512">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:43.074009" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.068389" elapsed="0.005680">Variable '${temp_json_config_get}' not found.</status>
</kw>
<msg time="2026-04-25T01:16:43.074321" level="FAIL">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${temp_json_config_get}' not found.</msg>
<arg>${operation_timeout}</arg>
<arg>2s</arg>
<arg>BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster</arg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:15:02.078895" elapsed="100.995592">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>10000 Flows preserved in all controller instances.</doc>
<status status="FAIL" start="2026-04-25T01:15:02.066524" elapsed="101.008164">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s2-t13" name="Verify Flows In Switch After Leader Restart" line="130">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:16:43.077997" elapsed="0.000280"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:16:43.077704" elapsed="0.000631"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:16:43.079438" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.079292" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.079266" elapsed="0.000248"/>
</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-25T01:16:43.084504" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.084397" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.084380" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.085596" 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-25T01:16:43.085205" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.086092" 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-25T01:16:43.085786" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:43.086163" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:16:43.086319" 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-25T01:16:43.084803" elapsed="0.001540"/>
</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-25T01:16:43.086706" 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-25T01:16:43.086948" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:43.086803" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:43.086787" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:43.086559" elapsed="0.000503"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:43.086399" elapsed="0.000690"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:16:43.084038" elapsed="0.003105"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:16:43.078974" elapsed="0.008224"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:16:43.078501" elapsed="0.008741"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:16:43.075524" elapsed="0.011769"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:16:43.091953" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:16:43.087495" elapsed="0.004511">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch after cluster restart.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.074939" elapsed="0.017206">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s2-t14" name="Stop Mininet Connected To Follower Node1" line="137">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:16:43.095551" elapsed="0.000256"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:16:43.095281" elapsed="0.000583"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:16:43.096866" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.096752" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.096732" elapsed="0.000205"/>
</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-25T01:16:43.101946" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.101837" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.101820" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.103048" 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-25T01:16:43.102640" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.103528" 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-25T01:16:43.103239" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:43.103600" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:16:43.103790" 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-25T01:16:43.102261" elapsed="0.001558"/>
</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-25T01:16:43.104192" 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-25T01:16:43.104435" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:43.104288" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:43.104272" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:43.104047" elapsed="0.000486"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:43.103875" elapsed="0.000683"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:16:43.101477" elapsed="0.003133"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:16:43.096461" elapsed="0.008203"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:16:43.096035" elapsed="0.008672"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:16:43.092789" elapsed="0.011969"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:16:43.113188" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:16:43.108947" elapsed="0.004282">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:16:43.113447" elapsed="0.000025"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.092337" elapsed="0.021250">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s2-t15" name="Delete All Flows From Follower Node1" line="142">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:16:43.116993" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:16:43.116708" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:16:43.118267" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.118151" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.118132" elapsed="0.000202"/>
</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-25T01:16:43.123314" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.123199" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.123180" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.124428" 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-25T01:16:43.124039" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.124910" 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-25T01:16:43.124620" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:43.124999" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:16:43.125159" 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-25T01:16:43.123608" elapsed="0.001576"/>
</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-25T01:16:43.125539" 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-25T01:16:43.125900" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:43.125705" elapsed="0.000280"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:43.125678" elapsed="0.000334"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:43.125393" elapsed="0.000644"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:43.125237" elapsed="0.000826"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:16:43.122814" elapsed="0.003306"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:16:43.117839" elapsed="0.008340"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:16:43.117421" elapsed="0.008806"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:16:43.114510" elapsed="0.011769"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:43.135073" level="FAIL">Variable '${temp_json_config_del}' not found.</msg>
<arg>${temp_json_config_del}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.130778" elapsed="0.004336">Variable '${temp_json_config_del}' not found.</status>
</kw>
<doc>10000 Flows deleted via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.113922" elapsed="0.021330">Variable '${temp_json_config_del}' not found.</status>
</test>
<test id="s1-s2-t16" name="Verify No Flows In Leader Node" line="149">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:16:43.138623" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:16:43.138355" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:16:43.139959" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.139848" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.139828" elapsed="0.000220"/>
</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-25T01:16:43.146371" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.146249" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.146230" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.147489" 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-25T01:16:43.147077" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.148027" 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-25T01:16:43.147681" elapsed="0.000372"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:43.148098" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:16:43.148259" 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-25T01:16:43.146679" elapsed="0.001605"/>
</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-25T01:16:43.148659" 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-25T01:16:43.148917" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:43.148770" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:43.148752" elapsed="0.000259"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:43.148506" elapsed="0.000537"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:43.148344" elapsed="0.000731"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:16:43.145810" elapsed="0.003321"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:16:43.139532" elapsed="0.009658"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:16:43.139083" elapsed="0.010154"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:16:43.136165" elapsed="0.013124"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:16:43.162182" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_del}</arg>
<arg>${Inventory_Leader_List_Post}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.157899" elapsed="0.004379">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Verify flow count is 0 across cluster nodes.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.135573" elapsed="0.026852">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s2-t17" name="Get Inventory Follower And Leader Before Cluster Restart" line="157">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:16:43.165876" elapsed="0.000232"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:16:43.165607" elapsed="0.000558"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:16:43.167210" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.167100" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.167081" elapsed="0.000198"/>
</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-25T01:16:43.172340" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:43.172231" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:43.172212" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.173416" 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-25T01:16:43.173038" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.173942" 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-25T01:16:43.173606" elapsed="0.000398"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:43.174060" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:16:43.174230" 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-25T01:16:43.172639" elapsed="0.001616"/>
</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-25T01:16:43.174641" elapsed="0.000026"/>
</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-25T01:16:43.174924" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:43.174746" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:43.174729" elapsed="0.000299"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:43.174473" elapsed="0.000578"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:43.174305" elapsed="0.000770"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:16:43.171814" elapsed="0.003314"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:16:43.166792" elapsed="0.008391"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:16:43.166357" elapsed="0.008871"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:16:43.163311" elapsed="0.011971"/>
</kw>
<kw name="Get InventoryConfig Shard Status" owner="ClusterOpenFlow">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<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-25T01:16:43.183041" 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-25T01:16:43.182525" elapsed="0.000548"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.183541" 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-25T01:16:43.183245" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:43.183635" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:16:43.183871" 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-25T01:16:43.182122" elapsed="0.001779"/>
</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-25T01:16:43.184118" elapsed="0.000189"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.184879" 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-25T01:16:43.184476" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.185461" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:43.185163" elapsed="0.000326"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.186001" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:43.185677" elapsed="0.000353"/>
</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-25T01:16:43.186555" elapsed="0.000030"/>
</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-25T01:16:43.186851" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:43.186695" elapsed="0.000214"/>
</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-25T01:16:43.187096" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:43.186934" elapsed="0.000225"/>
</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-25T01:16:43.187328" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:43.187183" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:43.186671" elapsed="0.000731"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:43.186338" elapsed="0.001089"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:43.186096" elapsed="0.001359"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:43.187496" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:16:43.187712" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:43.187829" 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-25T01:16:43.181341" elapsed="0.006518"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.188454" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:43.188574" 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-25T01:16:43.188060" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:43.189513" 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-25T01:16:43.189091" elapsed="0.000538">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:43.188734" elapsed="0.000997">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:43.188706" elapsed="0.001071">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-25T01:16:43.190026" elapsed="0.000034"/>
</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-25T01:16:43.190290" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:43.190386" elapsed="0.000022"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:43.178554" elapsed="0.011990">No leader found.</status>
</kw>
<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-25T01:16:44.202063" 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-25T01:16:44.201537" elapsed="0.000561"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:44.202581" 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-25T01:16:44.202279" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:44.202658" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T01:16:44.202840" 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-25T01:16:44.200824" elapsed="0.002042"/>
</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-25T01:16:44.203042" elapsed="0.000209"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:44.203816" 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-25T01:16:44.203434" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:44.204301" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:44.204021" elapsed="0.000308"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:44.204825" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:44.204572" elapsed="0.000280"/>
</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-25T01:16:44.205309" elapsed="0.000026"/>
</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-25T01:16:44.205595" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:44.205426" elapsed="0.000231"/>
</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-25T01:16:44.205829" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:44.205683" elapsed="0.000200"/>
</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-25T01:16:44.206081" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:44.205908" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:44.205405" elapsed="0.000757"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:44.205133" elapsed="0.001055"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:44.204906" elapsed="0.001311"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:44.206259" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:16:44.206469" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:44.206517" 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-25T01:16:44.198687" elapsed="0.007854"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:44.207076" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:44.207159" 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-25T01:16:44.206742" elapsed="0.000442"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:44.207794" 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-25T01:16:44.207479" elapsed="0.000402">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:44.207256" elapsed="0.000703">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:44.207237" elapsed="0.000781">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-25T01:16:44.208217" elapsed="0.000031"/>
</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-25T01:16:44.208458" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:44.208531" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:44.191786" elapsed="0.016854">No leader found.</status>
</kw>
<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-25T01:16:45.217548" 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-25T01:16:45.216877" elapsed="0.000715"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:45.218269" 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-25T01:16:45.217830" elapsed="0.000476"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:45.218372" elapsed="0.000053"/>
</return>
<msg time="2026-04-25T01:16:45.218604" 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-25T01:16:45.216336" elapsed="0.002303"/>
</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-25T01:16:45.218866" elapsed="0.000254"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:45.219819" 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-25T01:16:45.219350" elapsed="0.000507"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:45.220440" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:45.220100" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:45.221147" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:45.220688" elapsed="0.000497"/>
</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-25T01:16:45.221860" elapsed="0.000035"/>
</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-25T01:16:45.222240" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:45.222032" elapsed="0.000286"/>
</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-25T01:16:45.222550" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:45.222352" elapsed="0.000323"/>
</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-25T01:16:45.222917" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:45.222711" elapsed="0.000295"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:45.222005" elapsed="0.001035"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:45.221616" elapsed="0.001457"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:45.221349" elapsed="0.001761"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:45.223166" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:16:45.223445" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:45.223510" 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-25T01:16:45.215300" elapsed="0.008243"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:45.224183" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:45.224292" 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-25T01:16:45.223783" elapsed="0.000543"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:45.225162" 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-25T01:16:45.224727" elapsed="0.000530">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:45.224423" elapsed="0.000924">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:45.224398" elapsed="0.000992">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-25T01:16:45.225544" 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-25T01:16:45.225718" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:45.225784" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:45.209763" elapsed="0.016125">No leader found.</status>
</kw>
<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-25T01:16:46.233792" 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-25T01:16:46.233089" elapsed="0.000751"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:46.234583" 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-25T01:16:46.234115" elapsed="0.000509"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:46.234691" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T01:16:46.234945" 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-25T01:16:46.232475" elapsed="0.002532"/>
</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-25T01:16:46.235260" elapsed="0.000259"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:46.236354" 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-25T01:16:46.235782" elapsed="0.000615"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:46.237063" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:46.236658" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:46.237733" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:46.237345" elapsed="0.000429"/>
</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-25T01:16:46.238414" elapsed="0.000035"/>
</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-25T01:16:46.239034" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:46.238650" elapsed="0.000470"/>
</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-25T01:16:46.239378" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:46.239162" elapsed="0.000292"/>
</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-25T01:16:46.239682" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:46.239484" elapsed="0.000273"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:46.238619" elapsed="0.001176"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:46.238157" elapsed="0.001681"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:46.237850" elapsed="0.002033"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:46.239948" elapsed="0.000062"/>
</return>
<msg time="2026-04-25T01:16:46.240279" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:46.240351" 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-25T01:16:46.231305" elapsed="0.009084"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:46.241118" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:46.241241" 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-25T01:16:46.240665" elapsed="0.000613"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:46.242174" 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-25T01:16:46.241756" elapsed="0.000527">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:46.241386" elapsed="0.000997">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:46.241358" elapsed="0.001071">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-25T01:16:46.242655" elapsed="0.000031"/>
</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-25T01:16:46.243085" elapsed="0.000035"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:46.243190" elapsed="0.000022"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:46.226773" elapsed="0.016567">No leader found.</status>
</kw>
<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-25T01:16:47.255710" 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-25T01:16:47.255233" elapsed="0.000510"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:47.256229" 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-25T01:16:47.255916" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:47.256303" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:16:47.256469" 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-25T01:16:47.254810" elapsed="0.001684"/>
</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-25T01:16:47.256651" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:47.257340" 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-25T01:16:47.257004" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:47.257772" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:47.257529" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:47.258255" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:47.257946" elapsed="0.000337"/>
</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-25T01:16:47.258709" elapsed="0.000025"/>
</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-25T01:16:47.259058" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:47.258886" elapsed="0.000230"/>
</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-25T01:16:47.259283" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:47.259141" elapsed="0.000195"/>
</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-25T01:16:47.259500" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:47.259359" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:47.258864" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:47.258532" elapsed="0.001064"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:47.258335" elapsed="0.001288"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:47.259663" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:16:47.259862" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:47.259910" 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-25T01:16:47.253096" elapsed="0.006838"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:47.260405" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:47.260484" 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-25T01:16:47.260122" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:47.261095" 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-25T01:16:47.260795" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:47.260576" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:47.260558" elapsed="0.000712">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-25T01:16:47.261422" 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-25T01:16:47.261598" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:47.261664" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:47.244473" elapsed="0.017298">No leader found.</status>
</kw>
<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-25T01:16:48.271039" 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-25T01:16:48.270335" elapsed="0.000751"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:48.271757" 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-25T01:16:48.271336" elapsed="0.000456"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:48.271858" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:16:48.272112" 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-25T01:16:48.269773" elapsed="0.002373"/>
</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-25T01:16:48.272365" elapsed="0.000239"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:48.273325" 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-25T01:16:48.272833" elapsed="0.000529"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:48.273926" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:48.273584" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:48.274606" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:48.274236" elapsed="0.000408"/>
</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-25T01:16:48.275308" elapsed="0.000033"/>
</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-25T01:16:48.275669" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:48.275461" elapsed="0.000354"/>
</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-25T01:16:48.276009" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:48.275844" elapsed="0.000221"/>
</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-25T01:16:48.276231" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:48.276089" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:48.275434" elapsed="0.000871"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:48.275064" elapsed="0.001266"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:48.274714" elapsed="0.001643"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:48.276396" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:16:48.276596" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:48.276641" 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-25T01:16:48.268729" elapsed="0.007936"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:48.277139" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:48.277216" 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-25T01:16:48.276842" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:48.277825" 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-25T01:16:48.277528" elapsed="0.000372">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:48.277309" elapsed="0.000674">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:48.277291" elapsed="0.000729">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-25T01:16:48.278188" elapsed="0.000023"/>
</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-25T01:16:48.278378" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:48.278453" elapsed="0.000018"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:48.262935" elapsed="0.015638">No leader found.</status>
</kw>
<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-25T01:16:49.287735" 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-25T01:16:49.287072" elapsed="0.000709"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:49.288489" 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-25T01:16:49.288056" elapsed="0.000472"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:49.288598" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T01:16:49.288837" 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-25T01:16:49.286481" elapsed="0.002393"/>
</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-25T01:16:49.289127" elapsed="0.000244"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:49.290122" 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-25T01:16:49.289612" elapsed="0.000549"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:49.290749" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:49.290397" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:49.291413" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:49.291028" elapsed="0.000422"/>
</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-25T01:16:49.291986" elapsed="0.000025"/>
</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-25T01:16:49.292248" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:49.292098" elapsed="0.000206"/>
</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-25T01:16:49.292470" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:49.292329" elapsed="0.000273"/>
</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-25T01:16:49.292773" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:49.292627" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:49.292078" elapsed="0.000770"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:49.291801" elapsed="0.001072"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:49.291524" elapsed="0.001376"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:49.292941" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:16:49.293158" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:49.293203" 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-25T01:16:49.285377" elapsed="0.007850"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:49.293679" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:49.293756" 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-25T01:16:49.293401" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:49.294370" 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-25T01:16:49.294089" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:49.293854" elapsed="0.000654">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:49.293836" elapsed="0.000704">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-25T01:16:49.294693" 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-25T01:16:49.294867" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:49.294933" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:49.279729" elapsed="0.015323">No leader found.</status>
</kw>
<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-25T01:16:50.305566" 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-25T01:16:50.304703" elapsed="0.000917"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:50.306365" 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-25T01:16:50.305893" elapsed="0.000511"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:50.306488" elapsed="0.000071"/>
</return>
<msg time="2026-04-25T01:16:50.306763" 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-25T01:16:50.304093" elapsed="0.002706"/>
</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-25T01:16:50.307048" elapsed="0.000237"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:50.308116" 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-25T01:16:50.307560" elapsed="0.000601"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:50.309002" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:50.308488" elapsed="0.000560"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:50.309741" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:50.309277" elapsed="0.000509"/>
</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-25T01:16:50.310444" elapsed="0.000034"/>
</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-25T01:16:50.310812" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:50.310601" elapsed="0.000289"/>
</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-25T01:16:50.311192" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:50.310926" elapsed="0.000345"/>
</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-25T01:16:50.311712" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:50.311305" elapsed="0.000501"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:50.310573" elapsed="0.001267"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:50.310193" elapsed="0.001684"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:50.309873" elapsed="0.002089"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:50.312055" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:16:50.312351" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:50.312417" 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-25T01:16:50.302918" elapsed="0.009532"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:50.313081" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:50.313162" 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-25T01:16:50.312700" elapsed="0.000487"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:50.313775" 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-25T01:16:50.313486" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:50.313259" elapsed="0.000676">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:50.313240" elapsed="0.000769">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-25T01:16:50.314202" elapsed="0.000025"/>
</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-25T01:16:50.314389" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:50.314458" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:50.296287" elapsed="0.018280">No leader found.</status>
</kw>
<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-25T01:16:51.326007" 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-25T01:16:51.325141" elapsed="0.000929"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:51.327009" 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-25T01:16:51.326414" elapsed="0.000649"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:51.327156" elapsed="0.000071"/>
</return>
<msg time="2026-04-25T01:16:51.327477" 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-25T01:16:51.324514" elapsed="0.003011"/>
</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-25T01:16:51.327845" elapsed="0.000356"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:51.329327" 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-25T01:16:51.328782" elapsed="0.000769"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:51.330102" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:51.329763" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:51.330654" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:51.330340" elapsed="0.000347"/>
</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-25T01:16:51.331310" elapsed="0.000033"/>
</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-25T01:16:51.331663" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:51.331460" elapsed="0.000276"/>
</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-25T01:16:51.331962" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:51.331771" elapsed="0.000279"/>
</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-25T01:16:51.332276" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:51.332081" elapsed="0.000362"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:51.331433" elapsed="0.001066"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:51.331050" elapsed="0.001480"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:51.330758" elapsed="0.001803"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:51.332616" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T01:16:51.332899" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:51.332957" 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-25T01:16:51.323199" elapsed="0.009809"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:51.333639" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:51.333743" 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-25T01:16:51.333250" elapsed="0.000524"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:51.334430" 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-25T01:16:51.334126" elapsed="0.000381">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:51.333861" elapsed="0.000720">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:51.333840" elapsed="0.000774">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-25T01:16:51.334771" elapsed="0.000023"/>
</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-25T01:16:51.334950" elapsed="0.000042"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:51.335057" elapsed="0.000020"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:51.316042" elapsed="0.019154">No leader found.</status>
</kw>
<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-25T01:16:52.345402" 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-25T01:16:52.344687" elapsed="0.000762"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:52.346162" 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-25T01:16:52.345707" elapsed="0.000493"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:52.346268" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:16:52.346504" 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-25T01:16:52.344124" elapsed="0.002415"/>
</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-25T01:16:52.346762" elapsed="0.000261"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:52.347738" 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-25T01:16:52.347254" elapsed="0.000521"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:52.348381" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:52.348022" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:52.349005" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:52.348643" elapsed="0.000418"/>
</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-25T01:16:52.349677" elapsed="0.000034"/>
</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-25T01:16:52.350117" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:52.349833" elapsed="0.000426"/>
</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-25T01:16:52.350574" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:52.350311" elapsed="0.000375"/>
</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-25T01:16:52.351028" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:52.350728" elapsed="0.000412"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:52.349805" elapsed="0.001369"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:52.349428" elapsed="0.001781"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:52.349133" elapsed="0.002202"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:52.351400" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:16:52.351751" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:52.351817" 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-25T01:16:52.343056" elapsed="0.008794"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:52.352531" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:52.352643" 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-25T01:16:52.352129" elapsed="0.000549"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:52.353639" 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-25T01:16:52.353184" elapsed="0.000556">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:52.352781" elapsed="0.001065">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:52.352753" elapsed="0.001141">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-25T01:16:52.354134" elapsed="0.000024"/>
</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-25T01:16:52.354314" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:52.354383" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:52.336366" elapsed="0.018126">No leader found.</status>
</kw>
<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-25T01:16:53.364673" 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-25T01:16:53.364052" elapsed="0.000663"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.365238" 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-25T01:16:53.364906" elapsed="0.000358"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:53.365318" elapsed="0.000056"/>
</return>
<msg time="2026-04-25T01:16:53.365515" 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-25T01:16:53.363608" elapsed="0.001931"/>
</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-25T01:16:53.365736" elapsed="0.000204"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.366462" 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-25T01:16:53.366119" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.367016" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:53.366761" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.367431" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:16:53.367192" elapsed="0.000264"/>
</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-25T01:16:53.367908" 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-25T01:16:53.368198" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:53.368042" 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-25T01:16:53.368422" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:53.368280" elapsed="0.000196"/>
</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-25T01:16:53.368674" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:53.368499" elapsed="0.000226"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:53.368018" elapsed="0.000731"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:53.367728" elapsed="0.001047"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:53.367516" elapsed="0.001287"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:16:53.368846" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:16:53.369177" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:16:53.369224" 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-25T01:16:53.362790" elapsed="0.006457"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.371443" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:16:53.371767" 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-25T01:16:53.369428" elapsed="0.002407"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.374330" 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-25T01:16:53.373202" elapsed="0.001338">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:16:53.372249" elapsed="0.002471">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:16:53.372148" elapsed="0.002662">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-25T01:16:53.375313" elapsed="0.000079"/>
</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-25T01:16:53.375802" elapsed="0.000051"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:53.376014" elapsed="0.000063"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:16:53.355809" elapsed="0.020624">No leader found.</status>
</kw>
<msg time="2026-04-25T01:16:53.376727" level="FAIL">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</msg>
<var>${inv_conf_leader}</var>
<var>${inv_conf_followers_list}</var>
<arg>10s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Get_Leader_And_Followers_For_Shard</arg>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.177865" elapsed="10.199141">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>config inventory Leader is ${inv_conf_leader} and followers are ${inv_conf_followers_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.377735" elapsed="0.000064"/>
</kw>
<return>
<value>${inv_conf_leader}</value>
<value>${inv_conf_followers_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:53.377911" elapsed="0.000041"/>
</return>
<var>${inventory_leader}</var>
<var>${inventory_followers}</var>
<doc>Check Status for Inventory Config shard in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:16:43.175508" elapsed="10.202722">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${Active_Nodes}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.378521" elapsed="0.000033"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_1}</var>
<arg>${Inventory_Followers}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.378792" elapsed="0.000028"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_2}</var>
<arg>${Inventory_Followers}</arg>
<arg>1</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.379084" elapsed="0.000032"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${Active_Nodes}</arg>
<arg>${inventory_leader}</arg>
<arg>${Follower_Node_1}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.379372" elapsed="0.000030"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Active_Nodes}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.379672" elapsed="0.000029"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${Inventory_Leader_List}</var>
<arg>${inventory_leader}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.379934" elapsed="0.000047"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${Inventory_Follower_Node1_List}</var>
<arg>${Follower_Node_1}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.380230" elapsed="0.000037"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_1}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.380523" elapsed="0.000028"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_2}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.380791" elapsed="0.000028"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.381099" elapsed="0.000030"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader_List}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.381395" elapsed="0.000030"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Follower_Node1_List}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:16:53.381701" elapsed="0.000031"/>
</kw>
<doc>Find a follower in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:16:43.162715" elapsed="10.219233">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s2-t18" name="Shutdown Follower From Cluster Node" line="173">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:16:53.387312" elapsed="0.000248"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:16:53.386908" elapsed="0.000712"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:16:53.388737" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:53.388617" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:53.388598" elapsed="0.000208"/>
</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-25T01:16:53.393912" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:53.393800" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:53.393782" elapsed="0.000216"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.395045" 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-25T01:16:53.394632" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.395539" 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-25T01:16:53.395235" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:53.395612" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:16:53.395778" 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-25T01:16:53.394236" elapsed="0.001567"/>
</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-25T01:16:53.396216" 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-25T01:16:53.396460" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:53.396314" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:53.396298" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:53.396062" elapsed="0.000515"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:53.395868" elapsed="0.000739"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:16:53.393394" elapsed="0.003271"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:16:53.388296" elapsed="0.008427"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:16:53.387792" elapsed="0.008977"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:16:53.383534" elapsed="0.013288"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:16:53.401218" level="FAIL">Variable '${Follower_Node_2}' not found.</msg>
<arg>${Follower_Node_2}</arg>
<doc>Convenience keyword that kills the specified member of the cluster.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member}</doc>
<status status="FAIL" start="2026-04-25T01:16:53.397093" elapsed="0.004165">Variable '${Follower_Node_2}' not found.</status>
</kw>
<doc>Shutdown Follower Node2 and Start it Up.</doc>
<status status="FAIL" start="2026-04-25T01:16:53.382588" elapsed="0.018803">Variable '${Follower_Node_2}' not found.</status>
</test>
<test id="s1-s2-t19" name="Check Shards Status After Follower Shutdown" line="177">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:16:53.404938" elapsed="0.000234"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:16:53.404670" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:16:53.406238" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:53.406129" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:53.406110" elapsed="0.000197"/>
</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-25T01:16:53.411314" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:16:53.411198" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T01:16:53.411180" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.412395" 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-25T01:16:53.412013" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:16:53.412870" 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-25T01:16:53.412584" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:16:53.412940" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:16:53.413110" 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-25T01:16:53.411619" elapsed="0.001551"/>
</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-25T01:16:53.413537" 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-25T01:16:53.413816" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:16:53.413668" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:16:53.413651" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:16:53.413391" elapsed="0.000524"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:16:53.413235" elapsed="0.000704"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:16:53.410813" elapsed="0.003195"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:16:53.405825" elapsed="0.008241"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:16:53.405379" elapsed="0.008730"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:16:53.402337" elapsed="0.011824"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:16:53.418921" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:16:53.414932" elapsed="0.004026">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:16:55.429610" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:16:55.419871" elapsed="0.009850">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:16:57.437925" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:16:57.430625" elapsed="0.007435">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:16:59.445734" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:16:59.438873" elapsed="0.006976">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:01.454467" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:01.446820" elapsed="0.007718">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:03.461610" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:03.455408" elapsed="0.006273">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:05.469391" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:05.462848" elapsed="0.006617">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:07.481638" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:07.470485" elapsed="0.011210">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:09.492366" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:09.482754" elapsed="0.009690">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:11.501697" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:11.493512" elapsed="0.008266">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:13.512065" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:13.502746" elapsed="0.009419">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:15.521030" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:15.513272" elapsed="0.007845">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:17.530798" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:17.522179" elapsed="0.008713">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:19.542022" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:19.531880" elapsed="0.010254">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:21.551891" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:21.543497" elapsed="0.008527">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:23.559842" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:23.552939" elapsed="0.007009">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:25.568825" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:25.560955" elapsed="0.007945">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:27.580099" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:27.569864" elapsed="0.010300">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:29.589862" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:29.581101" elapsed="0.008835">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:31.596546" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:31.590619" elapsed="0.005993">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:33.605785" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:33.597884" elapsed="0.007975">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:35.615691" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:35.606868" elapsed="0.008898">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:37.626511" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:37.616937" elapsed="0.009652">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:39.637114" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:39.627621" elapsed="0.009558">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:41.648574" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:41.638192" elapsed="0.010497">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:43.657796" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:43.649678" elapsed="0.008198">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:45.667133" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:45.658844" elapsed="0.008364">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:47.678418" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:47.668123" elapsed="0.010400">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:49.687459" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:49.679577" elapsed="0.007957">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:51.697777" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:51.688478" elapsed="0.009409">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:53.704267" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:53.698642" elapsed="0.005701">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:55.715248" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:55.705211" elapsed="0.010152">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:57.726463" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:57.717049" elapsed="0.009574">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:17:59.738061" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:17:59.727644" elapsed="0.010482">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:01.748582" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:01.739041" elapsed="0.009605">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:03.758762" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:03.749483" elapsed="0.009332">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:05.767501" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:05.759831" elapsed="0.007759">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:07.776972" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:07.768534" elapsed="0.008500">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:09.787118" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:09.778016" elapsed="0.009176">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:11.795945" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:11.788181" elapsed="0.007883">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:13.807883" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:13.797044" elapsed="0.011066">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:15.819055" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:15.809478" elapsed="0.009685">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:17.829823" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:17.820178" elapsed="0.009752">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:19.841041" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:19.831812" elapsed="0.009321">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:21.850225" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:21.842167" elapsed="0.008115">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:23.856540" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:23.851018" elapsed="0.005604">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:25.867452" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:25.857759" elapsed="0.009775">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:27.877911" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:27.868473" elapsed="0.009563">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:29.887309" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:29.879115" elapsed="0.008270">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:31.895052" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:31.888445" elapsed="0.006668">Variable '${Active_Nodes}' not found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<msg time="2026-04-25T01:18:33.901438" level="FAIL">Variable '${Active_Nodes}' not found.</msg>
<arg>${Active_Nodes}</arg>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:33.895781" elapsed="0.005724">Variable '${Active_Nodes}' not found.</status>
</kw>
<msg time="2026-04-25T01:18:33.901690" level="FAIL">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${Active_Nodes}' not found.</msg>
<arg>${operation_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Check OpenFlow Shards Status</arg>
<arg>${Active_Nodes}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:16:53.414353" elapsed="100.487534">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${Active_Nodes}' not found.</status>
</kw>
<doc>Wait for node convergence and check status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:16:53.401720" elapsed="100.500408">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${Active_Nodes}' not found.</status>
</test>
<test id="s1-s2-t20" name="Start Mininet Connect To Follower Node" line="185">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:18:33.906401" elapsed="0.000332"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:18:33.906037" elapsed="0.000769"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:18:33.908383" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.908216" elapsed="0.000228"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.908187" elapsed="0.000286"/>
</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-25T01:18:33.915675" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.915541" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.915485" elapsed="0.000375"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:33.917162" 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-25T01:18:33.916667" elapsed="0.000530"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:33.917797" 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-25T01:18:33.917406" elapsed="0.000423"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:33.917886" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:18:33.918100" 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-25T01:18:33.916190" elapsed="0.001942"/>
</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-25T01:18:33.918580" elapsed="0.000026"/>
</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-25T01:18:33.918886" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:33.918700" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:33.918679" elapsed="0.000318"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:33.918395" elapsed="0.000633"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:33.918200" elapsed="0.000860"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:18:33.914815" elapsed="0.004313"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:18:33.907816" elapsed="0.011382"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:18:33.907028" elapsed="0.012226"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:18:33.903131" elapsed="0.016187"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:18:33.925245" level="FAIL">Variable '${Follower_Node_1}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_1}_IP}</arg>
<arg>--topo linear,${switch_count}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:18:33.919707" elapsed="0.005585">Variable '${Follower_Node_1}' not found.</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-25T01:18:33.925575" elapsed="0.000027"/>
</kw>
<doc>Start mininet with connection to Follower Node1.</doc>
<status status="FAIL" start="2026-04-25T01:18:33.902442" elapsed="0.023365">Variable '${Follower_Node_1}' not found.</status>
</test>
<test id="s1-s2-t21" name="Add Bulk Flow From Follower Node1" line="193">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:18:33.929145" elapsed="0.000328"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:18:33.928798" elapsed="0.000779"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:18:33.930604" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.930494" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.930475" elapsed="0.000197"/>
</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-25T01:18:33.935782" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.935676" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.935658" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:33.936862" 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-25T01:18:33.936483" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:33.937359" 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-25T01:18:33.937068" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:33.937430" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:18:33.937584" 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-25T01:18:33.936104" elapsed="0.001504"/>
</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-25T01:18:33.937984" elapsed="0.000023"/>
</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-25T01:18:33.938274" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:33.938126" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:33.938107" elapsed="0.000243"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:33.937826" elapsed="0.000547"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:33.937658" elapsed="0.000740"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:18:33.935310" elapsed="0.003142"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:18:33.930204" elapsed="0.008303"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:18:33.929757" elapsed="0.008796"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:18:33.926626" elapsed="0.011980"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:18:33.947323" level="FAIL">Variable '${temp_json_config_add}' not found.</msg>
<arg>${temp_json_config_add}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:18:33.943046" elapsed="0.004316">Variable '${temp_json_config_add}' not found.</status>
</kw>
<doc>10000 Flows added via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:18:33.926087" elapsed="0.021414">Variable '${temp_json_config_add}' not found.</status>
</test>
<test id="s1-s2-t22" name="Get Bulk Flows And Verify In Leader Before Follower Restart" line="197">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:18:33.951095" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:18:33.950809" elapsed="0.000559"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:18:33.952359" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.952248" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.952229" elapsed="0.000199"/>
</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-25T01:18:33.957562" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.957454" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.957436" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:33.958670" 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-25T01:18:33.958290" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:33.959169" 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-25T01:18:33.958860" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:33.959239" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:18:33.959393" 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-25T01:18:33.957896" elapsed="0.001521"/>
</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-25T01:18:33.959769" 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-25T01:18:33.960056" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:33.959868" elapsed="0.000245"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:33.959851" elapsed="0.000312"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:33.959616" elapsed="0.000571"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:33.959467" elapsed="0.000745"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:18:33.957092" elapsed="0.003173"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:18:33.951943" elapsed="0.008377"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:18:33.951519" elapsed="0.008846"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:18:33.948477" elapsed="0.011941"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:18:33.972849" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:18:33.968570" elapsed="0.004316">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Initiate get operation and check flow count 10000 only across active cluster nodes</doc>
<status status="FAIL" start="2026-04-25T01:18:33.947831" elapsed="0.025214">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s2-t23" name="Verify Flows In Switch Before Follower Restart" line="205">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:18:33.976339" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:18:33.976074" elapsed="0.000530"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:18:33.977589" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.977480" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.977462" elapsed="0.000195"/>
</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-25T01:18:33.982852" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.982743" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.982725" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:33.983915" 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-25T01:18:33.983538" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:33.984407" 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-25T01:18:33.984120" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:33.984477" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:18:33.984628" 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-25T01:18:33.983162" elapsed="0.001490"/>
</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-25T01:18:33.985012" 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-25T01:18:33.985254" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:33.985109" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:33.985093" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:33.984849" elapsed="0.000503"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:33.984702" elapsed="0.000674"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:18:33.982377" elapsed="0.003051"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:18:33.977196" elapsed="0.008286"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:18:33.976757" elapsed="0.008768"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:18:33.973951" elapsed="0.011626"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:18:33.989981" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:18:33.985776" elapsed="0.004244">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch before follower restart.</doc>
<status status="FAIL" start="2026-04-25T01:18:33.973322" elapsed="0.016832">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s2-t24" name="Restart Follower From Cluster Node" line="212">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:18:33.993333" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:18:33.993067" elapsed="0.000533"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:18:33.994638" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.994528" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.994509" elapsed="0.000198"/>
</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-25T01:18:33.999805" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:33.999699" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:33.999682" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.000921" 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-25T01:18:34.000540" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.001424" 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-25T01:18:34.001129" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:34.001496" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:18:34.001653" 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-25T01:18:34.000114" elapsed="0.001564"/>
</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-25T01:18:34.002063" elapsed="0.000028"/>
</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-25T01:18:34.002344" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:34.002182" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:34.002161" elapsed="0.000277"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:34.001881" elapsed="0.000586"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:34.001730" elapsed="0.000766"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:18:33.999341" elapsed="0.003217"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:18:33.994238" elapsed="0.008381"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:18:33.993750" elapsed="0.008919"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:18:33.990893" elapsed="0.011837"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:18:34.007276" level="FAIL">Variable '${Follower_Node_2}' not found.</msg>
<arg>${Follower_Node_2}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-04-25T01:18:34.003015" elapsed="0.004299">Variable '${Follower_Node_2}' not found.</status>
</kw>
<doc>Restart Follower Node2.</doc>
<status status="FAIL" start="2026-04-25T01:18:33.990427" elapsed="0.017021">Variable '${Follower_Node_2}' not found.</status>
</test>
<test id="s1-s2-t25" name="Check Shards Status After Follower Restart" line="216">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:18:34.010804" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:18:34.010541" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:18:34.012193" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:34.012082" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:34.012063" elapsed="0.000199"/>
</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-25T01:18:34.017464" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:18:34.017358" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:18:34.017340" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.018548" 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-25T01:18:34.018168" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.019038" 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-25T01:18:34.018735" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:34.019110" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:18:34.019263" 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-25T01:18:34.017756" elapsed="0.001531"/>
</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-25T01:18:34.019634" 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-25T01:18:34.019876" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:34.019731" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:34.019715" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:34.019492" elapsed="0.000532"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:34.019338" elapsed="0.000715"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:18:34.016996" elapsed="0.003112"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:18:34.011773" elapsed="0.008390"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:18:34.011238" elapsed="0.008969"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:18:34.008411" elapsed="0.011849"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:34.042120" elapsed="0.000257"/>
</kw>
<msg time="2026-04-25T01:18:34.042441" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:34.041437" elapsed="0.001061"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:34.040953" elapsed="0.001624"/>
</kw>
<msg time="2026-04-25T01:18:34.042623" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:34.032179" elapsed="0.010488"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:34.031767" elapsed="0.010973"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.043201" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:34.042927" elapsed="0.000319"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:34.048700" 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-25T01:18:34.048299" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.049209" 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-25T01:18:34.048898" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:34.049283" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:34.049440" 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-25T01:18:34.047897" elapsed="0.001568"/>
</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-25T01:18:34.049623" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.050316" level="INFO">${ds_type} = operational</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-25T01:18:34.049952" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.050741" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:34.050503" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.051171" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:34.050914" elapsed="0.000282"/>
</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-25T01:18:34.051595" 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-25T01:18:34.051848" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:34.051701" elapsed="0.000202"/>
</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-25T01:18:34.052097" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:34.051927" elapsed="0.000226"/>
</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-25T01:18:34.052326" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:34.052176" elapsed="0.000251"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:34.051682" elapsed="0.000772"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:34.051428" elapsed="0.001055"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:34.051243" elapsed="0.001265"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:34.052548" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:18:34.052752" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:34.052804" 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-25T01:18:34.047157" elapsed="0.005671"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.053297" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:34.053374" 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-25T01:18:34.053020" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:34.053986" 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-25T01:18:34.053695" elapsed="0.000393">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:34.053471" elapsed="0.000686">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:34.053449" elapsed="0.000740">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-25T01:18:34.054346" elapsed="0.000022"/>
</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-25T01:18:34.054522" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:34.054588" elapsed="0.000015"/>
</return>
<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>
<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-25T01:18:34.044219" elapsed="0.010476">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:34.043996" elapsed="0.010770">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:34.043852" elapsed="0.010975">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:34.043471" elapsed="0.011445">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:34.055181" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:34.021049" elapsed="0.034249">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:36.082474" elapsed="0.000244"/>
</kw>
<msg time="2026-04-25T01:18:36.082782" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:36.081780" elapsed="0.001065"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:36.081251" elapsed="0.001676"/>
</kw>
<msg time="2026-04-25T01:18:36.082988" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:36.072538" elapsed="0.010529"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:36.072090" elapsed="0.011077"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:36.083647" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:36.083374" elapsed="0.000320"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:36.088906" 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-25T01:18:36.088518" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:36.089490" 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-25T01:18:36.089117" elapsed="0.000399"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:36.089565" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:36.089724" 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-25T01:18:36.088137" elapsed="0.001612"/>
</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-25T01:18:36.089906" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:36.090587" level="INFO">${ds_type} = operational</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-25T01:18:36.090246" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:36.091039" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:36.090778" elapsed="0.000318"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:36.091495" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:36.091255" elapsed="0.000266"/>
</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-25T01:18:36.091923" elapsed="0.000025"/>
</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-25T01:18:36.092204" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:36.092052" elapsed="0.000208"/>
</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-25T01:18:36.092428" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:36.092284" elapsed="0.000199"/>
</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-25T01:18:36.092651" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:36.092507" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:36.092032" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:36.091752" elapsed="0.000997"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:36.091567" elapsed="0.001207"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:36.092814" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:18:36.093032" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:36.093079" 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-25T01:18:36.087402" elapsed="0.005701"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:36.093550" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:36.093628" 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-25T01:18:36.093278" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:36.094439" 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-25T01:18:36.094155" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:36.093911" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:36.093703" elapsed="0.000907">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-25T01:18:36.094766" elapsed="0.000022"/>
</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-25T01:18:36.094944" elapsed="0.000035"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:36.095027" elapsed="0.000016"/>
</return>
<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>
<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-25T01:18:36.084740" elapsed="0.010404">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:36.084505" elapsed="0.010710">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:36.084363" elapsed="0.010907">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:36.083943" elapsed="0.011416">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:36.095598" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:36.056125" elapsed="0.039635">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:38.130803" elapsed="0.000654"/>
</kw>
<msg time="2026-04-25T01:18:38.131626" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:38.129264" elapsed="0.002490"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:38.128044" elapsed="0.003892"/>
</kw>
<msg time="2026-04-25T01:18:38.132075" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:38.115935" elapsed="0.016241"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:38.115115" elapsed="0.017229"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:38.133664" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:38.133048" elapsed="0.000720"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:38.143212" 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-25T01:18:38.142755" elapsed="0.000486"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:38.143716" 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-25T01:18:38.143409" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:38.143810" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:18:38.143996" 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-25T01:18:38.142364" elapsed="0.001659"/>
</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-25T01:18:38.144184" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:38.144861" level="INFO">${ds_type} = operational</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-25T01:18:38.144518" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:38.145348" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:38.145087" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:38.145781" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:38.145531" elapsed="0.000277"/>
</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-25T01:18:38.146257" elapsed="0.000027"/>
</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-25T01:18:38.146542" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:38.146377" elapsed="0.000225"/>
</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-25T01:18:38.146774" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:38.146628" elapsed="0.000200"/>
</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-25T01:18:38.147010" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:38.146851" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:38.146352" elapsed="0.000733"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:38.146072" elapsed="0.001037"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:38.145861" elapsed="0.001274"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:38.147176" elapsed="0.000058"/>
</return>
<msg time="2026-04-25T01:18:38.147414" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:38.147460" 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-25T01:18:38.141588" elapsed="0.005895"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:38.148040" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:38.148191" 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-25T01:18:38.147741" elapsed="0.000491"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:38.148899" 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-25T01:18:38.148612" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:38.148333" elapsed="0.000728">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:38.148308" elapsed="0.000784">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-25T01:18:38.149248" elapsed="0.000022"/>
</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-25T01:18:38.149426" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:38.149492" elapsed="0.000015"/>
</return>
<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>
<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-25T01:18:38.136562" elapsed="0.013037">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:38.135996" elapsed="0.013672">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:38.135658" elapsed="0.014065">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:38.134380" elapsed="0.015430">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:38.150064" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:38.096663" elapsed="0.053521">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:40.177521" elapsed="0.000348"/>
</kw>
<msg time="2026-04-25T01:18:40.177957" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:40.176522" elapsed="0.001544"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:40.175837" elapsed="0.002344"/>
</kw>
<msg time="2026-04-25T01:18:40.178246" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:40.166911" elapsed="0.011398"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:40.166411" elapsed="0.012004"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:40.179140" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:40.178739" elapsed="0.000467"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:40.185911" 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-25T01:18:40.185496" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:40.186417" 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-25T01:18:40.186121" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:40.186493" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:40.186674" 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-25T01:18:40.185111" elapsed="0.001588"/>
</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-25T01:18:40.186946" elapsed="0.000201"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:40.187735" level="INFO">${ds_type} = operational</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-25T01:18:40.187363" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:40.188227" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:40.187957" elapsed="0.000297"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:40.188650" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:40.188409" elapsed="0.000267"/>
</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-25T01:18:40.189096" elapsed="0.000026"/>
</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-25T01:18:40.189362" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:40.189212" elapsed="0.000208"/>
</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-25T01:18:40.189588" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:40.189445" elapsed="0.000199"/>
</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-25T01:18:40.189814" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:40.189669" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:40.189191" elapsed="0.000706"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:40.188909" elapsed="0.001013"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:40.188724" elapsed="0.001225"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:40.190004" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:18:40.190211" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:40.190259" 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-25T01:18:40.184368" elapsed="0.005915"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:40.190991" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:40.191075" 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-25T01:18:40.190458" elapsed="0.000641"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:40.191683" 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-25T01:18:40.191397" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:40.191173" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:40.191154" elapsed="0.000707">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-25T01:18:40.192034" elapsed="0.000024"/>
</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-25T01:18:40.192214" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:40.192282" elapsed="0.000016"/>
</return>
<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>
<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-25T01:18:40.180823" elapsed="0.011568">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:40.180455" elapsed="0.012006">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:40.180256" elapsed="0.012261">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:40.179537" elapsed="0.013070">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:40.192849" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:40.151200" elapsed="0.041785">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:42.222861" elapsed="0.000351"/>
</kw>
<msg time="2026-04-25T01:18:42.223278" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:42.222190" elapsed="0.001156"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:42.221698" elapsed="0.001729"/>
</kw>
<msg time="2026-04-25T01:18:42.223473" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:42.212772" elapsed="0.010745"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:42.212335" elapsed="0.011258"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:42.224069" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:42.223794" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:42.229604" 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-25T01:18:42.229196" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:42.230097" 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-25T01:18:42.229794" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:42.230170" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:42.230326" 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-25T01:18:42.228804" elapsed="0.001546"/>
</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-25T01:18:42.230504" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:42.231192" level="INFO">${ds_type} = operational</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-25T01:18:42.230816" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:42.231629" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:42.231382" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:42.232053" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:42.231800" elapsed="0.000279"/>
</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-25T01:18:42.232481" 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-25T01:18:42.232736" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:42.232590" elapsed="0.000201"/>
</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-25T01:18:42.232955" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:42.232815" elapsed="0.000209"/>
</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-25T01:18:42.233189" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:42.233047" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:42.232570" elapsed="0.000692"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:42.232306" elapsed="0.000979"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:42.232126" elapsed="0.001183"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:42.233347" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:18:42.233569" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:42.233615" 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-25T01:18:42.228051" elapsed="0.005587"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:42.234104" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:42.234181" 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-25T01:18:42.233811" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:42.234812" 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-25T01:18:42.234532" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:42.234313" elapsed="0.000636">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:42.234294" elapsed="0.000703">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-25T01:18:42.235152" elapsed="0.000022"/>
</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-25T01:18:42.235328" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:42.235395" elapsed="0.000016"/>
</return>
<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>
<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-25T01:18:42.225142" elapsed="0.010358">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:42.224891" elapsed="0.010680">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:42.224748" elapsed="0.010879">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:42.224349" elapsed="0.011368">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:42.235954" elapsed="0.000040"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:42.194253" elapsed="0.041835">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:44.265776" elapsed="0.000288"/>
</kw>
<msg time="2026-04-25T01:18:44.266139" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:44.265042" elapsed="0.001164"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:44.264491" elapsed="0.001802"/>
</kw>
<msg time="2026-04-25T01:18:44.266344" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:44.254296" elapsed="0.012095"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:44.253805" elapsed="0.012673"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:44.267007" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:44.266712" elapsed="0.000345"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:44.272802" 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-25T01:18:44.272385" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:44.273337" 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-25T01:18:44.273026" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:44.273416" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:18:44.273583" 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-25T01:18:44.271976" elapsed="0.001633"/>
</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-25T01:18:44.273781" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:44.274505" level="INFO">${ds_type} = operational</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-25T01:18:44.274145" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:44.274978" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:44.274709" elapsed="0.000297"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:44.275527" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:44.275254" elapsed="0.000301"/>
</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-25T01:18:44.276046" elapsed="0.000027"/>
</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-25T01:18:44.276333" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:44.276167" elapsed="0.000226"/>
</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-25T01:18:44.276579" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:44.276419" elapsed="0.000219"/>
</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-25T01:18:44.277016" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:44.276664" elapsed="0.000412"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:44.276145" elapsed="0.000958"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:44.275817" elapsed="0.001313"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:44.275606" elapsed="0.001551"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:44.277202" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:44.277419" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:44.277468" 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-25T01:18:44.271173" elapsed="0.006321"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:44.277994" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:44.278078" 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-25T01:18:44.277686" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:44.278725" 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-25T01:18:44.278419" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:44.278179" elapsed="0.000698">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:44.278159" elapsed="0.000751">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-25T01:18:44.279097" elapsed="0.000024"/>
</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-25T01:18:44.279291" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:44.279364" elapsed="0.000016"/>
</return>
<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>
<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-25T01:18:44.268208" elapsed="0.011269">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:44.267923" elapsed="0.011629">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:44.267748" elapsed="0.011863">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:44.267322" elapsed="0.012383">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:44.279997" elapsed="0.000028"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:44.237043" elapsed="0.043080">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:46.308081" elapsed="0.000250"/>
</kw>
<msg time="2026-04-25T01:18:46.308399" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:46.307398" elapsed="0.001065"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:46.306894" elapsed="0.001649"/>
</kw>
<msg time="2026-04-25T01:18:46.308673" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:46.298155" elapsed="0.010565"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:46.297616" elapsed="0.011181"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:46.309279" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:46.309017" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:46.314707" 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-25T01:18:46.314315" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:46.315210" 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-25T01:18:46.314902" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:46.315284" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:18:46.315444" 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-25T01:18:46.313913" elapsed="0.001555"/>
</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-25T01:18:46.315622" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:46.316298" level="INFO">${ds_type} = operational</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-25T01:18:46.315938" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:46.316726" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:46.316484" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:46.317158" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:46.316900" elapsed="0.000284"/>
</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-25T01:18:46.317592" 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-25T01:18:46.317856" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:46.317701" elapsed="0.000214"/>
</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-25T01:18:46.318123" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:46.317938" elapsed="0.000241"/>
</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-25T01:18:46.318344" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:46.318203" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:46.317682" elapsed="0.000737"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:46.317421" elapsed="0.001022"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:46.317230" elapsed="0.001238"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:46.318507" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:18:46.318707" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:46.318753" 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-25T01:18:46.313191" elapsed="0.005586"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:46.319253" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:46.319336" 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-25T01:18:46.318956" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:46.319998" 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-25T01:18:46.319704" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:46.319430" elapsed="0.000708">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:46.319411" elapsed="0.000758">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-25T01:18:46.320322" 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-25T01:18:46.320541" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:46.320609" elapsed="0.000015"/>
</return>
<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>
<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-25T01:18:46.310392" elapsed="0.010323">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:46.310149" elapsed="0.010636">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:46.309978" elapsed="0.010863">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:46.309562" elapsed="0.011374">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:46.321190" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:46.280825" elapsed="0.040482">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:48.350201" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:18:48.350518" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:48.349522" elapsed="0.001062"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:48.349009" elapsed="0.001655"/>
</kw>
<msg time="2026-04-25T01:18:48.350708" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:48.340148" elapsed="0.010604"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:48.339653" elapsed="0.011171"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:48.351299" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:48.351041" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:48.356571" 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-25T01:18:48.356182" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:48.357079" 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-25T01:18:48.356766" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:48.357151" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:48.357309" 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-25T01:18:48.355747" elapsed="0.001586"/>
</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-25T01:18:48.357486" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:48.358147" level="INFO">${ds_type} = operational</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-25T01:18:48.357799" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:48.358566" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:48.358329" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:48.358987" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:48.358739" elapsed="0.000275"/>
</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-25T01:18:48.359416" 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-25T01:18:48.359750" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:48.359525" elapsed="0.000283"/>
</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-25T01:18:48.360022" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:48.359833" elapsed="0.000252"/>
</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-25T01:18:48.360421" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:48.360271" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:48.359505" elapsed="0.001020"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:48.359248" elapsed="0.001315"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:48.359060" elapsed="0.001549"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:48.360654" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:48.360863" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:48.360909" 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-25T01:18:48.355034" elapsed="0.005899"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:48.361416" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:48.361495" 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-25T01:18:48.361127" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:48.362111" 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-25T01:18:48.361812" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:48.361589" elapsed="0.000666">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:48.361570" elapsed="0.000717">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-25T01:18:48.362441" elapsed="0.000028"/>
</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-25T01:18:48.362624" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:48.362696" elapsed="0.000015"/>
</return>
<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>
<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-25T01:18:48.352419" elapsed="0.010384">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:48.352152" elapsed="0.010721">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:48.352006" elapsed="0.010924">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:48.351581" elapsed="0.011454">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:48.363273" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:48.322232" elapsed="0.041185">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:50.391056" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:18:50.391362" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:50.390384" elapsed="0.001045"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:50.389902" elapsed="0.001630"/>
</kw>
<msg time="2026-04-25T01:18:50.391580" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:50.381243" elapsed="0.010382"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:50.380805" elapsed="0.010905"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:50.392330" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:50.391910" elapsed="0.000481"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:50.398113" 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-25T01:18:50.397534" elapsed="0.000614"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:50.398752" 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-25T01:18:50.398325" elapsed="0.000453"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:50.398827" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:50.399027" 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-25T01:18:50.397158" elapsed="0.001896"/>
</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-25T01:18:50.399213" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:50.399921" level="INFO">${ds_type} = operational</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-25T01:18:50.399530" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:50.400373" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:50.400129" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:50.400782" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:50.400547" elapsed="0.000260"/>
</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-25T01:18:50.401239" elapsed="0.000025"/>
</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-25T01:18:50.401502" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:50.401351" elapsed="0.000206"/>
</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-25T01:18:50.401742" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:50.401582" elapsed="0.000215"/>
</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-25T01:18:50.401981" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:50.401820" elapsed="0.000235"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:50.401331" elapsed="0.000759"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:50.401056" elapsed="0.001065"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:50.400853" elapsed="0.001313"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:50.402219" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:18:50.402424" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:50.402469" 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-25T01:18:50.396398" elapsed="0.006099"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:50.402981" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:50.403062" 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-25T01:18:50.402672" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:50.403666" 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-25T01:18:50.403383" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:50.403159" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:50.403138" elapsed="0.000725">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-25T01:18:50.404038" elapsed="0.000023"/>
</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-25T01:18:50.404215" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:50.404280" elapsed="0.000015"/>
</return>
<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>
<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-25T01:18:50.393526" elapsed="0.010859">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:50.393289" elapsed="0.011202">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:50.393139" elapsed="0.011408">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:50.392698" elapsed="0.011937">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:50.404878" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:50.364334" elapsed="0.040676">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:52.433033" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:18:52.433345" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:52.432346" elapsed="0.001061"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:52.431851" elapsed="0.001636"/>
</kw>
<msg time="2026-04-25T01:18:52.433533" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:52.423225" elapsed="0.010350"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:52.422758" elapsed="0.010890"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:52.434118" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:52.433841" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:52.439328" 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-25T01:18:52.438912" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:52.439840" 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-25T01:18:52.439535" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:52.439923" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:18:52.440108" 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-25T01:18:52.438536" elapsed="0.001597"/>
</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-25T01:18:52.440341" elapsed="0.000203"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:52.441178" level="INFO">${ds_type} = operational</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-25T01:18:52.440759" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:52.441608" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:52.441366" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:52.442047" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:52.441781" elapsed="0.000292"/>
</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-25T01:18:52.442487" elapsed="0.000031"/>
</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-25T01:18:52.442817" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:52.442628" elapsed="0.000250"/>
</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-25T01:18:52.443064" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:52.442903" elapsed="0.000223"/>
</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-25T01:18:52.443294" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:52.443150" elapsed="0.000255"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:52.442602" elapsed="0.000827"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:52.442299" elapsed="0.001154"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:52.442119" elapsed="0.001359"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:52.443518" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:18:52.443719" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:52.443764" 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-25T01:18:52.437798" elapsed="0.005989"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:52.444302" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:52.444388" 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-25T01:18:52.443992" elapsed="0.000428"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:52.445266" 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-25T01:18:52.444924" elapsed="0.000420">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:52.444674" elapsed="0.000740">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:52.444478" elapsed="0.000969">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-25T01:18:52.445603" elapsed="0.000022"/>
</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-25T01:18:52.445780" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:52.445848" elapsed="0.000016"/>
</return>
<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>
<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-25T01:18:52.435177" elapsed="0.010779">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:52.434930" elapsed="0.011115">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:52.434791" elapsed="0.011313">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:52.434393" elapsed="0.011801">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:52.446434" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:52.406214" elapsed="0.040339">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:54.473624" elapsed="0.000308"/>
</kw>
<msg time="2026-04-25T01:18:54.474028" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:54.472863" elapsed="0.001239"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:54.472365" elapsed="0.001829"/>
</kw>
<msg time="2026-04-25T01:18:54.474250" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:54.463409" elapsed="0.010892"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:54.462944" elapsed="0.011445"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:54.474867" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:54.474604" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:54.480437" 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-25T01:18:54.480041" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:54.481005" 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-25T01:18:54.480695" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:54.481079" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:18:54.481271" 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-25T01:18:54.479631" elapsed="0.001665"/>
</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-25T01:18:54.481454" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:54.482134" level="INFO">${ds_type} = operational</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-25T01:18:54.481775" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:54.482556" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:54.482319" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:54.482968" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:54.482730" elapsed="0.000277"/>
</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-25T01:18:54.483407" elapsed="0.000025"/>
</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-25T01:18:54.483667" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:54.483518" elapsed="0.000203"/>
</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-25T01:18:54.483886" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:54.483746" elapsed="0.000192"/>
</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-25T01:18:54.484120" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:54.483961" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:54.483499" elapsed="0.000694"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:54.483236" elapsed="0.000981"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:54.483053" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:54.484281" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:18:54.484478" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:54.484523" 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-25T01:18:54.478795" elapsed="0.005751"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:54.485009" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:54.485087" 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-25T01:18:54.484719" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:54.485748" 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-25T01:18:54.485457" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:54.485180" elapsed="0.000710">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:54.485162" elapsed="0.000759">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-25T01:18:54.486094" elapsed="0.000022"/>
</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-25T01:18:54.486271" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:54.486336" elapsed="0.000015"/>
</return>
<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>
<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-25T01:18:54.475954" elapsed="0.010488">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:54.475713" elapsed="0.010800">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:54.475570" elapsed="0.010998">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:54.475170" elapsed="0.011485">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:54.486892" elapsed="0.000061"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:54.447646" elapsed="0.039421">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:56.514789" elapsed="0.000267"/>
</kw>
<msg time="2026-04-25T01:18:56.515126" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:56.514124" elapsed="0.001068"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:56.513639" elapsed="0.001632"/>
</kw>
<msg time="2026-04-25T01:18:56.515318" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:56.504989" elapsed="0.010373"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:56.504506" elapsed="0.010928"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:56.515891" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:56.515635" elapsed="0.000301"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:56.521389" 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-25T01:18:56.520953" elapsed="0.000464"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:56.522031" 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-25T01:18:56.521592" elapsed="0.000477"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:56.522137" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:18:56.522362" 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-25T01:18:56.520530" elapsed="0.001868"/>
</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-25T01:18:56.522657" elapsed="0.000241"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:56.523663" level="INFO">${ds_type} = operational</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-25T01:18:56.523176" elapsed="0.000525"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:56.524349" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:56.523927" elapsed="0.000459"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:56.525027" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:56.524602" elapsed="0.000465"/>
</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-25T01:18:56.525621" elapsed="0.000025"/>
</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-25T01:18:56.525883" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:56.525733" elapsed="0.000206"/>
</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-25T01:18:56.526127" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:56.525967" elapsed="0.000215"/>
</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-25T01:18:56.526348" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:56.526206" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:56.525712" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:56.525395" elapsed="0.001051"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:56.525134" elapsed="0.001338"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:56.526510" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:18:56.526716" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:56.526762" 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-25T01:18:56.519730" elapsed="0.007056"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:56.527322" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:56.527404" 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-25T01:18:56.527040" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:56.528228" 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-25T01:18:56.527915" elapsed="0.000386">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:56.527684" elapsed="0.000686">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:56.527482" elapsed="0.000921">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-25T01:18:56.528561" elapsed="0.000024"/>
</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-25T01:18:56.528741" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:56.528837" elapsed="0.000021"/>
</return>
<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>
<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-25T01:18:56.517016" elapsed="0.011974">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:56.516764" elapsed="0.012316">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:56.516581" elapsed="0.012565">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:56.516183" elapsed="0.013054">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:56.529479" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:56.488017" elapsed="0.041585">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:18:58.555785" elapsed="0.000269"/>
</kw>
<msg time="2026-04-25T01:18:58.556122" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:58.555114" elapsed="0.001071"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:58.554600" elapsed="0.001667"/>
</kw>
<msg time="2026-04-25T01:18:58.556313" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:18:58.545937" elapsed="0.010422"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:18:58.545513" elapsed="0.010921"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:18:58.556907" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:18:58.556637" elapsed="0.000365"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:18:58.562404" 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-25T01:18:58.561997" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:58.562887" 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-25T01:18:58.562595" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:18:58.562964" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:18:58.563143" 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-25T01:18:58.561598" elapsed="0.001569"/>
</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-25T01:18:58.563400" elapsed="0.000166"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:18:58.564095" level="INFO">${ds_type} = operational</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-25T01:18:58.563731" elapsed="0.000392"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:58.564531" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:58.564285" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:18:58.564993" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:18:58.564711" elapsed="0.000313"/>
</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-25T01:18:58.565435" 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-25T01:18:58.565696" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:58.565547" elapsed="0.000206"/>
</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-25T01:18:58.565923" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:58.565779" elapsed="0.000215"/>
</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-25T01:18:58.566164" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:18:58.566019" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:18:58.565526" elapsed="0.000714"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:18:58.565263" elapsed="0.001001"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:58.565074" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:18:58.566330" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:18:58.566534" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:18:58.566583" 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-25T01:18:58.560847" elapsed="0.005760"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:18:58.567085" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:18:58.567170" 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-25T01:18:58.566787" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:18:58.567781" 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-25T01:18:58.567498" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:18:58.567265" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:18:58.567246" elapsed="0.000710">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-25T01:18:58.568131" elapsed="0.000022"/>
</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-25T01:18:58.568307" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:18:58.568373" elapsed="0.000015"/>
</return>
<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>
<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-25T01:18:58.558045" elapsed="0.010436">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:18:58.557790" elapsed="0.010761">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:18:58.557640" elapsed="0.010966">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:18:58.557240" elapsed="0.011456">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:18:58.568935" elapsed="0.000029"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:58.530526" elapsed="0.038561">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:00.596427" elapsed="0.000317"/>
</kw>
<msg time="2026-04-25T01:19:00.596811" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:00.595733" elapsed="0.001140"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:00.595259" elapsed="0.001696"/>
</kw>
<msg time="2026-04-25T01:19:00.597021" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:00.586607" elapsed="0.010460"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:00.586133" elapsed="0.011011"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:00.597610" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:00.597344" elapsed="0.000313"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:00.602984" 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-25T01:19:00.602567" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:00.603470" 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-25T01:19:00.603177" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:00.603545" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:00.603703" 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-25T01:19:00.602137" elapsed="0.001590"/>
</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-25T01:19:00.603895" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:00.604584" level="INFO">${ds_type} = operational</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-25T01:19:00.604233" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:00.605033" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:00.604772" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:00.605446" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:00.605209" 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-25T01:19:00.605872" elapsed="0.000025"/>
</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-25T01:19:00.606148" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:00.605997" elapsed="0.000206"/>
</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-25T01:19:00.606368" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:00.606227" elapsed="0.000194"/>
</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-25T01:19:00.606656" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:00.606445" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:00.605963" elapsed="0.000773"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:00.605700" elapsed="0.001060"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:00.605518" elapsed="0.001267"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:00.606824" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:00.607046" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:00.607092" 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-25T01:19:00.601382" elapsed="0.005738"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:00.607756" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:00.607836" 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-25T01:19:00.607293" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:00.608491" 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-25T01:19:00.608210" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:00.607984" elapsed="0.000648">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:00.607949" elapsed="0.000715">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-25T01:19:00.608820" elapsed="0.000022"/>
</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-25T01:19:00.609014" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:00.609083" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:00.598713" elapsed="0.010478">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:00.598450" elapsed="0.010811">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:00.598307" elapsed="0.011009">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:00.597890" elapsed="0.011514">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:00.609641" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:00.570051" elapsed="0.039707">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:02.636874" elapsed="0.000257"/>
</kw>
<msg time="2026-04-25T01:19:02.637197" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:02.636216" elapsed="0.001204"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:02.635721" elapsed="0.001784"/>
</kw>
<msg time="2026-04-25T01:19:02.637569" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:02.627114" elapsed="0.010504"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:02.626667" elapsed="0.011030"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:02.638237" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:02.637918" elapsed="0.000370"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:02.643685" 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-25T01:19:02.643298" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:02.644183" 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-25T01:19:02.643876" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:02.644256" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:19:02.644413" 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-25T01:19:02.642898" elapsed="0.001540"/>
</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-25T01:19:02.644595" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:02.645266" level="INFO">${ds_type} = operational</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-25T01:19:02.644912" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:02.645693" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:02.645453" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:02.646224" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:02.645936" elapsed="0.000314"/>
</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-25T01:19:02.646648" elapsed="0.000025"/>
</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-25T01:19:02.646931" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:02.646760" elapsed="0.000248"/>
</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-25T01:19:02.647178" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:02.647034" elapsed="0.000199"/>
</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-25T01:19:02.647412" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:02.647256" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:02.646740" elapsed="0.000747"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:02.646479" elapsed="0.001032"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:02.646297" elapsed="0.001239"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:02.647576" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:02.647777" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:02.647823" 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-25T01:19:02.642179" elapsed="0.005668"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:02.648313" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:02.648391" 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-25T01:19:02.648038" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:02.649126" 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-25T01:19:02.648759" elapsed="0.000443">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:02.648486" elapsed="0.000785">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:02.648468" elapsed="0.000834">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-25T01:19:02.649482" elapsed="0.000023"/>
</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-25T01:19:02.649659" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:02.649725" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:02.639329" elapsed="0.010503">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:02.639086" elapsed="0.010815">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:02.638923" elapsed="0.011033">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:02.638528" elapsed="0.011535">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:02.650356" elapsed="0.000031"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:02.610690" elapsed="0.039790">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:04.678251" elapsed="0.000237"/>
</kw>
<msg time="2026-04-25T01:19:04.678555" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:04.677571" elapsed="0.001045"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:04.677079" elapsed="0.001617"/>
</kw>
<msg time="2026-04-25T01:19:04.678832" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:04.668388" elapsed="0.010491"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:04.667915" elapsed="0.011042"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:04.679445" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:04.679177" elapsed="0.000314"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:04.684838" 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-25T01:19:04.684430" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:04.685348" 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-25T01:19:04.685056" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:04.685422" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:04.685581" 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-25T01:19:04.684025" elapsed="0.001581"/>
</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-25T01:19:04.685766" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:04.686451" level="INFO">${ds_type} = operational</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-25T01:19:04.686117" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:04.686873" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:04.686636" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:04.687355" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:04.687104" elapsed="0.000278"/>
</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-25T01:19:04.687778" elapsed="0.000023"/>
</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-25T01:19:04.688050" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:04.687886" elapsed="0.000236"/>
</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-25T01:19:04.688291" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:04.688147" elapsed="0.000198"/>
</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-25T01:19:04.688509" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:04.688368" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:04.687867" elapsed="0.000717"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:04.687610" elapsed="0.000997"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:04.687429" elapsed="0.001203"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:04.688671" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:04.688869" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:04.688915" 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-25T01:19:04.683296" elapsed="0.005643"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:04.689602" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:04.689681" 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-25T01:19:04.689132" elapsed="0.000574"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:04.690292" 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-25T01:19:04.690014" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:04.689777" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:04.689759" elapsed="0.000700">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-25T01:19:04.690613" elapsed="0.000022"/>
</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-25T01:19:04.690838" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:04.690906" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:04.680572" elapsed="0.010459">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:04.680300" elapsed="0.010801">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:04.680150" elapsed="0.011007">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:04.679724" elapsed="0.011526">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:04.691488" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:04.651387" elapsed="0.040217">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:06.718377" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:19:06.718689" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:06.717702" elapsed="0.001049"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:06.717235" elapsed="0.001603"/>
</kw>
<msg time="2026-04-25T01:19:06.718884" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:06.708582" elapsed="0.010348"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:06.708164" elapsed="0.010857"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:06.719488" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:06.719223" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:06.724839" 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-25T01:19:06.724454" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:06.725356" 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-25T01:19:06.725066" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:06.725430" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:19:06.725587" 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-25T01:19:06.724079" elapsed="0.001532"/>
</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-25T01:19:06.725764" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:06.726465" level="INFO">${ds_type} = operational</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-25T01:19:06.726126" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:06.726890" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:06.726652" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:06.727320" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:06.727080" elapsed="0.000266"/>
</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-25T01:19:06.727748" 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-25T01:19:06.728079" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:06.727855" elapsed="0.000289"/>
</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-25T01:19:06.728318" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:06.728169" elapsed="0.000204"/>
</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-25T01:19:06.728539" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:06.728397" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:06.727836" elapsed="0.000778"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:06.727579" elapsed="0.001059"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:06.727392" elapsed="0.001271"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:06.728702" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:06.728907" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:06.728952" 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-25T01:19:06.723345" elapsed="0.005658"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:06.729452" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:06.729529" 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-25T01:19:06.729179" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:06.730136" 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-25T01:19:06.729843" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:06.729621" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:06.729604" elapsed="0.000706">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-25T01:19:06.730465" elapsed="0.000022"/>
</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-25T01:19:06.730640" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:06.730706" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:06.720555" elapsed="0.010256">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:06.720318" elapsed="0.010562">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:06.720176" elapsed="0.010760">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:06.719765" elapsed="0.011276">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:06.731278" elapsed="0.000028"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:06.692494" elapsed="0.038903">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:08.759647" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:19:08.759957" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:08.758915" elapsed="0.001129"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:08.758351" elapsed="0.001775"/>
</kw>
<msg time="2026-04-25T01:19:08.760174" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:08.749751" elapsed="0.010477"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:08.749297" elapsed="0.011009"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:08.760860" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:08.760521" elapsed="0.000385"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:08.766112" 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-25T01:19:08.765707" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:08.766590" 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-25T01:19:08.766301" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:08.766663" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:19:08.766820" 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-25T01:19:08.765323" elapsed="0.001522"/>
</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-25T01:19:08.767016" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:08.767665" level="INFO">${ds_type} = operational</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-25T01:19:08.767333" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:08.768106" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:08.767849" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:08.768536" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:08.768281" elapsed="0.000281"/>
</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-25T01:19:08.768985" elapsed="0.000026"/>
</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-25T01:19:08.769249" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:08.769098" elapsed="0.000206"/>
</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-25T01:19:08.769470" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:08.769328" elapsed="0.000196"/>
</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-25T01:19:08.769690" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:08.769547" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:08.769079" elapsed="0.000684"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:08.768791" elapsed="0.000996"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:08.768608" elapsed="0.001204"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:08.769851" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:08.770066" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:08.770113" 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-25T01:19:08.764563" elapsed="0.005575"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:08.770585" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:08.770665" 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-25T01:19:08.770314" elapsed="0.000376"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:08.771479" 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-25T01:19:08.771191" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:08.770939" elapsed="0.000680">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:08.770742" elapsed="0.000909">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-25T01:19:08.771808" elapsed="0.000022"/>
</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-25T01:19:08.772002" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:08.772070" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:08.761956" elapsed="0.010222">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:08.761723" elapsed="0.010566">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:08.761582" elapsed="0.010764">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:08.761183" elapsed="0.011252">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:08.772674" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:08.732242" elapsed="0.040551">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:10.799661" elapsed="0.000244"/>
</kw>
<msg time="2026-04-25T01:19:10.799985" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:10.798997" elapsed="0.001052"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:10.798508" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:19:10.800177" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:10.789566" elapsed="0.010655"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:10.789140" elapsed="0.011192"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:10.800795" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:10.800535" elapsed="0.000306"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:10.806240" 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-25T01:19:10.805817" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:10.806732" 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-25T01:19:10.806438" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:10.806806" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:19:10.806989" 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-25T01:19:10.805434" elapsed="0.001582"/>
</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-25T01:19:10.807179" elapsed="0.000183"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:10.807860" level="INFO">${ds_type} = operational</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-25T01:19:10.807525" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:10.809043" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:10.808062" elapsed="0.001009"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:10.809465" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:10.809223" elapsed="0.000268"/>
</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-25T01:19:10.809917" elapsed="0.000025"/>
</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-25T01:19:10.810210" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:10.810043" elapsed="0.000223"/>
</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-25T01:19:10.810438" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:10.810290" elapsed="0.000200"/>
</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-25T01:19:10.810654" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:10.810513" elapsed="0.000255"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:10.810023" elapsed="0.000770"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:10.809746" elapsed="0.001071"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:10.809539" elapsed="0.001303"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:10.810882" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:10.811097" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:10.811143" 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-25T01:19:10.804685" elapsed="0.006482"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:10.811637" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:10.811714" 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-25T01:19:10.811343" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:10.812339" 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-25T01:19:10.812041" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:10.811807" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:10.811788" elapsed="0.000724">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-25T01:19:10.812666" elapsed="0.000022"/>
</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-25T01:19:10.812841" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:10.812906" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:10.801861" elapsed="0.011167">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:10.801628" elapsed="0.011471">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:10.801487" elapsed="0.011667">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:10.801090" elapsed="0.012151">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:10.813476" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:10.774227" elapsed="0.039365">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:12.841768" elapsed="0.000265"/>
</kw>
<msg time="2026-04-25T01:19:12.842116" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:12.841097" elapsed="0.001091"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:12.840609" elapsed="0.001660"/>
</kw>
<msg time="2026-04-25T01:19:12.842316" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:12.831867" elapsed="0.010492"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:12.831438" elapsed="0.010995"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:12.842917" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:12.842637" elapsed="0.000341"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:12.848307" 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-25T01:19:12.847856" elapsed="0.000479"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:12.848877" 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-25T01:19:12.848577" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:12.848954" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:19:12.849135" 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-25T01:19:12.847454" elapsed="0.001705"/>
</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-25T01:19:12.849317" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:12.849986" level="INFO">${ds_type} = operational</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-25T01:19:12.849634" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:12.850417" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:12.850175" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:12.850833" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:12.850594" elapsed="0.000264"/>
</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-25T01:19:12.851311" 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-25T01:19:12.851575" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:12.851424" elapsed="0.000205"/>
</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-25T01:19:12.851794" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:12.851653" elapsed="0.000193"/>
</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-25T01:19:12.852025" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:12.851869" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:12.851403" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:12.851140" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:12.850905" elapsed="0.001244"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:12.852190" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:12.852388" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:12.852434" 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-25T01:19:12.846702" elapsed="0.005755"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:12.852903" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:12.852996" 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-25T01:19:12.852629" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:12.853782" 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-25T01:19:12.853495" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:12.853266" elapsed="0.000660">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:12.853071" elapsed="0.000886">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-25T01:19:12.854130" elapsed="0.000022"/>
</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-25T01:19:12.854307" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:12.854371" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:12.844057" elapsed="0.010422">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:12.843798" elapsed="0.010749">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:12.843649" elapsed="0.010952">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:12.843245" elapsed="0.011442">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:12.854925" elapsed="0.000075"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:12.814559" elapsed="0.040555">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:14.884266" elapsed="0.000258"/>
</kw>
<msg time="2026-04-25T01:19:14.884592" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:14.883488" elapsed="0.001168"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:14.882981" elapsed="0.001754"/>
</kw>
<msg time="2026-04-25T01:19:14.884782" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:14.874134" elapsed="0.010692"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:14.873585" elapsed="0.011320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:14.885407" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:14.885128" elapsed="0.000341"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:14.890857" 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-25T01:19:14.890464" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:14.891357" 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-25T01:19:14.891064" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:14.891431" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:14.891590" 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-25T01:19:14.890086" elapsed="0.001528"/>
</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-25T01:19:14.891773" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:14.892448" level="INFO">${ds_type} = operational</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-25T01:19:14.892104" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:14.892876" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:14.892637" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:14.893310" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:14.893068" elapsed="0.000267"/>
</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-25T01:19:14.893749" elapsed="0.000025"/>
</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-25T01:19:14.894021" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:14.893858" elapsed="0.000221"/>
</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-25T01:19:14.894247" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:14.894104" elapsed="0.000198"/>
</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-25T01:19:14.894466" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:14.894324" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:14.893838" elapsed="0.000703"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:14.893579" elapsed="0.000985"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:14.893382" elapsed="0.001207"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:14.894628" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:14.894827" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:14.894874" 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-25T01:19:14.889318" elapsed="0.005579"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:14.895429" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:14.895507" 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-25T01:19:14.895154" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:14.896114" 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-25T01:19:14.895822" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:14.895601" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:14.895582" elapsed="0.000702">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-25T01:19:14.896441" elapsed="0.000023"/>
</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-25T01:19:14.896617" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:14.896683" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:14.886508" elapsed="0.010281">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:14.886269" elapsed="0.010594">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:14.886126" elapsed="0.010792">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:14.885708" elapsed="0.011316">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:14.897262" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:14.856021" elapsed="0.041358">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:16.925907" elapsed="0.000270"/>
</kw>
<msg time="2026-04-25T01:19:16.926247" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:16.925218" elapsed="0.001095"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:16.924715" elapsed="0.001681"/>
</kw>
<msg time="2026-04-25T01:19:16.926444" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:16.916048" elapsed="0.010441"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:16.915563" elapsed="0.011001"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:16.927045" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:16.926766" elapsed="0.000326"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:16.932354" 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-25T01:19:16.931949" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:16.932834" 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-25T01:19:16.932545" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:16.932908" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:19:16.933084" 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-25T01:19:16.931552" elapsed="0.001557"/>
</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-25T01:19:16.933343" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:16.934035" level="INFO">${ds_type} = operational</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-25T01:19:16.933668" elapsed="0.000395"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:16.934474" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:16.934226" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:16.934910" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:16.934666" elapsed="0.000271"/>
</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-25T01:19:16.935367" elapsed="0.000025"/>
</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-25T01:19:16.935679" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:16.935479" elapsed="0.000260"/>
</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-25T01:19:16.935914" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:16.935765" elapsed="0.000219"/>
</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-25T01:19:16.936152" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:16.936008" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:16.935459" elapsed="0.000767"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:16.935193" elapsed="0.001056"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:16.935006" elapsed="0.001269"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:16.936313" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:16.936515" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:16.936562" 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-25T01:19:16.930795" elapsed="0.005790"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:16.937238" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:16.937317" 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-25T01:19:16.936759" elapsed="0.000583"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:16.937919" 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-25T01:19:16.937636" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:16.937412" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:16.937393" elapsed="0.000718">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-25T01:19:16.938268" elapsed="0.000022"/>
</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-25T01:19:16.938447" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:16.938513" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:16.928184" elapsed="0.010436">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:16.927932" elapsed="0.010758">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:16.927787" elapsed="0.010958">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:16.927331" elapsed="0.011501">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:16.939085" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:16.898341" elapsed="0.040861">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:18.966924" elapsed="0.000350"/>
</kw>
<msg time="2026-04-25T01:19:18.967340" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:18.966273" elapsed="0.001128"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:18.965782" elapsed="0.001699"/>
</kw>
<msg time="2026-04-25T01:19:18.967528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:18.957215" elapsed="0.010357"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:18.956756" elapsed="0.010891"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:18.968120" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:18.967843" elapsed="0.000324"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:18.973556" 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-25T01:19:18.973155" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:18.974047" 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-25T01:19:18.973743" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:18.974123" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:19:18.974282" 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-25T01:19:18.972758" elapsed="0.001549"/>
</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-25T01:19:18.974467" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:18.975127" level="INFO">${ds_type} = operational</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-25T01:19:18.974779" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:18.975548" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:18.975312" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:18.975956" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:18.975721" elapsed="0.000275"/>
</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-25T01:19:18.976390" 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-25T01:19:18.976644" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:18.976497" elapsed="0.000201"/>
</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-25T01:19:18.976866" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:18.976723" elapsed="0.000196"/>
</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-25T01:19:18.977114" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:18.976942" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:18.976477" elapsed="0.000714"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:18.976223" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:18.976043" elapsed="0.001195"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:18.977277" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:18.977512" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:18.977580" 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-25T01:19:18.972031" elapsed="0.005579"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:18.978081" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:18.978159" 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-25T01:19:18.977791" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:18.978788" 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-25T01:19:18.978511" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:18.978291" elapsed="0.000637">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:18.978272" elapsed="0.000687">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-25T01:19:18.979130" elapsed="0.000022"/>
</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-25T01:19:18.979304" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:18.979369" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:18.969191" elapsed="0.010284">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:18.968941" elapsed="0.010603">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:18.968799" elapsed="0.010800">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:18.968400" elapsed="0.011287">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:18.979923" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:18.940084" elapsed="0.039971">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:21.007128" elapsed="0.000249"/>
</kw>
<msg time="2026-04-25T01:19:21.007446" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:21.006372" elapsed="0.001137"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:21.005851" elapsed="0.001738"/>
</kw>
<msg time="2026-04-25T01:19:21.007635" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:20.997066" elapsed="0.010613"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:20.996589" elapsed="0.011164"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:21.008227" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:21.007950" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:21.013705" 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-25T01:19:21.013295" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:21.014216" 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-25T01:19:21.013898" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:21.014291" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:21.014471" 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-25T01:19:21.012875" elapsed="0.001623"/>
</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-25T01:19:21.014656" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:21.015415" level="INFO">${ds_type} = operational</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-25T01:19:21.015018" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:21.015904" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:21.015614" elapsed="0.000321"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:21.016540" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:21.016228" elapsed="0.000352"/>
</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-25T01:19:21.017113" elapsed="0.000033"/>
</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-25T01:19:21.017455" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:21.017260" elapsed="0.000265"/>
</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-25T01:19:21.017743" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:21.017557" elapsed="0.000255"/>
</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-25T01:19:21.018047" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:21.017842" elapsed="0.000272"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:21.017231" elapsed="0.000914"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:21.016877" elapsed="0.001299"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:21.016641" elapsed="0.001565"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:21.018257" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:19:21.018508" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:21.018566" 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-25T01:19:21.012046" elapsed="0.006550"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:21.019429" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:21.019528" 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-25T01:19:21.018821" elapsed="0.000738"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:21.020265" 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-25T01:19:21.019931" elapsed="0.000410">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:21.019646" elapsed="0.000763">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:21.019624" elapsed="0.000817">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-25T01:19:21.020597" elapsed="0.000022"/>
</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-25T01:19:21.020788" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:21.020859" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:21.009301" elapsed="0.011686">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:21.009063" elapsed="0.012000">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:21.008906" elapsed="0.012212">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:21.008505" elapsed="0.012699">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:21.021458" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:20.981049" elapsed="0.040533">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:23.049878" elapsed="0.000254"/>
</kw>
<msg time="2026-04-25T01:19:23.050197" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:23.049213" elapsed="0.001046"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:23.048733" elapsed="0.001611"/>
</kw>
<msg time="2026-04-25T01:19:23.050462" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:23.040152" elapsed="0.010357"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:23.039721" elapsed="0.010864"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:23.051053" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:23.050778" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:23.056417" 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-25T01:19:23.056033" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:23.056936" 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-25T01:19:23.056606" elapsed="0.000372"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:23.057028" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:23.057188" 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-25T01:19:23.055641" elapsed="0.001572"/>
</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-25T01:19:23.057370" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:23.058038" level="INFO">${ds_type} = operational</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-25T01:19:23.057688" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:23.058471" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:23.058225" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:23.058902" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:23.058645" elapsed="0.000283"/>
</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-25T01:19:23.059338" elapsed="0.000030"/>
</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-25T01:19:23.059601" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:23.059452" elapsed="0.000210"/>
</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-25T01:19:23.059828" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:23.059686" elapsed="0.000195"/>
</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-25T01:19:23.060065" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:23.059904" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:23.059433" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:23.059171" elapsed="0.000994"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:23.058989" elapsed="0.001201"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:23.060228" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:23.060432" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:23.060479" 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-25T01:19:23.054904" elapsed="0.005598"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:23.060990" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:23.061069" 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-25T01:19:23.060704" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:23.061682" 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-25T01:19:23.061378" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:23.061162" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:23.061144" elapsed="0.000711">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-25T01:19:23.062024" elapsed="0.000022"/>
</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-25T01:19:23.062238" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:23.062304" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:23.052152" elapsed="0.010263">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:23.051899" elapsed="0.010584">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:23.051728" elapsed="0.010809">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:23.051331" elapsed="0.011293">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:23.062865" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:23.022505" elapsed="0.040492">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:25.092361" elapsed="0.000244"/>
</kw>
<msg time="2026-04-25T01:19:25.092671" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:25.091676" elapsed="0.001055"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:25.091187" elapsed="0.001626"/>
</kw>
<msg time="2026-04-25T01:19:25.092860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:25.082391" elapsed="0.010514"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:25.081928" elapsed="0.011069"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:25.093458" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:25.093198" elapsed="0.000306"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:25.098754" 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-25T01:19:25.098354" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:25.099253" 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-25T01:19:25.098943" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:25.099328" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:25.099487" 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-25T01:19:25.097905" elapsed="0.001606"/>
</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-25T01:19:25.099739" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:25.100432" level="INFO">${ds_type} = operational</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-25T01:19:25.100080" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:25.100863" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:25.100622" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:25.101296" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:25.101055" elapsed="0.000267"/>
</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-25T01:19:25.101723" 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-25T01:19:25.102113" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:25.101831" elapsed="0.000345"/>
</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-25T01:19:25.102346" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:25.102201" elapsed="0.000200"/>
</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-25T01:19:25.102570" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:25.102424" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:25.101811" elapsed="0.000831"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:25.101552" elapsed="0.001113"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:25.101369" elapsed="0.001322"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:25.102730" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:25.102930" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:25.102991" 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-25T01:19:25.097181" elapsed="0.005836"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:25.103469" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:25.103554" 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-25T01:19:25.103190" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:25.104362" 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-25T01:19:25.104075" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:25.103832" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:25.103628" elapsed="0.000904">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-25T01:19:25.104688" elapsed="0.000022"/>
</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-25T01:19:25.104865" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:25.104932" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:25.094581" elapsed="0.010474">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:25.094339" elapsed="0.010787">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:25.094192" elapsed="0.010990">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:25.093738" elapsed="0.011532">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:25.105510" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:25.063938" elapsed="0.041690">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:27.133333" elapsed="0.000271"/>
</kw>
<msg time="2026-04-25T01:19:27.133687" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:27.132604" elapsed="0.001164"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:27.132114" elapsed="0.001755"/>
</kw>
<msg time="2026-04-25T01:19:27.133929" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:27.123294" elapsed="0.010708"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:27.122805" elapsed="0.011293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:27.134762" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:27.134355" elapsed="0.000462"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:27.140347" 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-25T01:19:27.139923" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:27.140829" 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-25T01:19:27.140540" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:27.140903" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:27.141082" 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-25T01:19:27.139517" elapsed="0.001590"/>
</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-25T01:19:27.141264" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:27.141920" level="INFO">${ds_type} = operational</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-25T01:19:27.141586" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:27.142365" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:27.142126" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:27.142777" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:27.142540" elapsed="0.000262"/>
</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-25T01:19:27.143230" elapsed="0.000030"/>
</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-25T01:19:27.143531" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:27.143368" elapsed="0.000222"/>
</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-25T01:19:27.143801" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:27.143615" elapsed="0.000244"/>
</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-25T01:19:27.144047" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:27.143882" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:27.143344" elapsed="0.000780"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:27.143046" elapsed="0.001101"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:27.142847" elapsed="0.001327"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:27.144214" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:27.144420" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:27.144475" 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-25T01:19:27.138780" elapsed="0.005726"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:27.145044" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:27.145125" 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-25T01:19:27.144720" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:27.145759" 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-25T01:19:27.145446" elapsed="0.000410">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:27.145223" elapsed="0.000716">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:27.145204" elapsed="0.000787">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-25T01:19:27.146156" elapsed="0.000022"/>
</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-25T01:19:27.146336" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:27.146405" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:27.135936" elapsed="0.010580">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:27.135689" elapsed="0.010960">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:27.135496" elapsed="0.011223">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:27.135091" elapsed="0.011724">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:27.147080" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:27.106569" elapsed="0.040634">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:29.174313" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:19:29.174622" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:29.173634" elapsed="0.001051"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:29.173158" elapsed="0.001607"/>
</kw>
<msg time="2026-04-25T01:19:29.174815" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:29.164413" elapsed="0.010446"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:29.163987" elapsed="0.010946"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:29.175410" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:29.175149" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:29.180699" 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-25T01:19:29.180308" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:29.181307" 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-25T01:19:29.180926" elapsed="0.000408"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:29.181384" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:29.181547" 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-25T01:19:29.179910" elapsed="0.001663"/>
</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-25T01:19:29.181734" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:29.182418" level="INFO">${ds_type} = operational</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-25T01:19:29.182074" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:29.182846" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:29.182606" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:29.183306" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:29.183059" elapsed="0.000273"/>
</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-25T01:19:29.183735" elapsed="0.000031"/>
</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-25T01:19:29.184032" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:29.183853" elapsed="0.000239"/>
</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-25T01:19:29.184263" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:29.184117" elapsed="0.000199"/>
</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-25T01:19:29.184481" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:29.184339" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:29.183833" elapsed="0.000787"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:29.183565" elapsed="0.001079"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:29.183380" elapsed="0.001290"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:29.184711" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:29.184941" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:29.185001" 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-25T01:19:29.179178" elapsed="0.005848"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:29.185478" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:29.185556" 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-25T01:19:29.185202" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:29.186357" 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-25T01:19:29.186074" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:29.185826" elapsed="0.000713">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:29.185632" elapsed="0.000940">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-25T01:19:29.186731" elapsed="0.000023"/>
</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-25T01:19:29.186908" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:29.186990" elapsed="0.000018"/>
</return>
<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>
<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-25T01:19:29.176498" elapsed="0.010751">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:29.176265" elapsed="0.011053">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:29.176103" elapsed="0.011269">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:29.175688" elapsed="0.011770">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:29.187717" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:29.148231" elapsed="0.039606">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:31.214492" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:19:31.214821" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:31.213810" elapsed="0.001079"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:31.213340" elapsed="0.001649"/>
</kw>
<msg time="2026-04-25T01:19:31.215039" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:31.204323" elapsed="0.010761"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:31.203806" elapsed="0.011351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:31.215656" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:31.215398" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:31.221387" 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-25T01:19:31.220985" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:31.221954" 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-25T01:19:31.221660" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:31.222058" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:19:31.222223" 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-25T01:19:31.220575" elapsed="0.001673"/>
</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-25T01:19:31.222412" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:31.223083" level="INFO">${ds_type} = operational</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-25T01:19:31.222728" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:31.223647" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:31.223399" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:31.224095" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:31.223828" elapsed="0.000293"/>
</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-25T01:19:31.224526" elapsed="0.000025"/>
</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-25T01:19:31.224787" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:31.224638" elapsed="0.000203"/>
</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-25T01:19:31.225028" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:31.224866" elapsed="0.000218"/>
</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-25T01:19:31.225248" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:31.225106" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:31.224618" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:31.224354" elapsed="0.000992"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:31.224168" elapsed="0.001203"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:31.225410" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:31.225611" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:31.225657" 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-25T01:19:31.219802" elapsed="0.005878"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:31.226153" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:31.226229" 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-25T01:19:31.225854" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:31.226826" 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-25T01:19:31.226541" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:31.226323" elapsed="0.000660">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:31.226304" elapsed="0.000714">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-25T01:19:31.227172" elapsed="0.000022"/>
</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-25T01:19:31.227390" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:31.227459" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:31.216736" elapsed="0.010829">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:31.216500" elapsed="0.011134">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:31.216356" elapsed="0.011333">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:31.215941" elapsed="0.011835">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:31.228034" elapsed="0.000072"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:31.188771" elapsed="0.039433">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:33.254056" elapsed="0.000269"/>
</kw>
<msg time="2026-04-25T01:19:33.254392" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:33.253371" elapsed="0.001084"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:33.252865" elapsed="0.001673"/>
</kw>
<msg time="2026-04-25T01:19:33.254586" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:33.244207" elapsed="0.010423"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:33.243756" elapsed="0.010950"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:33.255233" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:33.254904" elapsed="0.000380"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:33.260593" 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-25T01:19:33.260184" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:33.261136" 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-25T01:19:33.260816" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:33.261210" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:19:33.261384" 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-25T01:19:33.259790" elapsed="0.001619"/>
</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-25T01:19:33.261566" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:33.262252" level="INFO">${ds_type} = operational</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-25T01:19:33.261890" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:33.262695" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:33.262439" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:33.263135" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:33.262873" elapsed="0.000288"/>
</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-25T01:19:33.263571" 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-25T01:19:33.263836" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:33.263684" elapsed="0.000208"/>
</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-25T01:19:33.264076" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:33.263918" elapsed="0.000214"/>
</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-25T01:19:33.264298" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:33.264156" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:33.263664" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:33.263393" elapsed="0.001005"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:33.263208" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:33.264462" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:19:33.264666" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:33.264712" 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-25T01:19:33.259073" elapsed="0.005748"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:33.265565" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:33.265651" 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-25T01:19:33.265087" elapsed="0.000589"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:33.266271" 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-25T01:19:33.265987" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:33.265749" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:33.265730" elapsed="0.000713">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-25T01:19:33.266614" elapsed="0.000028"/>
</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-25T01:19:33.266827" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:33.266904" elapsed="0.000018"/>
</return>
<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>
<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-25T01:19:33.256402" elapsed="0.010645">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:33.256161" elapsed="0.010995">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:33.256013" elapsed="0.011228">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:33.255527" elapsed="0.011819">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:33.267648" elapsed="0.000041"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:33.229196" elapsed="0.038619">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:35.296266" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:19:35.296582" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:35.295560" elapsed="0.001086"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:35.295038" elapsed="0.001692"/>
</kw>
<msg time="2026-04-25T01:19:35.296776" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:35.286238" elapsed="0.010583"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:35.285664" elapsed="0.011233"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:35.297394" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:35.297133" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:35.303058" 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-25T01:19:35.302617" elapsed="0.000471"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:35.303543" 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-25T01:19:35.303255" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:35.303617" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:19:35.303782" 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-25T01:19:35.302204" elapsed="0.001602"/>
</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-25T01:19:35.304057" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:35.304737" level="INFO">${ds_type} = operational</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-25T01:19:35.304391" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:35.305183" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:35.304924" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:35.305603" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:35.305361" elapsed="0.000268"/>
</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-25T01:19:35.306059" elapsed="0.000025"/>
</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-25T01:19:35.306382" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:35.306185" elapsed="0.000257"/>
</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-25T01:19:35.306614" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:35.306469" elapsed="0.000198"/>
</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-25T01:19:35.306833" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:35.306690" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:35.306161" elapsed="0.000746"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:35.305866" elapsed="0.001065"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:35.305677" elapsed="0.001282"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:35.307018" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:19:35.307227" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:35.307274" 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-25T01:19:35.301461" elapsed="0.005836"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:35.307759" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:35.307838" 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-25T01:19:35.307472" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:35.308473" 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-25T01:19:35.308184" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:35.307933" elapsed="0.000685">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:35.307913" elapsed="0.000736">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-25T01:19:35.308803" elapsed="0.000022"/>
</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-25T01:19:35.308998" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:35.309065" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:35.298562" elapsed="0.010611">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:35.298304" elapsed="0.010939">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:35.298112" elapsed="0.011187">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:35.297685" elapsed="0.011709">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:35.309639" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:35.268683" elapsed="0.041074">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:37.339999" elapsed="0.000321"/>
</kw>
<msg time="2026-04-25T01:19:37.340396" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:37.339106" elapsed="0.001356"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:37.338595" elapsed="0.001952"/>
</kw>
<msg time="2026-04-25T01:19:37.340595" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:37.329517" elapsed="0.011125"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:37.328983" elapsed="0.011738"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:37.342014" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:37.340997" elapsed="0.001129"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:37.347857" 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-25T01:19:37.347331" elapsed="0.000554"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:37.348375" 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-25T01:19:37.348069" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:37.348458" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:19:37.348625" 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-25T01:19:37.346928" elapsed="0.001722"/>
</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-25T01:19:37.348808" elapsed="0.000271"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:37.349621" level="INFO">${ds_type} = operational</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-25T01:19:37.349260" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:37.350078" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:37.349808" elapsed="0.000297"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:37.350537" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:37.350274" elapsed="0.000289"/>
</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-25T01:19:37.350990" elapsed="0.000027"/>
</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-25T01:19:37.351267" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:37.351105" elapsed="0.000235"/>
</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-25T01:19:37.351525" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:37.351372" elapsed="0.000208"/>
</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-25T01:19:37.351753" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:37.351604" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:37.351084" elapsed="0.000745"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:37.350800" elapsed="0.001053"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:37.350610" elapsed="0.001268"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:37.351918" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:37.352140" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:37.352187" 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-25T01:19:37.346146" elapsed="0.006065"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:37.352922" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:37.353115" 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-25T01:19:37.352417" elapsed="0.000731"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:37.353853" 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-25T01:19:37.353556" elapsed="0.000376">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:37.353314" elapsed="0.000705">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:37.353292" elapsed="0.000763">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-25T01:19:37.354217" elapsed="0.000023"/>
</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-25T01:19:37.354409" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:37.354480" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:37.343379" elapsed="0.011209">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:37.343124" elapsed="0.011536">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:37.342952" elapsed="0.011766">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:37.342519" elapsed="0.012290">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:37.355072" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:37.310740" elapsed="0.044452">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:39.384169" elapsed="0.000254"/>
</kw>
<msg time="2026-04-25T01:19:39.384493" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:39.383481" elapsed="0.001081"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:39.382989" elapsed="0.001653"/>
</kw>
<msg time="2026-04-25T01:19:39.384689" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:39.373739" elapsed="0.010994"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:39.373275" elapsed="0.011534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:39.385314" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:39.385036" elapsed="0.000325"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:39.391350" 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-25T01:19:39.390907" elapsed="0.000471"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:39.391834" 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-25T01:19:39.391543" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:39.391910" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:19:39.392098" 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-25T01:19:39.390456" elapsed="0.001668"/>
</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-25T01:19:39.392293" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:39.392986" level="INFO">${ds_type} = operational</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-25T01:19:39.392630" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:39.393496" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:39.393198" elapsed="0.000324"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:39.394039" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:39.393775" elapsed="0.000290"/>
</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-25T01:19:39.394511" elapsed="0.000036"/>
</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-25T01:19:39.394794" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:39.394641" elapsed="0.000210"/>
</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-25T01:19:39.395050" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:39.394877" elapsed="0.000232"/>
</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-25T01:19:39.395288" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:39.395133" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:39.394619" elapsed="0.000746"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:39.394335" elapsed="0.001054"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:39.394115" elapsed="0.001301"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:39.395455" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:39.395658" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:39.395703" 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-25T01:19:39.389635" elapsed="0.006091"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:39.396221" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:39.396314" 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-25T01:19:39.395901" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:39.396982" 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-25T01:19:39.396641" elapsed="0.000427">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:39.396414" elapsed="0.000724">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:39.396393" elapsed="0.000779">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-25T01:19:39.397381" elapsed="0.000025"/>
</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-25T01:19:39.397569" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:39.397639" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:39.386568" elapsed="0.011181">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:39.386269" elapsed="0.011595">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:39.386075" elapsed="0.011852">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:39.385600" elapsed="0.012435">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:39.398309" elapsed="0.000029"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:39.356268" elapsed="0.042167">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:41.427191" elapsed="0.000240"/>
</kw>
<msg time="2026-04-25T01:19:41.427505" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:41.426521" elapsed="0.001048"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:41.426049" elapsed="0.001601"/>
</kw>
<msg time="2026-04-25T01:19:41.427760" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:41.417313" elapsed="0.010493"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:41.416877" elapsed="0.011006"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:41.428381" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:41.428119" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:41.433648" 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-25T01:19:41.433259" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:41.434151" 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-25T01:19:41.433839" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:41.434226" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:19:41.434384" 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-25T01:19:41.432856" elapsed="0.001552"/>
</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-25T01:19:41.434564" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:41.435244" level="INFO">${ds_type} = operational</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-25T01:19:41.434882" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:41.435670" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:41.435431" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:41.436135" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:41.435845" elapsed="0.000316"/>
</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-25T01:19:41.436554" 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-25T01:19:41.436811" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:41.436663" elapsed="0.000204"/>
</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-25T01:19:41.437050" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:41.436891" elapsed="0.000214"/>
</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-25T01:19:41.437270" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:41.437127" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:41.436643" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:41.436386" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:41.436207" elapsed="0.001186"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:41.437431" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:41.437628" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:41.437673" 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-25T01:19:41.432130" elapsed="0.005567"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:41.438168" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:41.438246" 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-25T01:19:41.437874" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:41.439122" 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-25T01:19:41.438792" elapsed="0.000406">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:41.438554" elapsed="0.000713">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:41.438335" elapsed="0.000963">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-25T01:19:41.439455" elapsed="0.000022"/>
</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-25T01:19:41.439672" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:41.439739" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:41.429442" elapsed="0.010402">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:41.429211" elapsed="0.010702">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:41.429073" elapsed="0.010937">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:41.428658" elapsed="0.011446">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:41.440344" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:41.399738" elapsed="0.040723">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:43.467396" elapsed="0.000253"/>
</kw>
<msg time="2026-04-25T01:19:43.467725" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:43.466710" elapsed="0.001081"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:43.466240" elapsed="0.001633"/>
</kw>
<msg time="2026-04-25T01:19:43.467920" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:43.457496" elapsed="0.010483"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:43.457055" elapsed="0.011002"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:43.468520" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:43.468261" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:43.473993" 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-25T01:19:43.473587" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:43.474471" 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-25T01:19:43.474184" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:43.474543" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:43.474706" 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-25T01:19:43.473182" elapsed="0.001548"/>
</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-25T01:19:43.474886" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:43.475551" level="INFO">${ds_type} = operational</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-25T01:19:43.475218" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:43.475993" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:43.475735" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:43.476411" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:43.476169" elapsed="0.000267"/>
</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-25T01:19:43.476837" elapsed="0.000023"/>
</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-25T01:19:43.477185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:43.476946" elapsed="0.000296"/>
</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-25T01:19:43.477447" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:43.477267" elapsed="0.000234"/>
</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-25T01:19:43.477668" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:43.477524" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:43.476926" elapsed="0.000817"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:43.476666" elapsed="0.001101"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:43.476481" elapsed="0.001312"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:43.477832" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:43.478048" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:43.478094" 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-25T01:19:43.472448" elapsed="0.005669"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:43.478564" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:43.478641" 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-25T01:19:43.478291" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:43.479246" 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-25T01:19:43.478948" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:43.478732" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:43.478714" elapsed="0.000704">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-25T01:19:43.479572" 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-25T01:19:43.479745" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:43.479810" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:43.469626" elapsed="0.010291">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:43.469385" elapsed="0.010618">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:43.469215" elapsed="0.010846">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:43.468799" elapsed="0.011351">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:43.480388" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:43.441383" elapsed="0.039121">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:45.509111" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:19:45.509433" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:45.508403" elapsed="0.001097"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:45.507901" elapsed="0.001680"/>
</kw>
<msg time="2026-04-25T01:19:45.509674" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:45.499171" elapsed="0.010551"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:45.498670" elapsed="0.011129"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:45.510374" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:45.510024" elapsed="0.000400"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:45.518158" 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-25T01:19:45.517494" elapsed="0.000705"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:45.518857" 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-25T01:19:45.518451" elapsed="0.000432"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:45.518932" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:19:45.519113" 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-25T01:19:45.516907" elapsed="0.002231"/>
</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-25T01:19:45.519297" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:45.519958" level="INFO">${ds_type} = operational</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-25T01:19:45.519619" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:45.520404" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:45.520162" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:45.520819" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:45.520582" 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-25T01:19:45.521268" elapsed="0.000025"/>
</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-25T01:19:45.521537" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:45.521384" elapsed="0.000209"/>
</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-25T01:19:45.521781" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:45.521618" elapsed="0.000223"/>
</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-25T01:19:45.522023" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:45.521864" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:45.521362" elapsed="0.000737"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:45.521094" elapsed="0.001028"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:45.520892" elapsed="0.001257"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:45.522189" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:45.522391" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:45.522444" 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-25T01:19:45.515804" elapsed="0.006671"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:45.522990" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:45.523074" 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-25T01:19:45.522686" elapsed="0.000412"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:45.523877" 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-25T01:19:45.523588" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:45.523356" elapsed="0.000686">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:45.523150" elapsed="0.000924">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-25T01:19:45.524249" elapsed="0.000024"/>
</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-25T01:19:45.524431" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:45.524498" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:45.511818" elapsed="0.012788">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:45.511463" elapsed="0.013269">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:45.511254" elapsed="0.013535">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:45.510674" elapsed="0.014203">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:45.525139" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:45.481251" elapsed="0.044007">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:47.554225" elapsed="0.000239"/>
</kw>
<msg time="2026-04-25T01:19:47.554528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:47.553535" elapsed="0.001056"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:47.553027" elapsed="0.001644"/>
</kw>
<msg time="2026-04-25T01:19:47.554718" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:47.544424" elapsed="0.010339"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:47.543956" elapsed="0.010883"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:47.555312" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:47.555051" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:47.560801" 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-25T01:19:47.560411" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:47.561327" 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-25T01:19:47.561006" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:47.561406" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:19:47.561568" 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-25T01:19:47.560031" elapsed="0.001561"/>
</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-25T01:19:47.561748" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:47.562471" level="INFO">${ds_type} = operational</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-25T01:19:47.562125" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:47.562947" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:47.562693" elapsed="0.000296"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:47.563382" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:47.563141" elapsed="0.000267"/>
</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-25T01:19:47.563811" elapsed="0.000025"/>
</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-25T01:19:47.564086" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:47.563923" elapsed="0.000220"/>
</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-25T01:19:47.564309" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:47.564167" elapsed="0.000195"/>
</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-25T01:19:47.564527" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:47.564385" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:47.563903" elapsed="0.000760"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:47.563635" elapsed="0.001053"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:47.563454" elapsed="0.001259"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:47.564753" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:19:47.564956" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:47.565020" 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-25T01:19:47.559280" elapsed="0.005764"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:47.565575" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:47.565655" 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-25T01:19:47.565282" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:47.566273" 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-25T01:19:47.565991" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:47.565751" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:47.565733" elapsed="0.000714">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-25T01:19:47.566601" elapsed="0.000022"/>
</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-25T01:19:47.566775" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:47.566840" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:47.556379" elapsed="0.010567">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:47.556147" elapsed="0.010886">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:47.556004" elapsed="0.011084">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:47.555591" elapsed="0.011584">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:47.567410" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:47.526230" elapsed="0.041297">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:49.600353" elapsed="0.000315"/>
</kw>
<msg time="2026-04-25T01:19:49.600755" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:49.599599" elapsed="0.001242"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:49.599117" elapsed="0.001834"/>
</kw>
<msg time="2026-04-25T01:19:49.601042" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:49.587656" elapsed="0.013446"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:49.587047" elapsed="0.014144"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:49.601742" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:49.601433" elapsed="0.000363"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:49.607644" 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-25T01:19:49.607188" elapsed="0.000489"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:49.608360" 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-25T01:19:49.607976" elapsed="0.000416"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:49.608450" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:19:49.608652" 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-25T01:19:49.606658" elapsed="0.002028"/>
</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-25T01:19:49.608906" elapsed="0.000195"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:49.609622" level="INFO">${ds_type} = operational</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-25T01:19:49.609270" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:49.610092" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:49.609821" elapsed="0.000298"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:49.610520" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:49.610274" elapsed="0.000272"/>
</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-25T01:19:49.610984" elapsed="0.000027"/>
</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-25T01:19:49.611252" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:49.611102" elapsed="0.000207"/>
</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-25T01:19:49.611516" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:49.611334" elapsed="0.000255"/>
</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-25T01:19:49.611783" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:49.611613" elapsed="0.000226"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:49.611081" elapsed="0.000782"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:49.610793" elapsed="0.001094"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:49.610595" elapsed="0.001317"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:49.611951" elapsed="0.000045"/>
</return>
<msg time="2026-04-25T01:19:49.612180" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:49.612273" 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-25T01:19:49.605819" elapsed="0.006478"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:49.612958" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:49.613057" 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-25T01:19:49.612474" elapsed="0.000608"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:49.613669" 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-25T01:19:49.613379" elapsed="0.000372">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:49.613155" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:49.613136" elapsed="0.000720">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-25T01:19:49.614036" elapsed="0.000023"/>
</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-25T01:19:49.614219" elapsed="0.000028"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:49.614297" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:49.603070" elapsed="0.011339">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:49.602767" elapsed="0.011715">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:49.602583" elapsed="0.011958">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:49.602101" elapsed="0.012535">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:49.614913" elapsed="0.000096"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:49.568546" elapsed="0.046569">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:51.644073" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:19:51.644388" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:51.643336" elapsed="0.001116"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:51.642738" elapsed="0.001797"/>
</kw>
<msg time="2026-04-25T01:19:51.644584" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:51.633709" elapsed="0.010920"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:51.633276" elapsed="0.011430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:51.645200" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:51.644919" elapsed="0.000326"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:51.650703" 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-25T01:19:51.650311" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:51.651233" 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-25T01:19:51.650926" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:51.651307" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:19:51.651466" 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-25T01:19:51.649916" elapsed="0.001575"/>
</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-25T01:19:51.651647" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:51.652316" level="INFO">${ds_type} = operational</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-25T01:19:51.651977" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:51.652745" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:51.652504" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:51.653184" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:51.652921" elapsed="0.000291"/>
</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-25T01:19:51.653624" elapsed="0.000025"/>
</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-25T01:19:51.653886" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:51.653735" elapsed="0.000208"/>
</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-25T01:19:51.654129" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:51.653982" elapsed="0.000202"/>
</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-25T01:19:51.654351" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:51.654208" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:51.653715" elapsed="0.000712"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:51.653451" elapsed="0.001000"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:51.653260" elapsed="0.001217"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:51.654515" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:19:51.654717" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:51.654804" 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-25T01:19:51.649193" elapsed="0.005635"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:51.655373" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:51.655452" 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-25T01:19:51.655088" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:51.656074" 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-25T01:19:51.655772" elapsed="0.000374">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:51.655545" elapsed="0.000675">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:51.655527" elapsed="0.000723">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-25T01:19:51.656406" elapsed="0.000022"/>
</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-25T01:19:51.656604" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:51.656675" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:51.646301" elapsed="0.010482">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:51.646055" elapsed="0.010797">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:51.645896" elapsed="0.011011">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:51.645496" elapsed="0.011516">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:51.657251" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:51.616035" elapsed="0.041333">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:53.684977" elapsed="0.000295"/>
</kw>
<msg time="2026-04-25T01:19:53.685349" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:53.684207" elapsed="0.001218"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:53.683672" elapsed="0.001850"/>
</kw>
<msg time="2026-04-25T01:19:53.685583" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:53.673989" elapsed="0.011642"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:53.673377" elapsed="0.012335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:53.686242" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:53.685955" elapsed="0.000334"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:53.691777" 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-25T01:19:53.691366" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:53.692285" 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-25T01:19:53.691985" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:53.692361" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:53.692526" 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-25T01:19:53.690979" elapsed="0.001584"/>
</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-25T01:19:53.692847" elapsed="0.000244"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:53.693654" level="INFO">${ds_type} = operational</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-25T01:19:53.693285" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:53.694135" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:53.693848" elapsed="0.000318"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:53.694645" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:53.694358" elapsed="0.000317"/>
</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-25T01:19:53.695159" elapsed="0.000029"/>
</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-25T01:19:53.695451" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:53.695290" elapsed="0.000220"/>
</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-25T01:19:53.695696" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:53.695544" elapsed="0.000214"/>
</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-25T01:19:53.695931" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:53.695781" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:53.695267" elapsed="0.000759"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:53.694941" elapsed="0.001109"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:53.694729" elapsed="0.001348"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:53.696117" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:19:53.696325" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:53.696373" 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-25T01:19:53.690226" elapsed="0.006176"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:53.697129" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:53.697211" 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-25T01:19:53.696618" elapsed="0.000618"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:53.697833" 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-25T01:19:53.697544" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:53.697310" elapsed="0.000684">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:53.697290" elapsed="0.000738">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-25T01:19:53.698203" elapsed="0.000024"/>
</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-25T01:19:53.698389" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:53.698457" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:53.687497" elapsed="0.011073">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:53.687219" elapsed="0.011424">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:53.687059" elapsed="0.011640">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:53.686580" elapsed="0.012207">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:53.699047" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:53.657953" elapsed="0.041214">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:55.725370" elapsed="0.000345"/>
</kw>
<msg time="2026-04-25T01:19:55.725786" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:55.724647" elapsed="0.001206"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:55.724118" elapsed="0.001817"/>
</kw>
<msg time="2026-04-25T01:19:55.725999" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:55.715530" elapsed="0.010514"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:55.715076" elapsed="0.011043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:55.726585" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:55.726326" elapsed="0.000304"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:55.732174" 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-25T01:19:55.731737" elapsed="0.000466"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:55.732661" 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-25T01:19:55.732370" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:55.732737" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:19:55.732907" 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-25T01:19:55.731350" elapsed="0.001581"/>
</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-25T01:19:55.733108" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:55.733787" level="INFO">${ds_type} = operational</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-25T01:19:55.733449" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:55.734224" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:55.733986" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:55.734698" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:55.734397" elapsed="0.000327"/>
</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-25T01:19:55.735242" elapsed="0.000025"/>
</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-25T01:19:55.735518" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:55.735360" elapsed="0.000214"/>
</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-25T01:19:55.735741" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:55.735601" elapsed="0.000193"/>
</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-25T01:19:55.735973" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:55.735818" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:55.735338" elapsed="0.000712"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:55.735042" elapsed="0.001033"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:55.734777" elapsed="0.001325"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:55.736144" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:19:55.736354" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:55.736399" 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-25T01:19:55.730583" elapsed="0.005839"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:55.736892" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:55.736991" 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-25T01:19:55.736598" elapsed="0.000419"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:55.737696" 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-25T01:19:55.737384" elapsed="0.000388">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:55.737157" elapsed="0.000684">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:55.737137" elapsed="0.000736">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-25T01:19:55.738043" elapsed="0.000023"/>
</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-25T01:19:55.738221" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:55.738288" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:55.727775" elapsed="0.010620">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:55.727524" elapsed="0.010942">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:55.727378" elapsed="0.011144">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:55.726942" elapsed="0.011669">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:55.738877" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:55.700105" elapsed="0.038906">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:57.767952" elapsed="0.000294"/>
</kw>
<msg time="2026-04-25T01:19:57.768315" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:57.767248" elapsed="0.001133"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:57.766691" elapsed="0.001772"/>
</kw>
<msg time="2026-04-25T01:19:57.768509" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:57.757929" elapsed="0.010624"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:57.757380" elapsed="0.011248"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:57.769147" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:57.768839" elapsed="0.000354"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:57.774450" 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-25T01:19:57.774053" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:57.774931" 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-25T01:19:57.774641" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:57.775027" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:19:57.775190" 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-25T01:19:57.773659" elapsed="0.001556"/>
</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-25T01:19:57.775373" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:57.776152" level="INFO">${ds_type} = operational</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-25T01:19:57.775716" elapsed="0.000466"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:57.776595" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:57.776348" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:57.777106" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:57.776849" elapsed="0.000291"/>
</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-25T01:19:57.777586" elapsed="0.000025"/>
</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-25T01:19:57.777854" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:57.777703" elapsed="0.000207"/>
</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-25T01:19:57.778093" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:57.777935" elapsed="0.000213"/>
</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-25T01:19:57.778315" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:57.778171" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:57.777682" elapsed="0.000707"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:57.777407" elapsed="0.001006"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:57.777196" elapsed="0.001243"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:57.778481" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:19:57.778685" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:57.778731" 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-25T01:19:57.772919" elapsed="0.005836"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:57.779226" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:57.779304" 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-25T01:19:57.778928" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:57.780176" 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-25T01:19:57.779824" elapsed="0.000433">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:57.779597" elapsed="0.000729">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:57.779379" elapsed="0.000979">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-25T01:19:57.780515" elapsed="0.000022"/>
</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-25T01:19:57.780691" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:57.780757" elapsed="0.000015"/>
</return>
<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>
<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-25T01:19:57.770247" elapsed="0.010615">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:57.770007" elapsed="0.010923">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:57.769846" elapsed="0.011155">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:57.769445" elapsed="0.011645">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:57.781333" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:57.739822" elapsed="0.041628">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:19:59.808281" elapsed="0.000244"/>
</kw>
<msg time="2026-04-25T01:19:59.808589" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:59.807582" elapsed="0.001069"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:59.807086" elapsed="0.001645"/>
</kw>
<msg time="2026-04-25T01:19:59.808865" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:19:59.798474" elapsed="0.010438"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:19:59.798041" elapsed="0.010964"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:19:59.809496" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:19:59.809229" elapsed="0.000314"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:19:59.814889" 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-25T01:19:59.814498" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:59.815388" 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-25T01:19:59.815097" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:19:59.815461" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:19:59.815620" 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-25T01:19:59.814116" elapsed="0.001529"/>
</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-25T01:19:59.815801" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:19:59.816472" level="INFO">${ds_type} = operational</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-25T01:19:59.816134" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:59.816902" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:59.816660" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:19:59.817364" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:19:59.817119" elapsed="0.000271"/>
</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-25T01:19:59.817786" elapsed="0.000025"/>
</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-25T01:19:59.818059" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:59.817895" elapsed="0.000221"/>
</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-25T01:19:59.818284" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:59.818140" elapsed="0.000198"/>
</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-25T01:19:59.818505" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:19:59.818361" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:19:59.817875" elapsed="0.000706"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:19:59.817617" elapsed="0.000988"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:59.817435" elapsed="0.001194"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:19:59.818668" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:19:59.818871" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:19:59.818918" 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-25T01:19:59.813374" elapsed="0.005569"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:19:59.819408" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:19:59.819487" 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-25T01:19:59.819135" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:19:59.820092" 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-25T01:19:59.819801" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:19:59.819582" elapsed="0.000648">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:19:59.819563" elapsed="0.000699">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-25T01:19:59.820416" elapsed="0.000022"/>
</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-25T01:19:59.820632" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:19:59.820700" elapsed="0.000016"/>
</return>
<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>
<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-25T01:19:59.810573" elapsed="0.010237">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:19:59.810334" elapsed="0.010547">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:19:59.810192" elapsed="0.010745">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:19:59.809778" elapsed="0.011265">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:19:59.821307" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:19:59.782176" elapsed="0.039250">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:01.852814" elapsed="0.000278"/>
</kw>
<msg time="2026-04-25T01:20:01.853172" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:01.852119" elapsed="0.001130"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:01.851587" elapsed="0.001748"/>
</kw>
<msg time="2026-04-25T01:20:01.853383" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:01.842430" elapsed="0.010999"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:01.841873" elapsed="0.011643"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:01.854030" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:01.853735" elapsed="0.000343"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:01.859715" 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-25T01:20:01.859291" elapsed="0.000454"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:01.860254" 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-25T01:20:01.859911" elapsed="0.000371"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:01.860331" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:20:01.860496" 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-25T01:20:01.858832" elapsed="0.001688"/>
</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-25T01:20:01.860678" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:01.861505" level="INFO">${ds_type} = operational</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-25T01:20:01.861060" elapsed="0.000474"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:01.862019" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:01.861730" elapsed="0.000317"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:01.862546" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:01.862281" elapsed="0.000292"/>
</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-25T01:20:01.863026" elapsed="0.000027"/>
</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-25T01:20:01.863387" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:01.863146" elapsed="0.000299"/>
</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-25T01:20:01.863679" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:01.863489" elapsed="0.000257"/>
</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-25T01:20:01.863921" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:01.863771" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:01.863125" elapsed="0.000893"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:01.862827" elapsed="0.001216"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:01.862625" elapsed="0.001446"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:01.864113" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:01.864328" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:01.864375" 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-25T01:20:01.857992" elapsed="0.006408"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:01.864954" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:01.865057" 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-25T01:20:01.864595" elapsed="0.000487"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:01.865993" 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-25T01:20:01.865682" elapsed="0.000389">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:01.865436" elapsed="0.000707">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:01.865135" elapsed="0.001041">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-25T01:20:01.866388" elapsed="0.000024"/>
</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-25T01:20:01.866572" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:01.866640" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:01.855192" elapsed="0.011557">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:01.854906" elapsed="0.011932">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:01.854762" elapsed="0.012163">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:01.854359" elapsed="0.012688">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:01.867306" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:01.822135" elapsed="0.045342">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:03.894286" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:20:03.894603" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:03.893593" elapsed="0.001075"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:03.893095" elapsed="0.001674"/>
</kw>
<msg time="2026-04-25T01:20:03.894817" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:03.884220" elapsed="0.010642"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:03.883731" elapsed="0.011212"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:03.895557" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:03.895174" elapsed="0.000430"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:03.901191" 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-25T01:20:03.900759" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:03.901674" 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-25T01:20:03.901384" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:03.901748" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:03.901910" 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-25T01:20:03.900379" elapsed="0.001556"/>
</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-25T01:20:03.902111" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:03.902803" level="INFO">${ds_type} = operational</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-25T01:20:03.902435" elapsed="0.000396"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:03.903254" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:03.903010" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:03.903698" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:03.903457" elapsed="0.000266"/>
</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-25T01:20:03.904154" elapsed="0.000025"/>
</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-25T01:20:03.904418" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:03.904267" elapsed="0.000217"/>
</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-25T01:20:03.904658" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:03.904513" elapsed="0.000200"/>
</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-25T01:20:03.904878" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:03.904736" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:03.904247" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:03.903981" elapsed="0.001011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:03.903772" elapsed="0.001247"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:03.905059" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:20:03.905260" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:03.905306" 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-25T01:20:03.899624" elapsed="0.005705"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:03.905787" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:03.905866" 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-25T01:20:03.905503" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:03.906489" 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-25T01:20:03.906205" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:03.905975" elapsed="0.000656">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:03.905942" elapsed="0.000720">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-25T01:20:03.906816" elapsed="0.000022"/>
</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-25T01:20:03.907007" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:03.907075" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:03.896653" elapsed="0.010530">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:03.896413" elapsed="0.010887">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:03.896269" elapsed="0.011124">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:03.895846" elapsed="0.011648">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:03.907740" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:03.868450" elapsed="0.039410">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:05.934920" elapsed="0.000249"/>
</kw>
<msg time="2026-04-25T01:20:05.935234" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:05.934265" elapsed="0.001029"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:05.933783" elapsed="0.001592"/>
</kw>
<msg time="2026-04-25T01:20:05.935448" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:05.925214" elapsed="0.010300"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:05.924779" elapsed="0.010818"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:05.936074" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:05.935794" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:05.941356" 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-25T01:20:05.940952" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:05.941835" 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-25T01:20:05.941546" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:05.941909" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:05.942083" 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-25T01:20:05.940553" elapsed="0.001556"/>
</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-25T01:20:05.942266" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:05.942916" level="INFO">${ds_type} = operational</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-25T01:20:05.942583" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:05.943355" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:05.943118" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:05.943761" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:05.943528" elapsed="0.000258"/>
</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-25T01:20:05.944190" 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-25T01:20:05.944443" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:05.944297" elapsed="0.000220"/>
</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-25T01:20:05.944684" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:05.944542" elapsed="0.000197"/>
</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-25T01:20:05.944905" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:05.944762" elapsed="0.000326"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:05.944279" elapsed="0.001202"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:05.944023" elapsed="0.001611"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:05.943831" elapsed="0.001940"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:05.945825" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:20:05.946113" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:05.946164" 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-25T01:20:05.939762" elapsed="0.006426"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:05.946822" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:05.946905" 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-25T01:20:05.946365" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:05.947516" 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-25T01:20:05.947237" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:05.947016" elapsed="0.000641">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:05.946997" elapsed="0.000697">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-25T01:20:05.947848" 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-25T01:20:05.948036" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:05.948103" elapsed="0.000016"/>
</return>
<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>
<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-25T01:20:05.937153" elapsed="0.011056">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:05.936906" elapsed="0.011371">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:05.936769" elapsed="0.011563">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:05.936356" elapsed="0.012064">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:05.948714" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:05.908728" elapsed="0.040106">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:07.976099" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:20:07.976413" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:07.975368" elapsed="0.001114"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:07.974808" elapsed="0.001754"/>
</kw>
<msg time="2026-04-25T01:20:07.976610" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:07.966188" elapsed="0.010465"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:07.965636" elapsed="0.011091"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:07.977220" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:07.976945" elapsed="0.000321"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:07.982727" 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-25T01:20:07.982323" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:07.983341" 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-25T01:20:07.983044" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:07.983416" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:20:07.983578" 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-25T01:20:07.981930" elapsed="0.001673"/>
</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-25T01:20:07.983760" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:07.984441" level="INFO">${ds_type} = operational</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-25T01:20:07.984104" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:07.984867" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:07.984627" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:07.985295" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:07.985058" elapsed="0.000262"/>
</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-25T01:20:07.985759" elapsed="0.000025"/>
</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-25T01:20:07.986036" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:07.985871" elapsed="0.000220"/>
</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-25T01:20:07.986258" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:07.986117" elapsed="0.000193"/>
</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-25T01:20:07.986473" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:07.986333" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:07.985851" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:07.985557" elapsed="0.001013"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:07.985369" elapsed="0.001226"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:07.986634" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:07.986833" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:07.986879" 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-25T01:20:07.981191" elapsed="0.005711"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:07.987377" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:07.987454" 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-25T01:20:07.987091" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:07.988060" 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-25T01:20:07.987765" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:07.987547" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:07.987528" elapsed="0.000722">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-25T01:20:07.988414" elapsed="0.000022"/>
</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-25T01:20:07.988589" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:07.988655" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:07.978367" elapsed="0.010394">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:07.978124" elapsed="0.010705">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:07.977979" elapsed="0.010905">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:07.977516" elapsed="0.011470">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:07.989232" elapsed="0.000079"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:07.949695" elapsed="0.039713">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:10.018677" elapsed="0.000300"/>
</kw>
<msg time="2026-04-25T01:20:10.019048" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:10.017901" elapsed="0.001215"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:10.017356" elapsed="0.001844"/>
</kw>
<msg time="2026-04-25T01:20:10.019253" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:10.008240" elapsed="0.011060"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:10.007602" elapsed="0.011776"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:10.019854" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:10.019595" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:10.025394" 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-25T01:20:10.024991" elapsed="0.000526"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:10.025991" 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-25T01:20:10.025683" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:10.026068" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:20:10.026231" 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-25T01:20:10.024582" elapsed="0.001674"/>
</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-25T01:20:10.026417" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:10.027128" level="INFO">${ds_type} = operational</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-25T01:20:10.026774" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:10.027573" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:10.027314" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:10.028019" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:10.027758" elapsed="0.000287"/>
</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-25T01:20:10.028474" 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-25T01:20:10.028789" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:10.028592" elapsed="0.000270"/>
</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-25T01:20:10.029057" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:10.028888" elapsed="0.000225"/>
</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-25T01:20:10.029316" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:10.029136" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:10.028567" elapsed="0.000834"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:10.028298" elapsed="0.001128"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:10.028092" elapsed="0.001360"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:10.029498" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:10.029701" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:10.029747" 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-25T01:20:10.023845" elapsed="0.005924"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:10.030569" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:10.030649" 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-25T01:20:10.030041" elapsed="0.000632"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:10.031299" 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-25T01:20:10.031010" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:10.030768" elapsed="0.000692">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:10.030749" elapsed="0.000747">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-25T01:20:10.031674" elapsed="0.000023"/>
</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-25T01:20:10.031854" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:10.031922" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:10.021058" elapsed="0.011013">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:10.020751" elapsed="0.011393">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:10.020584" elapsed="0.011616">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:10.020175" elapsed="0.012114">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:10.032548" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:09.990345" elapsed="0.042328">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:12.059626" elapsed="0.000277"/>
</kw>
<msg time="2026-04-25T01:20:12.059987" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:12.058928" elapsed="0.001128"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:12.058450" elapsed="0.001689"/>
</kw>
<msg time="2026-04-25T01:20:12.060185" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:12.049650" elapsed="0.010579"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:12.049144" elapsed="0.011167"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:12.060783" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:12.060513" elapsed="0.000316"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:12.066331" 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-25T01:20:12.065908" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:12.066819" 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-25T01:20:12.066524" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:12.066894" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:20:12.067072" 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-25T01:20:12.065532" elapsed="0.001566"/>
</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-25T01:20:12.067344" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:12.068103" level="INFO">${ds_type} = operational</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-25T01:20:12.067688" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:12.068590" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:12.068300" elapsed="0.000317"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:12.069033" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:12.068771" elapsed="0.000288"/>
</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-25T01:20:12.069472" elapsed="0.000025"/>
</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-25T01:20:12.069734" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:12.069584" elapsed="0.000205"/>
</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-25T01:20:12.069955" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:12.069814" elapsed="0.000211"/>
</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-25T01:20:12.070191" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:12.070048" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:12.069564" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:12.069297" elapsed="0.000990"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:12.069108" elapsed="0.001205"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:12.070352" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:12.070558" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:12.070605" 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-25T01:20:12.064780" elapsed="0.005849"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:12.071092" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:12.071169" 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-25T01:20:12.070801" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:12.071758" 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-25T01:20:12.071478" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:12.071261" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:12.071243" elapsed="0.000706">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-25T01:20:12.072120" elapsed="0.000022"/>
</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-25T01:20:12.072294" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:12.072360" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:12.061885" elapsed="0.010580">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:12.061649" elapsed="0.010885">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:12.061504" elapsed="0.011085">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:12.061090" elapsed="0.011586">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:12.072912" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:12.033594" elapsed="0.039450">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:14.103998" elapsed="0.000423"/>
</kw>
<msg time="2026-04-25T01:20:14.104504" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:14.103041" elapsed="0.001556"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:14.102327" elapsed="0.002380"/>
</kw>
<msg time="2026-04-25T01:20:14.104771" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:14.091373" elapsed="0.013460"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:14.090926" elapsed="0.014099"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:14.105662" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:14.105302" elapsed="0.000424"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:14.112030" 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-25T01:20:14.111612" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:14.112523" 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-25T01:20:14.112217" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:14.112597" elapsed="0.000060"/>
</return>
<msg time="2026-04-25T01:20:14.112796" 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-25T01:20:14.111237" elapsed="0.001584"/>
</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-25T01:20:14.113009" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:14.113666" level="INFO">${ds_type} = operational</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-25T01:20:14.113329" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:14.114123" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:14.113849" elapsed="0.000300"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:14.114531" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:14.114297" elapsed="0.000259"/>
</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-25T01:20:14.114954" elapsed="0.000039"/>
</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-25T01:20:14.115230" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:14.115080" elapsed="0.000203"/>
</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-25T01:20:14.115457" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:14.115308" elapsed="0.000201"/>
</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-25T01:20:14.115697" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:14.115544" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:14.115060" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:14.114783" elapsed="0.001011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:14.114602" elapsed="0.001218"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:14.115858" elapsed="0.000026"/>
</return>
<msg time="2026-04-25T01:20:14.116070" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:14.116116" 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-25T01:20:14.110484" elapsed="0.005659"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:14.116586" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:14.116664" 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-25T01:20:14.116314" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:14.117536" 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-25T01:20:14.117257" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:14.117010" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:14.116775" elapsed="0.000934">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-25T01:20:14.117862" 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-25T01:20:14.118052" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:14.118120" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:14.107179" elapsed="0.011047">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:14.106840" elapsed="0.011454">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:14.106650" elapsed="0.011698">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:14.106076" elapsed="0.012359">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:14.118669" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:14.073894" elapsed="0.044910">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:16.146937" elapsed="0.000269"/>
</kw>
<msg time="2026-04-25T01:20:16.147274" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:16.146216" elapsed="0.001122"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:16.145582" elapsed="0.001840"/>
</kw>
<msg time="2026-04-25T01:20:16.147471" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:16.136877" elapsed="0.010639"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:16.136306" elapsed="0.011289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:16.148103" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:16.147821" elapsed="0.000330"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:16.153626" 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-25T01:20:16.153229" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:16.154157" 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-25T01:20:16.153820" elapsed="0.000364"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:16.154232" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:16.154393" 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-25T01:20:16.152829" elapsed="0.001589"/>
</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-25T01:20:16.154575" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:16.155253" level="INFO">${ds_type} = operational</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-25T01:20:16.154898" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:16.155681" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:16.155441" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:16.156190" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:16.155927" elapsed="0.000290"/>
</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-25T01:20:16.156620" elapsed="0.000025"/>
</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-25T01:20:16.156887" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:16.156735" elapsed="0.000208"/>
</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-25T01:20:16.157129" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:16.156983" elapsed="0.000201"/>
</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-25T01:20:16.157350" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:16.157207" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:16.156714" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:16.156449" elapsed="0.000998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:16.156264" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:16.157513" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:20:16.157713" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:16.157759" 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-25T01:20:16.152104" elapsed="0.005678"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:16.158274" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:16.158352" 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-25T01:20:16.157958" elapsed="0.000418"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:16.158955" 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-25T01:20:16.158666" elapsed="0.000381">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:16.158446" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:16.158427" elapsed="0.000719">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-25T01:20:16.159300" elapsed="0.000022"/>
</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-25T01:20:16.159474" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:16.159541" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:16.149219" elapsed="0.010431">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:16.148959" elapsed="0.010760">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:16.148813" elapsed="0.010961">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:16.148405" elapsed="0.011457">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:16.160115" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:16.119743" elapsed="0.040490">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:18.187493" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:20:18.187811" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:18.186793" elapsed="0.001083"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:18.186315" elapsed="0.001641"/>
</kw>
<msg time="2026-04-25T01:20:18.188100" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:18.177593" elapsed="0.010555"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:18.177155" elapsed="0.011071"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:18.188693" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:18.188424" elapsed="0.000316"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:18.193930" 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-25T01:20:18.193532" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:18.194438" 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-25T01:20:18.194141" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:18.194514" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:18.194673" 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-25T01:20:18.193153" elapsed="0.001545"/>
</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-25T01:20:18.194857" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:18.195549" level="INFO">${ds_type} = operational</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-25T01:20:18.195209" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:18.196005" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:18.195743" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:18.196426" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:18.196184" elapsed="0.000268"/>
</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-25T01:20:18.196861" elapsed="0.000025"/>
</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-25T01:20:18.197137" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:18.196985" elapsed="0.000209"/>
</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-25T01:20:18.197361" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:18.197218" elapsed="0.000197"/>
</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-25T01:20:18.197582" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:18.197438" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:18.196951" elapsed="0.000706"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:18.196685" elapsed="0.000996"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:18.196500" elapsed="0.001205"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:18.197744" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:18.197945" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:18.198009" 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-25T01:20:18.192408" elapsed="0.005626"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:18.198485" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:18.198563" 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-25T01:20:18.198210" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:18.199413" 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-25T01:20:18.199098" elapsed="0.000389">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:18.198852" elapsed="0.000704">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:18.198639" elapsed="0.000949">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-25T01:20:18.199749" elapsed="0.000022"/>
</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-25T01:20:18.199989" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:18.200060" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:18.189773" elapsed="0.010394">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:18.189535" elapsed="0.010702">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:18.189393" elapsed="0.010899">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:18.188988" elapsed="0.011392">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:18.200618" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:18.161173" elapsed="0.039562">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:20.229056" elapsed="0.000251"/>
</kw>
<msg time="2026-04-25T01:20:20.229375" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:20.228375" elapsed="0.001065"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:20.227879" elapsed="0.001641"/>
</kw>
<msg time="2026-04-25T01:20:20.229568" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:20.219314" elapsed="0.010300"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:20.218870" elapsed="0.010818"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:20.230169" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:20.229888" elapsed="0.000328"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:20.235616" 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-25T01:20:20.235226" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:20.236124" 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-25T01:20:20.235809" elapsed="0.000501"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:20.236358" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:20.236517" 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-25T01:20:20.234830" elapsed="0.001712"/>
</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-25T01:20:20.236698" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:20.237369" level="INFO">${ds_type} = operational</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-25T01:20:20.237031" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:20.237792" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:20.237553" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:20.238223" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:20.237979" elapsed="0.000269"/>
</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-25T01:20:20.238648" elapsed="0.000025"/>
</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-25T01:20:20.238992" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:20.238757" elapsed="0.000295"/>
</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-25T01:20:20.239224" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:20.239078" elapsed="0.000200"/>
</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-25T01:20:20.239444" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:20.239301" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:20.238738" elapsed="0.000780"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:20.238478" elapsed="0.001064"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:20.238294" elapsed="0.001274"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:20.239608" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:20:20.239813" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:20.239860" 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-25T01:20:20.234097" elapsed="0.005788"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:20.240494" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:20.240576" 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-25T01:20:20.240081" elapsed="0.000520"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:20.241221" 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-25T01:20:20.240906" elapsed="0.000387">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:20.240674" elapsed="0.000687">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:20.240655" elapsed="0.000738">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-25T01:20:20.241549" elapsed="0.000023"/>
</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-25T01:20:20.241726" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:20.241793" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:20.231250" elapsed="0.010654">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:20.231014" elapsed="0.010973">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:20.230856" elapsed="0.011189">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:20.230453" elapsed="0.011681">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:20.242371" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:20.201731" elapsed="0.040758">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:22.271778" elapsed="0.000269"/>
</kw>
<msg time="2026-04-25T01:20:22.272114" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:22.271088" elapsed="0.001088"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:22.270593" elapsed="0.001662"/>
</kw>
<msg time="2026-04-25T01:20:22.272301" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:22.261952" elapsed="0.010392"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:22.261338" elapsed="0.011078"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:22.272936" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:22.272611" elapsed="0.000385"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:22.278183" 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-25T01:20:22.277781" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:22.278663" 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-25T01:20:22.278373" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:22.278735" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:22.278891" 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-25T01:20:22.277383" elapsed="0.001533"/>
</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-25T01:20:22.279112" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:22.279774" level="INFO">${ds_type} = operational</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-25T01:20:22.279439" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:22.280217" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:22.279975" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:22.280646" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:22.280392" elapsed="0.000281"/>
</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-25T01:20:22.281088" 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-25T01:20:22.281345" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:22.281197" elapsed="0.000220"/>
</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-25T01:20:22.281585" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:22.281442" elapsed="0.000197"/>
</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-25T01:20:22.281805" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:22.281662" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:22.281178" elapsed="0.000701"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:22.280903" elapsed="0.000999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:22.280720" elapsed="0.001207"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:22.281992" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:20:22.282199" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:22.282257" 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-25T01:20:22.276648" elapsed="0.005634"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:22.282913" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:22.283013" 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-25T01:20:22.282456" elapsed="0.000582"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:22.283607" 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-25T01:20:22.283330" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:22.283110" elapsed="0.000635">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:22.283092" elapsed="0.000684">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-25T01:20:22.283930" elapsed="0.000028"/>
</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-25T01:20:22.284128" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:22.284195" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:22.274030" elapsed="0.010269">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:22.273783" elapsed="0.010622">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:22.273644" elapsed="0.010817">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:22.273231" elapsed="0.011318">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:22.284783" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:22.243410" elapsed="0.041489">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:24.312780" elapsed="0.000259"/>
</kw>
<msg time="2026-04-25T01:20:24.313115" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:24.312115" elapsed="0.001065"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:24.311616" elapsed="0.001645"/>
</kw>
<msg time="2026-04-25T01:20:24.313308" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:24.302922" elapsed="0.010576"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:24.302468" elapsed="0.011104"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:24.314047" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:24.313770" elapsed="0.000333"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:24.319956" 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-25T01:20:24.319543" elapsed="0.000457"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:24.320479" 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-25T01:20:24.320169" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:24.320554" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:20:24.320720" 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-25T01:20:24.319151" elapsed="0.001593"/>
</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-25T01:20:24.320904" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:24.321603" level="INFO">${ds_type} = operational</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-25T01:20:24.321262" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:24.322052" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:24.321791" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:24.322495" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:24.322247" elapsed="0.000291"/>
</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-25T01:20:24.323011" elapsed="0.000025"/>
</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-25T01:20:24.323293" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:24.323130" elapsed="0.000221"/>
</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-25T01:20:24.323522" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:24.323377" elapsed="0.000200"/>
</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-25T01:20:24.323743" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:24.323600" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:24.323109" elapsed="0.000776"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:24.322811" elapsed="0.001097"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:24.322589" elapsed="0.001344"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:24.323997" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:20:24.324204" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:24.324255" 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-25T01:20:24.318356" elapsed="0.005927"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:24.324741" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:24.324820" 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-25T01:20:24.324461" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:24.325461" 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-25T01:20:24.325161" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:24.324916" elapsed="0.000688">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:24.324897" elapsed="0.000739">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-25T01:20:24.325794" elapsed="0.000022"/>
</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-25T01:20:24.325989" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:24.326060" elapsed="0.000017"/>
</return>
<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>
<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-25T01:20:24.315321" elapsed="0.010855">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:24.315071" elapsed="0.011177">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:24.314911" elapsed="0.011404">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:24.314342" elapsed="0.012068">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:24.326697" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:24.285831" elapsed="0.040988">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:26.355347" elapsed="0.000238"/>
</kw>
<msg time="2026-04-25T01:20:26.355665" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:26.354682" elapsed="0.001045"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:26.354215" elapsed="0.001591"/>
</kw>
<msg time="2026-04-25T01:20:26.355850" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:26.345563" elapsed="0.010331"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:26.345149" elapsed="0.010831"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:26.356430" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:26.356177" elapsed="0.000298"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:26.361741" 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-25T01:20:26.361356" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:26.362311" 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-25T01:20:26.362009" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:26.362386" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:26.362546" 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-25T01:20:26.360981" elapsed="0.001590"/>
</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-25T01:20:26.362726" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:26.363394" level="INFO">${ds_type} = operational</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-25T01:20:26.363058" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:26.363883" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:26.363580" elapsed="0.000329"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:26.364319" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:26.364074" elapsed="0.000271"/>
</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-25T01:20:26.364747" elapsed="0.000025"/>
</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-25T01:20:26.365023" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:26.364856" elapsed="0.000223"/>
</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-25T01:20:26.365246" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:26.365104" elapsed="0.000195"/>
</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-25T01:20:26.365463" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:26.365322" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:26.364837" elapsed="0.000699"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:26.364579" elapsed="0.000981"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:26.364392" elapsed="0.001193"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:26.365624" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:26.365823" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:26.365869" 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-25T01:20:26.360255" elapsed="0.005638"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:26.366526" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:26.366609" 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-25T01:20:26.366083" elapsed="0.000557"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:26.367236" 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-25T01:20:26.366943" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:26.366721" elapsed="0.000654">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:26.366701" elapsed="0.000705">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-25T01:20:26.367560" elapsed="0.000022"/>
</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-25T01:20:26.367750" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:26.367815" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:26.357645" elapsed="0.010274">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:26.357264" elapsed="0.010739">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:26.357117" elapsed="0.010943">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:26.356705" elapsed="0.011443">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:26.368380" elapsed="0.000058"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:26.327868" elapsed="0.040666">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:28.396575" elapsed="0.000257"/>
</kw>
<msg time="2026-04-25T01:20:28.396897" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:28.395889" elapsed="0.001072"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:28.395411" elapsed="0.001646"/>
</kw>
<msg time="2026-04-25T01:20:28.397104" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:28.386782" elapsed="0.010367"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:28.386334" elapsed="0.010888"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:28.397686" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:28.397427" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:28.403147" 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-25T01:20:28.402729" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:28.403626" 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-25T01:20:28.403337" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:28.403698" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:28.403856" 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-25T01:20:28.402347" elapsed="0.001533"/>
</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-25T01:20:28.404050" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:28.404714" level="INFO">${ds_type} = operational</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-25T01:20:28.404373" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:28.405178" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:28.404919" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:28.405601" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:28.405360" elapsed="0.000266"/>
</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-25T01:20:28.406045" elapsed="0.000025"/>
</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-25T01:20:28.406309" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:28.406155" 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-25T01:20:28.406534" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:28.406391" elapsed="0.000196"/>
</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-25T01:20:28.406763" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:28.406611" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:28.406136" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:28.405859" elapsed="0.001003"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:28.405674" elapsed="0.001213"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:28.406926" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:28.407144" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:28.407191" 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-25T01:20:28.401608" elapsed="0.005607"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:28.407737" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:28.407815" 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-25T01:20:28.407458" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:28.408422" 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-25T01:20:28.408143" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:28.407908" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:28.407890" elapsed="0.000704">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-25T01:20:28.408779" elapsed="0.000023"/>
</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-25T01:20:28.408957" elapsed="0.000042"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:28.409046" elapsed="0.000016"/>
</return>
<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>
<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-25T01:20:28.398754" elapsed="0.010400">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:28.398521" elapsed="0.010701">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:28.398380" elapsed="0.010896">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:28.397981" elapsed="0.011382">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:28.409602" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:28.369397" elapsed="0.040322">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:30.440115" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:20:30.440428" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:30.439440" elapsed="0.001050"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:30.438948" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:20:30.440615" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:30.430336" elapsed="0.010323"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:30.429889" elapsed="0.010845"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:30.441205" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:30.440929" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:30.446442" 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-25T01:20:30.446042" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:30.446926" 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-25T01:20:30.446632" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:30.447017" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:20:30.447178" 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-25T01:20:30.445630" elapsed="0.001574"/>
</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-25T01:20:30.447439" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:30.448116" level="INFO">${ds_type} = operational</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-25T01:20:30.447760" elapsed="0.000382"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:30.448547" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:30.448303" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:30.448977" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:30.448724" elapsed="0.000281"/>
</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-25T01:20:30.449405" elapsed="0.000025"/>
</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-25T01:20:30.449663" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:30.449515" elapsed="0.000204"/>
</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-25T01:20:30.449886" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:30.449743" elapsed="0.000234"/>
</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-25T01:20:30.450147" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:30.450002" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:30.449496" elapsed="0.000726"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:30.449234" elapsed="0.001011"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:30.449052" elapsed="0.001219"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:30.450310" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:30.450512" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:30.450560" 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-25T01:20:30.444868" elapsed="0.005716"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:30.451047" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:30.451127" 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-25T01:20:30.450757" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:30.451906" 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-25T01:20:30.451625" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:30.451396" elapsed="0.000665">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:30.451205" elapsed="0.000890">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-25T01:20:30.452253" elapsed="0.000023"/>
</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-25T01:20:30.452432" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:30.452500" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:30.442276" elapsed="0.010331">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:30.442043" elapsed="0.010635">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:30.441879" elapsed="0.010854">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:30.441484" elapsed="0.011338">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:30.453075" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:30.410654" elapsed="0.042541">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:32.484335" elapsed="0.000385"/>
</kw>
<msg time="2026-04-25T01:20:32.484789" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:32.483590" elapsed="0.001264"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:32.482947" elapsed="0.002069"/>
</kw>
<msg time="2026-04-25T01:20:32.485067" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:32.474209" elapsed="0.010905"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:32.473626" elapsed="0.011566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:32.485680" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:32.485409" elapsed="0.000318"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:32.491329" 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-25T01:20:32.490855" elapsed="0.000506"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:32.491867" 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-25T01:20:32.491533" elapsed="0.000361"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:32.491944" elapsed="0.000059"/>
</return>
<msg time="2026-04-25T01:20:32.492140" 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-25T01:20:32.490453" elapsed="0.001718"/>
</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-25T01:20:32.492357" elapsed="0.000195"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:32.493086" level="INFO">${ds_type} = operational</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-25T01:20:32.492716" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:32.493519" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:32.493273" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:32.493937" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:32.493697" elapsed="0.000282"/>
</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-25T01:20:32.494432" elapsed="0.000025"/>
</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-25T01:20:32.494697" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:32.494546" elapsed="0.000207"/>
</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-25T01:20:32.494924" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:32.494779" elapsed="0.000215"/>
</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-25T01:20:32.495165" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:32.495020" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:32.494525" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:32.494241" elapsed="0.001023"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:32.494034" elapsed="0.001256"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:32.495331" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:20:32.495545" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:32.495591" 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-25T01:20:32.489697" elapsed="0.005919"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:32.496130" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:32.496208" 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-25T01:20:32.495794" elapsed="0.000439"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:32.497190" 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-25T01:20:32.496874" elapsed="0.000412">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:32.496625" elapsed="0.000730">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:32.496359" elapsed="0.001029">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-25T01:20:32.497546" elapsed="0.000022"/>
</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-25T01:20:32.497724" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:32.497792" elapsed="0.000017"/>
</return>
<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>
<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-25T01:20:32.486782" elapsed="0.011122">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:32.486544" elapsed="0.011450">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:32.486401" elapsed="0.011653">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:32.485991" elapsed="0.012156">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:32.498405" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:32.454058" elapsed="0.044469">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:34.528232" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:20:34.528555" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:34.527474" elapsed="0.001148"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:34.526832" elapsed="0.001873"/>
</kw>
<msg time="2026-04-25T01:20:34.528752" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:34.515771" elapsed="0.013027"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:34.515326" elapsed="0.013549"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:34.529374" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:34.529108" elapsed="0.000312"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:34.534696" 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-25T01:20:34.534290" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:34.535205" 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-25T01:20:34.534889" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:34.535279" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:34.535438" 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-25T01:20:34.533891" elapsed="0.001571"/>
</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-25T01:20:34.535619" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:34.536288" level="INFO">${ds_type} = operational</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-25T01:20:34.535934" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:34.536714" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:34.536474" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:34.537251" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:34.537004" elapsed="0.000274"/>
</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-25T01:20:34.537686" elapsed="0.000027"/>
</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-25T01:20:34.537952" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:34.537801" elapsed="0.000225"/>
</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-25T01:20:34.538197" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:34.538051" elapsed="0.000201"/>
</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-25T01:20:34.538462" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:34.538276" elapsed="0.000239"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:34.537781" elapsed="0.000758"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:34.537512" elapsed="0.001050"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:34.537326" elapsed="0.001261"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:34.538627" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:34.538829" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:34.538874" 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-25T01:20:34.533159" elapsed="0.005739"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:34.539382" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:34.539461" 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-25T01:20:34.539104" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:34.540389" 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-25T01:20:34.540063" elapsed="0.000401">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:34.539795" elapsed="0.000739">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:34.539561" elapsed="0.001007">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-25T01:20:34.540726" elapsed="0.000022"/>
</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-25T01:20:34.540901" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:34.540989" elapsed="0.000022"/>
</return>
<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>
<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-25T01:20:34.530492" elapsed="0.010639">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:34.530239" elapsed="0.010980">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:34.530095" elapsed="0.011197">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:34.529675" elapsed="0.011708">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:34.541658" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:34.499550" elapsed="0.042232">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:36.570620" elapsed="0.000253"/>
</kw>
<msg time="2026-04-25T01:20:36.570942" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:36.569878" elapsed="0.001147"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:36.569384" elapsed="0.001727"/>
</kw>
<msg time="2026-04-25T01:20:36.571289" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:36.560343" elapsed="0.011012"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:36.559874" elapsed="0.011587"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:36.571992" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:36.571701" elapsed="0.000342"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:36.577608" 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-25T01:20:36.577217" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:36.578137" 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-25T01:20:36.577799" elapsed="0.000364"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:36.578211" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:36.578370" 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-25T01:20:36.576820" elapsed="0.001575"/>
</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-25T01:20:36.578551" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:36.579227" level="INFO">${ds_type} = operational</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-25T01:20:36.578869" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:36.579656" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:36.579415" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:36.580089" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:36.579832" elapsed="0.000283"/>
</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-25T01:20:36.580513" 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-25T01:20:36.580774" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:36.580623" elapsed="0.000206"/>
</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-25T01:20:36.581012" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:36.580855" elapsed="0.000212"/>
</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-25T01:20:36.581236" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:36.581091" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:36.580603" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:36.580344" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:36.580161" elapsed="0.001199"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:36.581400" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:20:36.581601" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:36.581647" 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-25T01:20:36.576088" elapsed="0.005582"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:36.582169" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:36.582247" 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-25T01:20:36.581869" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:36.582850" 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-25T01:20:36.582558" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:36.582340" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:36.582321" elapsed="0.000725">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-25T01:20:36.583200" elapsed="0.000022"/>
</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-25T01:20:36.583415" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:36.583483" elapsed="0.000016"/>
</return>
<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>
<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-25T01:20:36.573259" elapsed="0.010332">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:36.572851" elapsed="0.010809">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:36.572695" elapsed="0.011020">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:36.572283" elapsed="0.011520">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:36.584056" elapsed="0.000031"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:36.542745" elapsed="0.041435">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:38.611877" elapsed="0.000263"/>
</kw>
<msg time="2026-04-25T01:20:38.612206" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:38.611224" elapsed="0.001044"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:38.610740" elapsed="0.001608"/>
</kw>
<msg time="2026-04-25T01:20:38.612395" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:38.602118" elapsed="0.010321"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:38.601642" elapsed="0.010869"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:38.612984" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:38.612714" elapsed="0.000317"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:38.618248" 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-25T01:20:38.617833" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:38.618725" 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-25T01:20:38.618436" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:38.618798" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:38.618956" 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-25T01:20:38.617434" elapsed="0.001562"/>
</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-25T01:20:38.619153" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:38.619818" level="INFO">${ds_type} = operational</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-25T01:20:38.619481" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:38.620260" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:38.620019" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:38.620670" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:38.620433" elapsed="0.000262"/>
</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-25T01:20:38.621109" 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-25T01:20:38.621434" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:38.621218" elapsed="0.000273"/>
</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-25T01:20:38.621696" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:38.621518" elapsed="0.000236"/>
</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-25T01:20:38.621927" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:38.621778" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:38.621198" elapsed="0.000824"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:38.620927" elapsed="0.001120"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:38.620740" elapsed="0.001333"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:38.622120" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:38.622323" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:38.622375" 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-25T01:20:38.616699" elapsed="0.005701"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:38.623050" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:38.623130" 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-25T01:20:38.622575" elapsed="0.000579"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:38.623736" 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-25T01:20:38.623453" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:38.623225" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:38.623207" elapsed="0.000702">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-25T01:20:38.624086" elapsed="0.000023"/>
</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-25T01:20:38.624267" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:38.624334" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:38.614100" elapsed="0.010340">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:38.613843" elapsed="0.010668">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:38.613695" elapsed="0.010873">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:38.613264" elapsed="0.011392">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:38.624901" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:38.585088" elapsed="0.039946">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:40.653057" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:20:40.653370" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:40.652363" elapsed="0.001075"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:40.651869" elapsed="0.001650"/>
</kw>
<msg time="2026-04-25T01:20:40.653566" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:40.642978" elapsed="0.010632"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:40.642515" elapsed="0.011171"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:40.654249" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:40.653880" elapsed="0.000417"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:40.659790" 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-25T01:20:40.659400" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:40.660286" 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-25T01:20:40.659996" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:40.660361" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:40.660519" 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-25T01:20:40.659021" elapsed="0.001536"/>
</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-25T01:20:40.660729" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:40.661440" level="INFO">${ds_type} = operational</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-25T01:20:40.661071" elapsed="0.000396"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:40.661870" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:40.661629" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:40.662306" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:40.662060" elapsed="0.000271"/>
</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-25T01:20:40.662729" 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-25T01:20:40.663003" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:40.662838" elapsed="0.000228"/>
</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-25T01:20:40.663235" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:40.663091" elapsed="0.000198"/>
</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-25T01:20:40.663453" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:40.663312" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:40.662819" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:40.662560" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:40.662377" elapsed="0.001200"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:40.663616" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:40.663816" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:40.663861" 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-25T01:20:40.658219" elapsed="0.005665"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:40.664381" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:40.664459" 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-25T01:20:40.664080" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:40.665096" 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-25T01:20:40.664797" elapsed="0.000372">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:40.664570" elapsed="0.000667">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:40.664549" elapsed="0.000719">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-25T01:20:40.665424" elapsed="0.000022"/>
</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-25T01:20:40.665601" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:40.665667" elapsed="0.000016"/>
</return>
<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>
<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-25T01:20:40.655332" elapsed="0.010442">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:40.655098" elapsed="0.010782">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:40.654941" elapsed="0.010995">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:40.654541" elapsed="0.011501">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:40.666281" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:40.626331" elapsed="0.040068">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:42.695304" elapsed="0.000253"/>
</kw>
<msg time="2026-04-25T01:20:42.695628" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:42.694622" elapsed="0.001071"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:42.694152" elapsed="0.001623"/>
</kw>
<msg time="2026-04-25T01:20:42.695822" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:42.685465" elapsed="0.010401"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:42.685037" elapsed="0.010902"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:42.696415" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:42.696156" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:42.701650" 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-25T01:20:42.701266" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:42.702164" 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-25T01:20:42.701839" elapsed="0.000351"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:42.702238" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:42.702397" 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-25T01:20:42.700877" elapsed="0.001545"/>
</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-25T01:20:42.702576" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:42.703247" level="INFO">${ds_type} = operational</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-25T01:20:42.702896" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:42.703669" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:42.703432" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:42.704100" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:42.703841" elapsed="0.000285"/>
</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-25T01:20:42.704521" 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-25T01:20:42.704780" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:42.704631" elapsed="0.000204"/>
</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-25T01:20:42.705017" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:42.704860" elapsed="0.000213"/>
</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-25T01:20:42.705239" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:42.705096" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:42.704611" elapsed="0.000759"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:42.704354" elapsed="0.001040"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:42.704172" elapsed="0.001248"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:42.705459" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:20:42.705674" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:42.705720" 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-25T01:20:42.700153" elapsed="0.005590"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:42.706395" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:42.706474" 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-25T01:20:42.705918" elapsed="0.000580"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:42.707084" 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-25T01:20:42.706788" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:42.706569" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:42.706551" elapsed="0.000708">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-25T01:20:42.707414" elapsed="0.000022"/>
</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-25T01:20:42.707591" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:42.707657" elapsed="0.000017"/>
</return>
<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>
<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-25T01:20:42.697497" elapsed="0.010267">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:42.697254" elapsed="0.010581">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:42.697111" elapsed="0.010780">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:42.696696" elapsed="0.011299">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:42.708237" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:42.667308" elapsed="0.041061">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:44.738806" elapsed="0.000271"/>
</kw>
<msg time="2026-04-25T01:20:44.739144" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:44.738112" elapsed="0.001099"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:44.737608" elapsed="0.001682"/>
</kw>
<msg time="2026-04-25T01:20:44.739337" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:44.728371" elapsed="0.011009"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:44.727769" elapsed="0.011685"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:44.739926" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:44.739667" elapsed="0.000321"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:44.745523" 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-25T01:20:44.745106" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:44.746130" 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-25T01:20:44.745813" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:44.746207" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:20:44.746370" 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-25T01:20:44.744691" elapsed="0.001704"/>
</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-25T01:20:44.746552" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:44.747273" level="INFO">${ds_type} = operational</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-25T01:20:44.746899" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:44.747711" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:44.747463" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:44.748172" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:44.747887" elapsed="0.000318"/>
</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-25T01:20:44.748636" 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-25T01:20:44.748899" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:44.748749" elapsed="0.000205"/>
</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-25T01:20:44.749159" elapsed="0.000192"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:44.748996" elapsed="0.000419"/>
</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-25T01:20:44.749614" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:44.749444" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:44.748729" elapsed="0.000982"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:44.748463" elapsed="0.001284"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:44.748267" elapsed="0.001506"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:44.749812" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:20:44.750067" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:44.750122" 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-25T01:20:44.743906" elapsed="0.006240"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:44.750617" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:44.750695" 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-25T01:20:44.750329" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:44.751345" 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-25T01:20:44.751050" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:44.750787" elapsed="0.000712">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:44.750769" elapsed="0.000771">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-25T01:20:44.751710" elapsed="0.000023"/>
</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-25T01:20:44.751888" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:44.751953" elapsed="0.000032"/>
</return>
<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>
<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-25T01:20:44.741016" elapsed="0.011073">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:44.740762" elapsed="0.011399">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:44.740622" elapsed="0.011594">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:44.740227" elapsed="0.012075">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:44.752540" elapsed="0.000066"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:44.709291" elapsed="0.043414">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:46.784719" elapsed="0.000322"/>
</kw>
<msg time="2026-04-25T01:20:46.785121" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:46.783784" elapsed="0.001417"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:46.783008" elapsed="0.002305"/>
</kw>
<msg time="2026-04-25T01:20:46.785372" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:46.771314" elapsed="0.014116"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:46.770613" elapsed="0.014915"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:46.786208" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:46.785803" elapsed="0.000464"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:46.793343" 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-25T01:20:46.792763" elapsed="0.000620"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:46.794024" 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-25T01:20:46.793604" elapsed="0.000453"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:46.794118" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T01:20:46.794334" 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-25T01:20:46.792227" elapsed="0.002138"/>
</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-25T01:20:46.794566" elapsed="0.000213"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:46.795441" level="INFO">${ds_type} = operational</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-25T01:20:46.795011" elapsed="0.000464"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:46.795989" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:46.795680" elapsed="0.000341"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:46.796500" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:46.796212" elapsed="0.000319"/>
</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-25T01:20:46.797123" elapsed="0.000032"/>
</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-25T01:20:46.797458" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:46.797263" elapsed="0.000267"/>
</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-25T01:20:46.797750" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:46.797562" elapsed="0.000299"/>
</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-25T01:20:46.798109" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:46.797896" elapsed="0.000279"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:46.797239" elapsed="0.000967"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:46.796855" elapsed="0.001382"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:46.796597" elapsed="0.001673"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:46.798322" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T01:20:46.798600" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:46.798660" 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-25T01:20:46.791232" elapsed="0.007459"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:46.799437" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:46.799541" 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-25T01:20:46.799035" elapsed="0.000536"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:46.800671" 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-25T01:20:46.800301" elapsed="0.000460">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:46.799986" elapsed="0.000862">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:46.799638" elapsed="0.001252">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-25T01:20:46.801111" elapsed="0.000028"/>
</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-25T01:20:46.801342" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:46.801429" elapsed="0.000021"/>
</return>
<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>
<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-25T01:20:46.787605" elapsed="0.013965">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:46.787301" elapsed="0.014359">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:46.787124" elapsed="0.014607">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:46.786587" elapsed="0.015281">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:46.802220" elapsed="0.000033"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:46.753483" elapsed="0.048893">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:48.829708" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:20:48.830035" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:48.829051" elapsed="0.001049"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:48.828562" elapsed="0.001619"/>
</kw>
<msg time="2026-04-25T01:20:48.830227" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:48.819913" elapsed="0.010358"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:48.819453" elapsed="0.010892"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:48.830804" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:48.830549" elapsed="0.000300"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:48.836250" 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-25T01:20:48.835845" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:48.836728" 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-25T01:20:48.836441" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:48.836801" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:48.836958" 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-25T01:20:48.835436" elapsed="0.001564"/>
</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-25T01:20:48.837247" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:48.837924" level="INFO">${ds_type} = operational</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-25T01:20:48.837586" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:48.838366" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:48.838126" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:48.838789" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:48.838549" elapsed="0.000266"/>
</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-25T01:20:48.839224" 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-25T01:20:48.839482" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:48.839334" elapsed="0.000217"/>
</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-25T01:20:48.839847" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:48.839577" elapsed="0.000322"/>
</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-25T01:20:48.840080" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:48.839923" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:48.839315" elapsed="0.000839"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:48.839055" elapsed="0.001123"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:48.838860" elapsed="0.001344"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:48.840242" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:20:48.840440" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:48.840485" 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-25T01:20:48.834691" elapsed="0.005818"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:48.840952" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:48.841046" 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-25T01:20:48.840681" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:48.841629" 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-25T01:20:48.841354" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:48.841138" elapsed="0.000630">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:48.841120" elapsed="0.000679">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-25T01:20:48.841952" elapsed="0.000037"/>
</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-25T01:20:48.842143" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:48.842209" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:48.831893" elapsed="0.010422">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:48.831654" elapsed="0.010730">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:48.831493" elapsed="0.010945">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:48.831096" elapsed="0.011429">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:48.842913" elapsed="0.000028"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:48.803289" elapsed="0.039757">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:50.872023" elapsed="0.000334"/>
</kw>
<msg time="2026-04-25T01:20:50.872426" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:50.871340" elapsed="0.001161"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:50.870849" elapsed="0.001749"/>
</kw>
<msg time="2026-04-25T01:20:50.872648" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:50.860141" elapsed="0.012552"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:50.859524" elapsed="0.013244"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:50.873248" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:50.872984" elapsed="0.000310"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:50.878554" 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-25T01:20:50.878161" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:50.879050" 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-25T01:20:50.878743" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:50.879125" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:20:50.879286" 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-25T01:20:50.877747" elapsed="0.001564"/>
</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-25T01:20:50.879469" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:50.880139" level="INFO">${ds_type} = operational</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-25T01:20:50.879785" elapsed="0.000381"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:50.880582" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:50.880326" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:50.881013" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:50.880758" elapsed="0.000281"/>
</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-25T01:20:50.881442" elapsed="0.000025"/>
</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-25T01:20:50.881715" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:50.881563" elapsed="0.000206"/>
</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-25T01:20:50.881936" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:50.881795" elapsed="0.000209"/>
</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-25T01:20:50.882257" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:50.882029" elapsed="0.000288"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:50.881537" elapsed="0.000803"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:50.881273" elapsed="0.001092"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:50.881086" elapsed="0.001304"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:50.882429" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:50.882634" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:50.882679" 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-25T01:20:50.877024" elapsed="0.005678"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:50.883176" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:50.883255" 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-25T01:20:50.882875" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:50.884109" 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-25T01:20:50.883796" elapsed="0.000390">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:50.883565" elapsed="0.000692">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:50.883372" elapsed="0.000917">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-25T01:20:50.884446" elapsed="0.000022"/>
</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-25T01:20:50.884626" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:50.884691" elapsed="0.000023"/>
</return>
<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>
<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-25T01:20:50.874370" elapsed="0.010436">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:50.874134" elapsed="0.010739">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:50.873957" elapsed="0.010970">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:50.873553" elapsed="0.011478">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:50.885268" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:50.843770" elapsed="0.041615">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:52.912798" elapsed="0.000261"/>
</kw>
<msg time="2026-04-25T01:20:52.913138" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:52.912135" elapsed="0.001095"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:52.911631" elapsed="0.001688"/>
</kw>
<msg time="2026-04-25T01:20:52.913366" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:52.903080" elapsed="0.010329"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:52.902643" elapsed="0.010839"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:52.913941" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:52.913683" elapsed="0.000319"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:52.919366" 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-25T01:20:52.918974" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:52.919845" 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-25T01:20:52.919556" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:52.919918" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:52.920094" 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-25T01:20:52.918578" elapsed="0.001540"/>
</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-25T01:20:52.920275" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:52.920928" level="INFO">${ds_type} = operational</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-25T01:20:52.920592" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:52.921379" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:52.921128" elapsed="0.000278"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:52.921876" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:52.921632" elapsed="0.000270"/>
</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-25T01:20:52.922320" 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-25T01:20:52.922578" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:52.922430" elapsed="0.000203"/>
</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-25T01:20:52.922799" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:52.922658" elapsed="0.000194"/>
</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-25T01:20:52.923033" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:52.922875" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:52.922410" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:52.922150" elapsed="0.000982"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:52.921949" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:52.923197" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:52.923397" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:52.923443" 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-25T01:20:52.917841" elapsed="0.005625"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:52.923913" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:52.924005" 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-25T01:20:52.923639" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:52.924604" 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-25T01:20:52.924320" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:52.924099" elapsed="0.000645">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:52.924081" elapsed="0.000694">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-25T01:20:52.924929" elapsed="0.000022"/>
</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-25T01:20:52.925124" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:52.925220" elapsed="0.000017"/>
</return>
<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>
<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-25T01:20:52.915031" elapsed="0.010299">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:52.914778" elapsed="0.010621">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:52.914635" elapsed="0.010819">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:52.914238" elapsed="0.011303">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:52.925792" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:52.886463" elapsed="0.039445">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:54.956296" elapsed="0.000238"/>
</kw>
<msg time="2026-04-25T01:20:54.956599" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:54.955599" elapsed="0.001063"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:54.955100" elapsed="0.001643"/>
</kw>
<msg time="2026-04-25T01:20:54.956915" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:54.946351" elapsed="0.010627"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:54.945842" elapsed="0.011218"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:54.957535" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:54.957269" elapsed="0.000313"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:54.962894" 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-25T01:20:54.962484" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:54.963425" 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-25T01:20:54.963118" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:54.963501" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:54.963727" 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-25T01:20:54.962073" elapsed="0.001679"/>
</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-25T01:20:54.963928" elapsed="0.000185"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:54.964629" level="INFO">${ds_type} = operational</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-25T01:20:54.964278" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:54.965091" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:54.964829" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:54.965509" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:54.965269" elapsed="0.000265"/>
</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-25T01:20:54.965945" elapsed="0.000039"/>
</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-25T01:20:54.966221" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:54.966071" elapsed="0.000206"/>
</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-25T01:20:54.966444" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:54.966301" elapsed="0.000197"/>
</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-25T01:20:54.966664" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:54.966521" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:54.966052" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:54.965776" elapsed="0.000986"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:54.965582" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:54.966827" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:20:54.967044" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:54.967090" 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-25T01:20:54.961328" elapsed="0.005786"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:54.967828" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:54.967909" 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-25T01:20:54.967290" elapsed="0.000644"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:54.968531" 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-25T01:20:54.968247" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:54.968023" elapsed="0.000648">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:54.968003" elapsed="0.000700">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-25T01:20:54.968884" elapsed="0.000023"/>
</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-25T01:20:54.969140" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:54.969210" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:54.958632" elapsed="0.010685">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:54.958396" elapsed="0.010993">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:54.958252" elapsed="0.011193">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:54.957821" elapsed="0.011712">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:54.969773" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:54.926715" elapsed="0.043177">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:56.996641" elapsed="0.000277"/>
</kw>
<msg time="2026-04-25T01:20:56.997005" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:56.995754" elapsed="0.001321"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:56.995260" elapsed="0.001899"/>
</kw>
<msg time="2026-04-25T01:20:56.997205" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:56.986453" elapsed="0.010797"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:56.986019" elapsed="0.011304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:56.997786" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:56.997525" elapsed="0.000306"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:57.003275" 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-25T01:20:57.002862" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:57.003759" 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-25T01:20:57.003466" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:57.003834" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:57.004018" 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-25T01:20:57.002483" elapsed="0.001562"/>
</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-25T01:20:57.004203" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:57.004894" level="INFO">${ds_type} = operational</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-25T01:20:57.004524" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:57.005359" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:57.005111" elapsed="0.000275"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:57.005781" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:57.005538" elapsed="0.000269"/>
</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-25T01:20:57.006390" 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-25T01:20:57.006762" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:57.006503" elapsed="0.000318"/>
</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-25T01:20:57.007014" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:57.006846" elapsed="0.000224"/>
</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-25T01:20:57.007239" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:57.007095" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:57.006483" elapsed="0.000831"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:57.006211" elapsed="0.001128"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:57.005853" elapsed="0.001512"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:57.007407" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:20:57.007619" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:57.007666" 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-25T01:20:57.001738" elapsed="0.005952"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:57.008170" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:57.008250" 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-25T01:20:57.007866" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:57.008869" 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-25T01:20:57.008572" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:57.008346" elapsed="0.000681">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:57.008326" elapsed="0.000733">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-25T01:20:57.009216" 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-25T01:20:57.009392" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:57.009457" elapsed="0.000015"/>
</return>
<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>
<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-25T01:20:56.998886" elapsed="0.010686">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:56.998638" elapsed="0.011004">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:56.998490" elapsed="0.011207">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:56.998085" elapsed="0.011698">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:57.010037" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:56.970789" elapsed="0.039367">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:20:59.039919" elapsed="0.000266"/>
</kw>
<msg time="2026-04-25T01:20:59.040255" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:59.039193" elapsed="0.001127"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:59.038636" elapsed="0.001764"/>
</kw>
<msg time="2026-04-25T01:20:59.040447" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:20:59.029825" elapsed="0.010667"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:20:59.029232" elapsed="0.011335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:20:59.041160" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:20:59.040776" elapsed="0.000432"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:20:59.046434" 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-25T01:20:59.046040" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:59.046938" 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-25T01:20:59.046625" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:20:59.047035" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:20:59.047195" 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-25T01:20:59.045647" elapsed="0.001573"/>
</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-25T01:20:59.047376" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:20:59.048055" level="INFO">${ds_type} = operational</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-25T01:20:59.047694" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:59.048483" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:59.048242" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:20:59.048893" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:20:59.048656" 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-25T01:20:59.049388" elapsed="0.000025"/>
</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-25T01:20:59.049654" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:59.049503" elapsed="0.000206"/>
</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-25T01:20:59.049873" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:59.049733" elapsed="0.000193"/>
</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-25T01:20:59.050124" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:20:59.049948" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:20:59.049482" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:20:59.049201" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:59.048978" elapsed="0.001269"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:20:59.050286" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:20:59.050487" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:20:59.050533" 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-25T01:20:59.044895" elapsed="0.005661"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:20:59.051227" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:20:59.051306" 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-25T01:20:59.050736" elapsed="0.000594"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:20:59.051908" 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-25T01:20:59.051622" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:20:59.051400" elapsed="0.000670">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:20:59.051382" elapsed="0.000720">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-25T01:20:59.052257" elapsed="0.000022"/>
</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-25T01:20:59.052441" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:20:59.052507" elapsed="0.000016"/>
</return>
<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>
<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-25T01:20:59.042271" elapsed="0.010346">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:20:59.042030" elapsed="0.010698">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:20:59.041862" elapsed="0.010923">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:20:59.041454" elapsed="0.011422">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:20:59.053142" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:20:59.011208" elapsed="0.042054">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:01.080210" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:21:01.080531" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:01.079471" elapsed="0.001126"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:01.078866" elapsed="0.001812"/>
</kw>
<msg time="2026-04-25T01:21:01.080723" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:01.070126" elapsed="0.010640"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:01.069514" elapsed="0.011326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:01.081337" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:01.081079" elapsed="0.000304"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:01.087025" 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-25T01:21:01.086543" elapsed="0.000514"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:01.087533" 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-25T01:21:01.087230" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:01.087633" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:21:01.087864" 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-25T01:21:01.086159" elapsed="0.001740"/>
</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-25T01:21:01.088097" elapsed="0.000194"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:01.088844" level="INFO">${ds_type} = operational</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-25T01:21:01.088495" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:01.089302" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:01.089055" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:01.089763" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:01.089502" elapsed="0.000292"/>
</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-25T01:21:01.090287" elapsed="0.000027"/>
</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-25T01:21:01.090595" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:01.090402" elapsed="0.000276"/>
</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-25T01:21:01.090894" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:01.090714" elapsed="0.000241"/>
</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-25T01:21:01.091157" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:01.090997" elapsed="0.000315"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:01.090382" elapsed="0.000957"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:01.090073" elapsed="0.001292"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:01.089849" elapsed="0.001544"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:01.091436" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:21:01.091654" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:01.091703" 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-25T01:21:01.085385" elapsed="0.006343"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:01.092260" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:01.092354" 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-25T01:21:01.091917" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:01.092975" 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-25T01:21:01.092684" elapsed="0.000380">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:01.092455" elapsed="0.000677">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:01.092435" elapsed="0.000729">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-25T01:21:01.093318" 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-25T01:21:01.093492" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:01.093557" elapsed="0.000016"/>
</return>
<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>
<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-25T01:21:01.082454" elapsed="0.011211">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:01.082217" elapsed="0.011517">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:01.082073" elapsed="0.011717">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:01.081633" elapsed="0.012246">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:01.094145" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:01.054314" elapsed="0.040164">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:03.124519" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:21:03.124830" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:03.123842" elapsed="0.001095"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:03.123372" elapsed="0.001670"/>
</kw>
<msg time="2026-04-25T01:21:03.125091" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:03.114737" elapsed="0.010400"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:03.114251" elapsed="0.010968"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:03.125691" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:03.125419" elapsed="0.000321"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:03.131001" 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-25T01:21:03.130597" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:03.131587" 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-25T01:21:03.131284" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:03.131665" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:21:03.131837" 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-25T01:21:03.130224" elapsed="0.001640"/>
</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-25T01:21:03.132052" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:03.132748" level="INFO">${ds_type} = operational</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-25T01:21:03.132408" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:03.133244" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:03.132934" elapsed="0.000336"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:03.133661" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:03.133422" elapsed="0.000265"/>
</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-25T01:21:03.134110" elapsed="0.000027"/>
</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-25T01:21:03.134393" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:03.134229" elapsed="0.000222"/>
</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-25T01:21:03.134619" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:03.134476" elapsed="0.000198"/>
</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-25T01:21:03.134842" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:03.134697" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:03.134209" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:03.133920" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:03.133734" elapsed="0.001236"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:03.135024" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:21:03.135228" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:03.135275" 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-25T01:21:03.129481" elapsed="0.005817"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:03.135779" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:03.135865" 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-25T01:21:03.135481" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:03.192643" 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-25T01:21:03.192248" elapsed="0.000478">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:03.191839" elapsed="0.000967">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:03.135941" elapsed="0.056899">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-25T01:21:03.193016" elapsed="0.000023"/>
</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-25T01:21:03.193199" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:03.193270" elapsed="0.000017"/>
</return>
<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>
<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-25T01:21:03.126787" elapsed="0.066597">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:03.126550" elapsed="0.066907">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:03.126407" elapsed="0.067107">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:03.125998" elapsed="0.067607">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:03.193867" elapsed="0.000136"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:03.095498" elapsed="0.098609">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:05.222375" elapsed="0.000329"/>
</kw>
<msg time="2026-04-25T01:21:05.222779" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:05.221675" elapsed="0.001172"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:05.221162" elapsed="0.001770"/>
</kw>
<msg time="2026-04-25T01:21:05.222999" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:05.212285" elapsed="0.010773"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:05.211694" elapsed="0.011449"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:05.223775" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:05.223354" elapsed="0.000467"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:05.229450" 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-25T01:21:05.229043" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:05.229937" 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-25T01:21:05.229645" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:05.230032" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:21:05.230198" 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-25T01:21:05.228631" elapsed="0.001592"/>
</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-25T01:21:05.230388" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:05.231080" level="INFO">${ds_type} = operational</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-25T01:21:05.230714" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:05.231528" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:05.231284" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:05.231944" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:05.231702" elapsed="0.000272"/>
</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-25T01:21:05.232475" elapsed="0.000035"/>
</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-25T01:21:05.232907" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:05.232683" elapsed="0.000328"/>
</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-25T01:21:05.233249" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:05.233048" elapsed="0.000257"/>
</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-25T01:21:05.233473" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:05.233329" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:05.232601" elapsed="0.000947"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:05.232230" elapsed="0.001342"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:05.232039" elapsed="0.001559"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:05.233638" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:21:05.233844" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:05.233891" 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-25T01:21:05.227768" elapsed="0.006166"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:05.234501" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:05.234580" 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-25T01:21:05.234211" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:05.235222" 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-25T01:21:05.234898" elapsed="0.000506">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:05.234674" elapsed="0.000813">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:05.234656" elapsed="0.000865">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-25T01:21:05.235683" elapsed="0.000023"/>
</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-25T01:21:05.235866" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:05.235934" elapsed="0.000017"/>
</return>
<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>
<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-25T01:21:05.224942" elapsed="0.011124">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:05.224697" elapsed="0.011442">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:05.224499" elapsed="0.011698">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:05.224084" elapsed="0.012208">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:05.236541" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:05.195090" elapsed="0.041571">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:07.263257" elapsed="0.000240"/>
</kw>
<msg time="2026-04-25T01:21:07.263563" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:07.262576" elapsed="0.001049"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:07.262103" elapsed="0.001602"/>
</kw>
<msg time="2026-04-25T01:21:07.263751" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:07.253500" elapsed="0.010294"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:07.253066" elapsed="0.010803"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:07.264348" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:07.264087" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:07.269708" 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-25T01:21:07.269321" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:07.270200" 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-25T01:21:07.269895" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:07.270272" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:21:07.270429" 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-25T01:21:07.268907" elapsed="0.001546"/>
</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-25T01:21:07.270706" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:07.271380" level="INFO">${ds_type} = operational</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-25T01:21:07.271044" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:07.271808" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:07.271567" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:07.272240" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:07.272000" elapsed="0.000266"/>
</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-25T01:21:07.272663" 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-25T01:21:07.273098" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:07.272772" elapsed="0.000386"/>
</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-25T01:21:07.273362" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:07.273184" elapsed="0.000236"/>
</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-25T01:21:07.273591" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:07.273445" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:07.272753" elapsed="0.000914"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:07.272495" elapsed="0.001195"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:07.272313" elapsed="0.001404"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:07.273756" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:07.273957" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:07.274022" 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-25T01:21:07.268194" elapsed="0.005852"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:07.274496" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:07.274574" 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-25T01:21:07.274221" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:07.275185" 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-25T01:21:07.274888" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:07.274669" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:07.274650" elapsed="0.000705">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-25T01:21:07.275511" elapsed="0.000022"/>
</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-25T01:21:07.275691" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:07.275758" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:07.265546" elapsed="0.010317">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:07.265179" elapsed="0.010753">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:07.265033" elapsed="0.010975">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:07.264624" elapsed="0.011490">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:07.276352" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:07.237721" elapsed="0.038746">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:09.307228" elapsed="0.000415"/>
</kw>
<msg time="2026-04-25T01:21:09.307724" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:09.306340" elapsed="0.001464"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:09.305657" elapsed="0.002248"/>
</kw>
<msg time="2026-04-25T01:21:09.307995" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:09.294708" elapsed="0.013349"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:09.294124" elapsed="0.014030"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:09.308754" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:09.308419" elapsed="0.000396"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:09.315479" 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-25T01:21:09.315067" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:09.316026" 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-25T01:21:09.315671" elapsed="0.000383"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:09.316111" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:21:09.316276" 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-25T01:21:09.314646" elapsed="0.001655"/>
</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-25T01:21:09.316460" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:09.317179" level="INFO">${ds_type} = operational</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-25T01:21:09.316803" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:09.317669" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:09.317367" elapsed="0.000332"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:09.318134" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:09.317864" elapsed="0.000295"/>
</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-25T01:21:09.318564" elapsed="0.000025"/>
</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-25T01:21:09.318853" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:09.318677" elapsed="0.000265"/>
</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-25T01:21:09.319130" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:09.318983" elapsed="0.000202"/>
</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-25T01:21:09.319352" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:09.319210" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:09.318656" elapsed="0.000771"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:09.318392" elapsed="0.001059"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:09.318207" elapsed="0.001270"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:09.319516" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:21:09.319723" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:09.319777" 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-25T01:21:09.313887" elapsed="0.005914"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:09.320274" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:09.320351" 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-25T01:21:09.319995" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:09.321071" 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-25T01:21:09.320758" elapsed="0.000389">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:09.320524" elapsed="0.000694">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:09.320502" elapsed="0.000763">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-25T01:21:09.321451" elapsed="0.000023"/>
</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-25T01:21:09.321632" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:09.321700" elapsed="0.000017"/>
</return>
<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>
<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-25T01:21:09.310232" elapsed="0.011589">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:09.309913" elapsed="0.011980">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:09.309734" elapsed="0.012214">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:09.309157" elapsed="0.012903">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:09.322302" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:09.277582" elapsed="0.044839">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:11.349495" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:21:11.349811" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:11.348809" elapsed="0.001086"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:11.348314" elapsed="0.001678"/>
</kw>
<msg time="2026-04-25T01:21:11.350041" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:11.339386" elapsed="0.010700"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:11.338801" elapsed="0.011360"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:11.350648" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:11.350381" elapsed="0.000312"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:11.356066" 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-25T01:21:11.355651" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:11.356545" 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-25T01:21:11.356257" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:11.356619" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:21:11.356780" 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-25T01:21:11.355275" elapsed="0.001529"/>
</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-25T01:21:11.356958" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:11.357625" level="INFO">${ds_type} = operational</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-25T01:21:11.357295" elapsed="0.000356"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:11.358118" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:11.357826" elapsed="0.000318"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:11.358653" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:11.358377" elapsed="0.000303"/>
</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-25T01:21:11.359133" elapsed="0.000026"/>
</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-25T01:21:11.359400" elapsed="0.000183"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:11.359248" elapsed="0.000374"/>
</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-25T01:21:11.359798" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:11.359647" elapsed="0.000208"/>
</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-25T01:21:11.360045" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:11.359880" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:11.359227" elapsed="0.000895"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:11.358918" elapsed="0.001228"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:11.358729" elapsed="0.001463"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:11.360256" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:21:11.360470" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:11.360517" 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-25T01:21:11.354544" elapsed="0.005997"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:11.361037" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:11.361117" 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-25T01:21:11.360716" elapsed="0.000424"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:11.361718" 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-25T01:21:11.361434" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:11.361212" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:11.361193" elapsed="0.000725">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-25T01:21:11.362090" elapsed="0.000024"/>
</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-25T01:21:11.362406" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:11.362479" elapsed="0.000016"/>
</return>
<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>
<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-25T01:21:11.351723" elapsed="0.010865">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:11.351490" elapsed="0.011168">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:11.351346" elapsed="0.011368">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:11.350929" elapsed="0.011874">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:11.363063" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:11.323423" elapsed="0.039760">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:13.390180" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:21:13.390488" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:13.389506" elapsed="0.001045"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:13.388848" elapsed="0.001783"/>
</kw>
<msg time="2026-04-25T01:21:13.390762" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:13.380294" elapsed="0.010515"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:13.379850" elapsed="0.011036"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:13.391371" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:13.391110" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:13.396782" 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-25T01:21:13.396392" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:13.397279" 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-25T01:21:13.396989" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:13.397353" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:21:13.397510" 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-25T01:21:13.396016" elapsed="0.001518"/>
</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-25T01:21:13.397689" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:13.398358" level="INFO">${ds_type} = operational</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-25T01:21:13.398025" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:13.398780" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:13.398544" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:13.399208" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:13.398953" elapsed="0.000280"/>
</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-25T01:21:13.399627" elapsed="0.000023"/>
</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-25T01:21:13.399912" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:13.399765" elapsed="0.000216"/>
</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-25T01:21:13.400150" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:13.400007" elapsed="0.000196"/>
</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-25T01:21:13.400367" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:13.400226" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:13.399744" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:13.399459" elapsed="0.001004"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:13.399279" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:13.400527" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:21:13.400725" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:13.400771" 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-25T01:21:13.395262" elapsed="0.005532"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:13.401253" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:13.401330" 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-25T01:21:13.400980" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:13.401916" 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-25T01:21:13.401639" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:13.401423" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:13.401405" elapsed="0.000701">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-25T01:21:13.402258" elapsed="0.000022"/>
</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-25T01:21:13.402473" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:13.402539" elapsed="0.000016"/>
</return>
<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>
<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-25T01:21:13.392478" elapsed="0.010168">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:13.392240" elapsed="0.010475">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:13.392095" elapsed="0.010675">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:13.391678" elapsed="0.011180">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:13.403110" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:13.364373" elapsed="0.038854">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:15.430068" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:21:15.430375" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:15.429392" elapsed="0.001045"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:15.428909" elapsed="0.001609"/>
</kw>
<msg time="2026-04-25T01:21:15.430563" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:15.420288" elapsed="0.010320"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:15.419791" elapsed="0.010891"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:15.431154" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:15.430880" elapsed="0.000320"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:15.436364" 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-25T01:21:15.435962" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:15.436841" 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-25T01:21:15.436552" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:15.436914" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:21:15.437088" 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-25T01:21:15.435585" elapsed="0.001529"/>
</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-25T01:21:15.437269" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:15.437916" level="INFO">${ds_type} = operational</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-25T01:21:15.437582" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:15.438359" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:15.438120" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:15.438768" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:15.438533" elapsed="0.000261"/>
</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-25T01:21:15.439206" 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-25T01:21:15.439582" elapsed="0.000172"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:15.439313" elapsed="0.000481"/>
</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-25T01:21:15.439981" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:15.439819" elapsed="0.000219"/>
</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-25T01:21:15.440205" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:15.440062" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:15.439294" elapsed="0.000985"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:15.439037" elapsed="0.001266"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:15.438839" elapsed="0.001489"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:15.440366" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:15.440566" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:15.440611" 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-25T01:21:15.434834" elapsed="0.005800"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:15.441099" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:15.441176" 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-25T01:21:15.440810" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:15.441759" 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-25T01:21:15.441484" elapsed="0.000347">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:15.441268" elapsed="0.000630">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:15.441250" elapsed="0.000679">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-25T01:21:15.442099" elapsed="0.000022"/>
</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-25T01:21:15.442274" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:15.442339" elapsed="0.000014"/>
</return>
<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>
<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-25T01:21:15.432249" elapsed="0.010194">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:15.432015" elapsed="0.010495">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:15.431856" elapsed="0.010709">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:15.431457" elapsed="0.011193">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:15.442883" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:15.404167" elapsed="0.038847">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:17.470707" elapsed="0.000249"/>
</kw>
<msg time="2026-04-25T01:21:17.471048" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:17.470045" elapsed="0.001068"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:17.469482" elapsed="0.001714"/>
</kw>
<msg time="2026-04-25T01:21:17.471244" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:17.460805" elapsed="0.010486"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:17.460388" elapsed="0.010980"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:17.471912" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:17.471564" elapsed="0.000395"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:17.477333" 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-25T01:21:17.476930" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:17.477841" 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-25T01:21:17.477524" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:17.477914" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:21:17.478088" 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-25T01:21:17.476556" elapsed="0.001558"/>
</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-25T01:21:17.478270" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:17.478919" level="INFO">${ds_type} = operational</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-25T01:21:17.478585" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:17.479362" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:17.479122" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:17.479775" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:17.479537" 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-25T01:21:17.480217" 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-25T01:21:17.480472" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:17.480325" elapsed="0.000202"/>
</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-25T01:21:17.480691" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:17.480550" elapsed="0.000195"/>
</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-25T01:21:17.480911" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:17.480769" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:17.480306" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:17.480047" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:17.479846" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:17.481094" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:17.481294" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:17.481340" 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-25T01:21:17.475818" elapsed="0.005546"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:17.481954" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:17.482050" 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-25T01:21:17.481539" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:17.482649" 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-25T01:21:17.482373" elapsed="0.000347">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:17.482153" elapsed="0.000632">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:17.482134" elapsed="0.000682">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-25T01:21:17.482986" elapsed="0.000023"/>
</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-25T01:21:17.483163" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:17.483229" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:17.473020" elapsed="0.010314">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:17.472765" elapsed="0.010687">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:17.472621" elapsed="0.010887">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:17.472215" elapsed="0.011381">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:17.483834" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:17.443881" elapsed="0.040070">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:19.518204" elapsed="0.000259"/>
</kw>
<msg time="2026-04-25T01:21:19.518589" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:19.517429" elapsed="0.001237"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:19.516842" elapsed="0.001922"/>
</kw>
<msg time="2026-04-25T01:21:19.518825" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:19.506747" elapsed="0.012133"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:19.506178" elapsed="0.012818"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:19.519508" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:19.519212" elapsed="0.000354"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:19.525707" 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-25T01:21:19.525243" elapsed="0.000496"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:19.526301" 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-25T01:21:19.525938" elapsed="0.000393"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:19.526388" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:21:19.526619" 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-25T01:21:19.524759" elapsed="0.001891"/>
</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-25T01:21:19.526846" elapsed="0.000222"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:19.527707" level="INFO">${ds_type} = operational</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-25T01:21:19.527299" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:19.528253" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:19.527936" elapsed="0.000349"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:19.528794" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:19.528477" elapsed="0.000350"/>
</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-25T01:21:19.529351" elapsed="0.000029"/>
</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-25T01:21:19.529668" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:19.529484" elapsed="0.000251"/>
</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-25T01:21:19.531893" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:19.529765" elapsed="0.002202"/>
</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-25T01:21:19.532192" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:19.532012" elapsed="0.000320"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:19.529461" elapsed="0.002901"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:19.529145" elapsed="0.003247"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:19.528891" elapsed="0.003533"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:19.532476" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:21:19.532727" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:19.532783" 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-25T01:21:19.523890" elapsed="0.008920"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:19.533384" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:19.533478" 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-25T01:21:19.533049" elapsed="0.000457"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:19.534212" 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-25T01:21:19.533854" elapsed="0.000445">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:19.533589" elapsed="0.000789">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:19.533567" elapsed="0.000848">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-25T01:21:19.534627" elapsed="0.000025"/>
</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-25T01:21:19.534810" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:19.534877" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:19.520723" elapsed="0.014280">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:19.520473" elapsed="0.014600">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:19.520326" elapsed="0.014800">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:19.519839" elapsed="0.015371">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:19.535446" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:19.484888" elapsed="0.050673">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:21.564146" elapsed="0.000255"/>
</kw>
<msg time="2026-04-25T01:21:21.564466" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:21.563431" elapsed="0.001100"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:21.562868" elapsed="0.001742"/>
</kw>
<msg time="2026-04-25T01:21:21.564657" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:21.554188" elapsed="0.010513"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:21.553569" elapsed="0.011207"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:21.565275" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:21.565015" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:21.571217" 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-25T01:21:21.570788" elapsed="0.000457"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:21.571777" 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-25T01:21:21.571484" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:21.571850" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:21:21.572030" 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-25T01:21:21.570186" elapsed="0.001869"/>
</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-25T01:21:21.572212" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:21.572870" level="INFO">${ds_type} = operational</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-25T01:21:21.572536" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:21.573312" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:21.573070" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:21.573726" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:21.573487" elapsed="0.000265"/>
</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-25T01:21:21.574176" 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-25T01:21:21.574434" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:21.574286" elapsed="0.000203"/>
</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-25T01:21:21.574671" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:21.574514" elapsed="0.000211"/>
</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-25T01:21:21.574892" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:21.574749" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:21.574266" elapsed="0.000714"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:21.573999" elapsed="0.001006"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:21.573798" elapsed="0.001232"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:21.575072" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:21:21.575277" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:21.575323" 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-25T01:21:21.569411" elapsed="0.005935"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:21.575800" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:21.575877" 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-25T01:21:21.575522" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:21.576493" 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-25T01:21:21.576212" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:21.575986" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:21.575952" elapsed="0.000723">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-25T01:21:21.576829" 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-25T01:21:21.577021" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:21.577088" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:21.566379" elapsed="0.010816">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:21.566142" elapsed="0.011122">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:21.565998" elapsed="0.011322">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:21.565574" elapsed="0.011834">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:21.577700" elapsed="0.000062"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:21.536444" elapsed="0.041417">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:23.604300" elapsed="0.000249"/>
</kw>
<msg time="2026-04-25T01:21:23.604614" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:23.603606" elapsed="0.001073"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:23.603118" elapsed="0.001663"/>
</kw>
<msg time="2026-04-25T01:21:23.604848" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:23.594446" elapsed="0.010454"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:23.594013" elapsed="0.010980"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:23.605471" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:23.605207" elapsed="0.000310"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:23.610764" 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-25T01:21:23.610362" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:23.611267" 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-25T01:21:23.610954" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:23.611340" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:21:23.611501" 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-25T01:21:23.609980" elapsed="0.001545"/>
</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-25T01:21:23.611683" elapsed="0.000204"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:23.612421" level="INFO">${ds_type} = operational</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-25T01:21:23.612076" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:23.612845" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:23.612606" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:23.613270" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:23.613033" elapsed="0.000261"/>
</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-25T01:21:23.613698" 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-25T01:21:23.614005" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:23.613810" elapsed="0.000254"/>
</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-25T01:21:23.614236" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:23.614089" elapsed="0.000200"/>
</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-25T01:21:23.614453" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:23.614311" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:23.613789" elapsed="0.000737"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:23.613528" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:23.613342" elapsed="0.001233"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:23.614615" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:23.614815" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:23.614861" 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-25T01:21:23.609214" elapsed="0.005670"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:23.615430" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:23.615510" 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-25T01:21:23.615150" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:23.616330" 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-25T01:21:23.616042" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:23.615795" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:23.615585" elapsed="0.000919">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-25T01:21:23.616661" 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-25T01:21:23.616836" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:23.616903" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:23.606583" elapsed="0.010450">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:23.606342" elapsed="0.010761">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:23.606196" elapsed="0.010963">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:23.605753" elapsed="0.011495">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:23.617490" elapsed="0.000040"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:23.578724" elapsed="0.038915">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:25.643644" elapsed="0.000262"/>
</kw>
<msg time="2026-04-25T01:21:25.643988" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:25.642946" elapsed="0.001110"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:25.642472" elapsed="0.001666"/>
</kw>
<msg time="2026-04-25T01:21:25.644187" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:25.633792" elapsed="0.010440"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:25.633358" elapsed="0.010953"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:25.644830" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:25.644526" elapsed="0.000352"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:25.650380" 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-25T01:21:25.649958" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:25.650862" 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-25T01:21:25.650571" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:25.650936" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:21:25.651117" 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-25T01:21:25.649574" elapsed="0.001569"/>
</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-25T01:21:25.651398" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:25.652092" level="INFO">${ds_type} = operational</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-25T01:21:25.651726" elapsed="0.000393"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:25.652554" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:25.652283" elapsed="0.000299"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:25.653057" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:25.652780" elapsed="0.000304"/>
</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-25T01:21:25.653505" elapsed="0.000027"/>
</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-25T01:21:25.653772" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:25.653621" elapsed="0.000208"/>
</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-25T01:21:25.654017" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:25.653855" elapsed="0.000218"/>
</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-25T01:21:25.654242" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:25.654097" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:25.653600" elapsed="0.000718"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:25.653322" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:25.653132" elapsed="0.001245"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:25.654417" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:21:25.654622" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:25.654670" 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-25T01:21:25.648816" elapsed="0.005878"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:25.655165" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:25.655244" 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-25T01:21:25.654869" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:25.655852" 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-25T01:21:25.655568" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:25.655344" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:25.655321" elapsed="0.000724">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-25T01:21:25.656200" elapsed="0.000023"/>
</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-25T01:21:25.656376" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:25.656442" elapsed="0.000016"/>
</return>
<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>
<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-25T01:21:25.645919" elapsed="0.010630">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:25.645680" elapsed="0.010940">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:25.645536" elapsed="0.011139">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:25.645131" elapsed="0.011659">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:25.657061" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:25.618469" elapsed="0.038713">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:27.686757" elapsed="0.000401"/>
</kw>
<msg time="2026-04-25T01:21:27.687226" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:27.685924" elapsed="0.001367"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:27.685444" elapsed="0.001929"/>
</kw>
<msg time="2026-04-25T01:21:27.687421" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:27.676090" elapsed="0.011375"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:27.675578" elapsed="0.011962"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:27.688038" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:27.687742" elapsed="0.000344"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:27.693744" 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-25T01:21:27.693342" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:27.694291" 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-25T01:21:27.693950" elapsed="0.000369"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:27.694369" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:21:27.694533" 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-25T01:21:27.692922" elapsed="0.001636"/>
</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-25T01:21:27.694716" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:27.695457" level="INFO">${ds_type} = operational</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-25T01:21:27.695054" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:27.695912" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:27.695647" elapsed="0.000300"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:27.696383" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:27.696137" elapsed="0.000272"/>
</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-25T01:21:27.696829" elapsed="0.000026"/>
</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-25T01:21:27.697196" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:27.696956" elapsed="0.000322"/>
</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-25T01:21:27.697484" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:27.697316" elapsed="0.000226"/>
</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-25T01:21:27.697711" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:27.697567" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:27.696927" elapsed="0.000857"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:27.696646" elapsed="0.001162"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:27.696457" elapsed="0.001377"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:27.697875" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:21:27.698098" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:27.698146" 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-25T01:21:27.692050" elapsed="0.006119"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:27.698818" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:27.698899" 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-25T01:21:27.698345" elapsed="0.000578"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:27.699630" 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-25T01:21:27.699338" elapsed="0.000379">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:27.699064" elapsed="0.000724">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:27.699044" elapsed="0.000776">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-25T01:21:27.700000" elapsed="0.000023"/>
</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-25T01:21:27.700215" elapsed="0.000030"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:27.700297" elapsed="0.000017"/>
</return>
<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>
<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-25T01:21:27.689262" elapsed="0.011147">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:27.688946" elapsed="0.011534">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:27.688793" elapsed="0.011743">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:27.688323" elapsed="0.012302">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:27.700889" elapsed="0.000035"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:27.658106" elapsed="0.042972">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:29.727583" elapsed="0.000236"/>
</kw>
<msg time="2026-04-25T01:21:29.727885" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:29.726910" elapsed="0.001037"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:29.726441" elapsed="0.001603"/>
</kw>
<msg time="2026-04-25T01:21:29.728091" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:29.717758" elapsed="0.010377"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:29.717335" elapsed="0.010876"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:29.728664" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:29.728403" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:29.734080" 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-25T01:21:29.733679" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:29.734552" 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-25T01:21:29.734269" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:29.734624" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:21:29.734781" 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-25T01:21:29.733304" elapsed="0.001501"/>
</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-25T01:21:29.734959" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:29.735618" level="INFO">${ds_type} = operational</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-25T01:21:29.735289" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:29.736052" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:29.735801" elapsed="0.000277"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:29.736556" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:29.736316" elapsed="0.000265"/>
</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-25T01:21:29.736995" elapsed="0.000025"/>
</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-25T01:21:29.737275" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:29.737106" elapsed="0.000224"/>
</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-25T01:21:29.737496" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:29.737355" elapsed="0.000194"/>
</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-25T01:21:29.737714" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:29.737573" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:29.737087" elapsed="0.000701"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:29.736811" elapsed="0.001000"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:29.736628" elapsed="0.001209"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:29.737876" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:21:29.738091" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:29.738137" 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-25T01:21:29.732535" elapsed="0.005625"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:29.738604" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:29.738681" 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-25T01:21:29.738333" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:29.739286" 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-25T01:21:29.739009" elapsed="0.000348">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:29.738774" elapsed="0.000649">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:29.738756" elapsed="0.000698">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-25T01:21:29.739608" elapsed="0.000022"/>
</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-25T01:21:29.739783" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:29.739850" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:29.729750" elapsed="0.010204">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:29.729513" elapsed="0.010526">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:29.729374" elapsed="0.010719">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:29.728942" elapsed="0.011239">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:29.740416" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:29.702405" elapsed="0.038126">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:31.768285" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:21:31.768595" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:31.767616" elapsed="0.001042"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:31.767152" elapsed="0.001584"/>
</kw>
<msg time="2026-04-25T01:21:31.768857" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:31.758485" elapsed="0.010418"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:31.758068" elapsed="0.010924"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:31.769449" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:31.769193" elapsed="0.000301"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:31.774667" 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-25T01:21:31.774284" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:31.775927" 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-25T01:21:31.774854" elapsed="0.001101"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:31.776028" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:21:31.776201" 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-25T01:21:31.773897" elapsed="0.002329"/>
</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-25T01:21:31.776383" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:31.777064" level="INFO">${ds_type} = operational</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-25T01:21:31.776701" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:31.777490" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:31.777250" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:31.777907" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:31.777668" elapsed="0.000265"/>
</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-25T01:21:31.778355" elapsed="0.000025"/>
</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-25T01:21:31.778612" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:31.778464" elapsed="0.000204"/>
</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-25T01:21:31.778835" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:31.778692" elapsed="0.000196"/>
</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-25T01:21:31.779095" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:31.778911" elapsed="0.000243"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:31.778444" elapsed="0.000735"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:31.778177" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:31.777993" elapsed="0.001240"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:31.779276" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:31.779501" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:31.779564" 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-25T01:21:31.773184" elapsed="0.006406"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:31.780261" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:31.780341" 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-25T01:21:31.779768" elapsed="0.000597"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:31.780935" 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-25T01:21:31.780655" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:31.780436" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:31.780418" elapsed="0.000708">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-25T01:21:31.781279" elapsed="0.000022"/>
</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-25T01:21:31.781497" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:31.781565" elapsed="0.000016"/>
</return>
<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>
<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-25T01:21:31.770514" elapsed="0.011183">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:31.770281" elapsed="0.011496">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:31.770137" elapsed="0.011698">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:31.769727" elapsed="0.012197">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:31.782180" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:31.741561" elapsed="0.040748">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:33.810225" elapsed="0.000235"/>
</kw>
<msg time="2026-04-25T01:21:33.810523" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:33.809556" elapsed="0.001027"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:33.809089" elapsed="0.001577"/>
</kw>
<msg time="2026-04-25T01:21:33.810713" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:33.800498" elapsed="0.010259"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:33.800084" elapsed="0.010747"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:33.811296" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:33.811039" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:33.816675" 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-25T01:21:33.816291" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:33.817177" 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-25T01:21:33.816861" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:33.817251" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:21:33.817407" 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-25T01:21:33.815900" elapsed="0.001531"/>
</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-25T01:21:33.817585" elapsed="0.000151"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:33.818244" level="INFO">${ds_type} = operational</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-25T01:21:33.817895" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:33.818661" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:33.818426" elapsed="0.000260"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:33.819086" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:33.818832" elapsed="0.000279"/>
</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-25T01:21:33.819507" 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-25T01:21:33.819837" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:33.819616" elapsed="0.000279"/>
</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-25T01:21:33.820081" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:33.819921" elapsed="0.000216"/>
</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-25T01:21:33.820304" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:33.820161" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:33.819596" elapsed="0.000783"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:33.819338" elapsed="0.001065"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:33.819157" elapsed="0.001273"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:33.820469" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:21:33.820671" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:33.820717" 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-25T01:21:33.815188" elapsed="0.005553"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:33.821203" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:33.821279" 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-25T01:21:33.820914" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:33.822057" 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-25T01:21:33.821744" elapsed="0.000387">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:33.821441" elapsed="0.000758">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:33.821407" elapsed="0.000824">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-25T01:21:33.822383" elapsed="0.000022"/>
</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-25T01:21:33.822558" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:33.822623" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:33.812392" elapsed="0.010337">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:33.812157" elapsed="0.010640">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:33.812015" elapsed="0.010839">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:33.811599" elapsed="0.011342">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:33.823214" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:33.783422" elapsed="0.039909">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:35.850491" elapsed="0.000249"/>
</kw>
<msg time="2026-04-25T01:21:35.850809" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:35.849816" elapsed="0.001057"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:35.849338" elapsed="0.001614"/>
</kw>
<msg time="2026-04-25T01:21:35.851016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:35.840612" elapsed="0.010450"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:35.840177" elapsed="0.010959"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:35.851685" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:35.851340" elapsed="0.000390"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:35.856929" 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-25T01:21:35.856538" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:35.857427" 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-25T01:21:35.857137" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:35.857500" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:21:35.857659" 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-25T01:21:35.856147" elapsed="0.001537"/>
</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-25T01:21:35.857841" elapsed="0.000187"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:35.858528" level="INFO">${ds_type} = operational</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-25T01:21:35.858192" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:35.858956" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:35.858713" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:35.859385" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:35.859149" elapsed="0.000261"/>
</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-25T01:21:35.859809" 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-25T01:21:35.860085" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:35.859920" elapsed="0.000221"/>
</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-25T01:21:35.860308" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:35.860166" elapsed="0.000196"/>
</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-25T01:21:35.862055" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:35.861884" elapsed="0.000228"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:35.859900" elapsed="0.002235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:35.859636" elapsed="0.002524"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:35.859455" elapsed="0.002732"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:35.862227" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:35.862430" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:35.862477" 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-25T01:21:35.855409" elapsed="0.007091"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:35.862955" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:35.863053" 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-25T01:21:35.862676" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:35.863648" 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-25T01:21:35.863370" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:35.863148" elapsed="0.000637">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:35.863129" elapsed="0.000688">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-25T01:21:35.863978" elapsed="0.000036"/>
</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-25T01:21:35.864171" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:35.864237" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:35.852800" elapsed="0.011543">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:35.852561" elapsed="0.011893">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:35.852415" elapsed="0.012107">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:35.851967" elapsed="0.012647">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:35.864852" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:35.824414" elapsed="0.040556">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:37.894197" elapsed="0.000310"/>
</kw>
<msg time="2026-04-25T01:21:37.894594" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:37.893365" elapsed="0.001315"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:37.892805" elapsed="0.001987"/>
</kw>
<msg time="2026-04-25T01:21:37.894881" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:37.882932" elapsed="0.012011"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:37.882431" elapsed="0.012632"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:37.895654" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:37.895329" elapsed="0.000385"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:37.901776" 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-25T01:21:37.901325" elapsed="0.000480"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:37.902305" 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-25T01:21:37.901979" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:37.902382" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:21:37.902547" 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-25T01:21:37.900821" elapsed="0.001751"/>
</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-25T01:21:37.902746" elapsed="0.000183"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:37.903488" level="INFO">${ds_type} = operational</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-25T01:21:37.903140" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:37.903969" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:37.903701" elapsed="0.000319"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:37.904518" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:37.904221" elapsed="0.000331"/>
</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-25T01:21:37.905014" elapsed="0.000027"/>
</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-25T01:21:37.905285" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:37.905131" elapsed="0.000235"/>
</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-25T01:21:37.905545" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:37.905393" elapsed="0.000210"/>
</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-25T01:21:37.905805" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:37.905650" elapsed="0.000325"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:37.905110" elapsed="0.000906"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:37.904814" elapsed="0.001228"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:37.904606" elapsed="0.001464"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:37.906113" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:21:37.906323" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:37.906370" 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-25T01:21:37.899934" elapsed="0.006459"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:37.906883" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:37.906968" 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-25T01:21:37.906570" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:37.907684" 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-25T01:21:37.907386" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:37.907137" elapsed="0.000693">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:37.907062" elapsed="0.000801">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-25T01:21:37.908040" elapsed="0.000023"/>
</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-25T01:21:37.908224" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:37.908291" elapsed="0.000016"/>
</return>
<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>
<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-25T01:21:37.897033" elapsed="0.011365">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:37.896759" elapsed="0.011708">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:37.896570" elapsed="0.011953">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:37.896052" elapsed="0.012560">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:37.908849" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:37.865902" elapsed="0.043067">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:39.936776" elapsed="0.000282"/>
</kw>
<msg time="2026-04-25T01:21:39.937127" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:39.936119" elapsed="0.001070"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:39.935610" elapsed="0.001658"/>
</kw>
<msg time="2026-04-25T01:21:39.937313" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:39.927007" elapsed="0.010350"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:39.926569" elapsed="0.010860"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:39.937882" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:39.937626" elapsed="0.000300"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:39.943085" 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-25T01:21:39.942684" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:39.943659" 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-25T01:21:39.943364" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:39.943733" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:21:39.943904" 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-25T01:21:39.942310" elapsed="0.001620"/>
</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-25T01:21:39.944109" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:39.944762" level="INFO">${ds_type} = operational</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-25T01:21:39.944426" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:39.945204" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:39.944946" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:39.945614" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:39.945380" elapsed="0.000259"/>
</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-25T01:21:39.946068" 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-25T01:21:39.946324" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:39.946177" elapsed="0.000202"/>
</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-25T01:21:39.946544" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:39.946403" elapsed="0.000195"/>
</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-25T01:21:39.946761" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:39.946621" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:39.946157" elapsed="0.000677"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:39.945866" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:39.945685" elapsed="0.001197"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:39.946921" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:39.947157" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:39.947204" 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-25T01:21:39.941570" elapsed="0.005657"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:39.947672" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:39.947750" 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-25T01:21:39.947401" elapsed="0.000373"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:39.948587" 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-25T01:21:39.948296" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:39.948067" elapsed="0.000660">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:39.947824" elapsed="0.000935">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-25T01:21:39.948919" elapsed="0.000022"/>
</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-25T01:21:39.949111" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:39.949178" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:39.938938" elapsed="0.010351">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:39.938709" elapsed="0.010648">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:39.938569" elapsed="0.010843">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:39.938174" elapsed="0.011326">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:39.949743" elapsed="0.000058"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:39.910028" elapsed="0.039868">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:41.979158" elapsed="0.000287"/>
</kw>
<msg time="2026-04-25T01:21:41.979518" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:41.978287" elapsed="0.001308"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:41.977635" elapsed="0.002057"/>
</kw>
<msg time="2026-04-25T01:21:41.979751" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:41.966083" elapsed="0.013722"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:41.965482" elapsed="0.014416"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:41.980496" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:41.980176" elapsed="0.000377"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:41.990545" 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-25T01:21:41.988621" elapsed="0.001968"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:41.991301" 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-25T01:21:41.990838" elapsed="0.000657"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:41.991564" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T01:21:41.991799" 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-25T01:21:41.987656" elapsed="0.004179"/>
</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-25T01:21:41.992091" elapsed="0.000239"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:41.993090" level="INFO">${ds_type} = operational</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-25T01:21:41.992568" elapsed="0.000561"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:41.993735" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:41.993382" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:41.994496" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:41.994137" elapsed="0.000398"/>
</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-25T01:21:41.995165" elapsed="0.000037"/>
</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-25T01:21:41.995547" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:41.995326" elapsed="0.000302"/>
</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-25T01:21:41.995876" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:41.995665" elapsed="0.000289"/>
</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-25T01:21:41.996228" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:41.996011" elapsed="0.000292"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:41.995298" elapsed="0.001038"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:41.994884" elapsed="0.001487"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:41.994605" elapsed="0.001803"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:41.996465" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:21:41.996762" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:41.996830" 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-25T01:21:41.985947" elapsed="0.010918"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:41.997688" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:41.997804" 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-25T01:21:41.997236" elapsed="0.000604"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:41.998502" 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-25T01:21:41.998223" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:41.997946" elapsed="0.000700">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:41.997918" elapsed="0.000760">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-25T01:21:41.998832" elapsed="0.000022"/>
</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-25T01:21:41.999024" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:41.999092" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:41.981868" elapsed="0.017332">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:41.981569" elapsed="0.017700">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:41.981394" elapsed="0.017931">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:41.980852" elapsed="0.018562">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:41.999655" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:41.950564" elapsed="0.049209">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:44.026588" elapsed="0.000237"/>
</kw>
<msg time="2026-04-25T01:21:44.026891" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:44.025922" elapsed="0.001029"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:44.025460" elapsed="0.001593"/>
</kw>
<msg time="2026-04-25T01:21:44.027099" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:44.016906" elapsed="0.010241"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:44.016457" elapsed="0.010765"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:44.027670" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:44.027414" elapsed="0.000353"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:44.033058" 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-25T01:21:44.032625" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:44.033545" 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-25T01:21:44.033252" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:44.033619" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:21:44.033776" 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-25T01:21:44.032249" elapsed="0.001552"/>
</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-25T01:21:44.034082" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:44.034746" level="INFO">${ds_type} = operational</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-25T01:21:44.034407" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:44.035192" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:44.034933" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:44.035628" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:44.035386" elapsed="0.000268"/>
</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-25T01:21:44.036074" 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-25T01:21:44.036334" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:44.036185" elapsed="0.000205"/>
</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-25T01:21:44.036558" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:44.036415" elapsed="0.000197"/>
</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-25T01:21:44.036778" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:44.036636" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:44.036166" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:44.035886" elapsed="0.000994"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:44.035703" elapsed="0.001229"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:44.036992" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:21:44.037202" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:44.037250" 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-25T01:21:44.031478" elapsed="0.005796"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:44.037899" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:44.037994" 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-25T01:21:44.037450" elapsed="0.000571"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:44.038591" 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-25T01:21:44.038312" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:44.038092" elapsed="0.000639">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:44.038073" elapsed="0.000690">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-25T01:21:44.038917" elapsed="0.000022"/>
</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-25T01:21:44.039112" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:44.039179" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:44.028799" elapsed="0.010485">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:44.028557" elapsed="0.010795">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:44.028415" elapsed="0.010992">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:44.028019" elapsed="0.011474">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:44.039727" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:44.000728" elapsed="0.039113">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:46.066452" elapsed="0.000340"/>
</kw>
<msg time="2026-04-25T01:21:46.066859" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:46.065739" elapsed="0.001199"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:46.065265" elapsed="0.001783"/>
</kw>
<msg time="2026-04-25T01:21:46.067096" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:46.056156" elapsed="0.010986"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:46.055694" elapsed="0.011525"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:46.067682" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:46.067418" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:46.073289" 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-25T01:21:46.072876" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:46.073825" 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-25T01:21:46.073524" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:46.073901" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:21:46.074096" 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-25T01:21:46.072492" elapsed="0.001638"/>
</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-25T01:21:46.074295" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:46.075065" level="INFO">${ds_type} = operational</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-25T01:21:46.074682" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:46.075500" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:46.075257" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:46.075991" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:46.075712" elapsed="0.000307"/>
</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-25T01:21:46.076462" elapsed="0.000025"/>
</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-25T01:21:46.076730" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:46.076573" elapsed="0.000226"/>
</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-25T01:21:46.076990" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:46.076825" elapsed="0.000221"/>
</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-25T01:21:46.077214" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:46.077070" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:46.076553" elapsed="0.000734"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:46.076286" elapsed="0.001025"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:46.076068" elapsed="0.001275"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:46.077394" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:21:46.077599" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:46.077645" 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-25T01:21:46.071693" elapsed="0.005975"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:46.078162" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:46.078240" 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-25T01:21:46.077860" elapsed="0.000404"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:46.078878" 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-25T01:21:46.078598" elapsed="0.000386">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:46.078377" elapsed="0.000681">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:46.078357" elapsed="0.000733">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-25T01:21:46.079249" 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-25T01:21:46.079425" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:46.079512" elapsed="0.000021"/>
</return>
<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>
<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-25T01:21:46.068818" elapsed="0.010811">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:46.068580" elapsed="0.011120">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:46.068436" elapsed="0.011318">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:46.067988" elapsed="0.011855">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:46.080154" elapsed="0.000028"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:46.040704" elapsed="0.039574">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:48.103038" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:21:48.103349" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:48.102342" elapsed="0.001072"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:48.101825" elapsed="0.001672"/>
</kw>
<msg time="2026-04-25T01:21:48.103545" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:48.093192" elapsed="0.010399"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:48.092710" elapsed="0.010958"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:48.104208" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:48.103919" elapsed="0.000336"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:48.109633" 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-25T01:21:48.109211" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:48.110195" 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-25T01:21:48.109844" elapsed="0.000378"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:48.110272" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:21:48.110464" 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-25T01:21:48.108778" elapsed="0.001712"/>
</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-25T01:21:48.110651" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:48.111357" level="INFO">${ds_type} = operational</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-25T01:21:48.110999" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:48.111821" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:48.111544" elapsed="0.000305"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:48.112410" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:48.112160" elapsed="0.000277"/>
</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-25T01:21:48.112859" elapsed="0.000026"/>
</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-25T01:21:48.113145" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:48.112992" 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-25T01:21:48.113378" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:48.113229" elapsed="0.000205"/>
</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-25T01:21:48.113604" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:48.113460" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:48.112954" elapsed="0.000725"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:48.112681" elapsed="0.001022"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:48.112487" elapsed="0.001245"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:48.113774" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:21:48.114025" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:48.114076" 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-25T01:21:48.108053" elapsed="0.006047"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:48.114798" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:48.114880" 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-25T01:21:48.114279" elapsed="0.000626"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:48.115555" 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-25T01:21:48.115251" elapsed="0.000380">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:48.114996" elapsed="0.000705">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:48.114960" elapsed="0.000774">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-25T01:21:48.115954" elapsed="0.000039"/>
</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-25T01:21:48.116156" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:48.116226" elapsed="0.000016"/>
</return>
<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>
<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-25T01:21:48.105302" elapsed="0.011040">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:48.105061" elapsed="0.011351">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:48.104895" elapsed="0.011579">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:48.104492" elapsed="0.012087">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:48.116826" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:48.081312" elapsed="0.035634">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:50.144029" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:21:50.144341" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:50.143352" elapsed="0.001054"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:50.142867" elapsed="0.001622"/>
</kw>
<msg time="2026-04-25T01:21:50.144636" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:50.134237" elapsed="0.010448"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:50.133765" elapsed="0.010997"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:50.145272" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:50.144956" elapsed="0.000369"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:50.150749" 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-25T01:21:50.150358" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:50.151249" 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-25T01:21:50.150942" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:50.151322" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:21:50.151480" 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-25T01:21:50.149962" elapsed="0.001543"/>
</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-25T01:21:50.151662" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:50.152339" level="INFO">${ds_type} = operational</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-25T01:21:50.152001" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:50.152771" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:50.152527" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:50.153212" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:50.152950" elapsed="0.000299"/>
</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-25T01:21:50.153647" 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-25T01:21:50.153904" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:50.153756" elapsed="0.000204"/>
</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-25T01:21:50.154146" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:50.154002" elapsed="0.000198"/>
</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-25T01:21:50.154367" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:50.154223" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:50.153736" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:50.153478" elapsed="0.000987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:50.153296" elapsed="0.001194"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:50.154529" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:21:50.154729" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:50.154775" 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-25T01:21:50.149231" elapsed="0.005568"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:50.155266" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:50.155344" 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-25T01:21:50.154989" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:50.155935" 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-25T01:21:50.155658" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:50.155438" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:50.155419" elapsed="0.000702">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-25T01:21:50.156275" elapsed="0.000022"/>
</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-25T01:21:50.156515" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:50.156584" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:50.146369" elapsed="0.010322">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:50.146129" elapsed="0.010633">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:50.145981" elapsed="0.010838">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:50.145560" elapsed="0.011347">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:50.157161" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:50.117890" elapsed="0.039418">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:52.189758" elapsed="0.000364"/>
</kw>
<msg time="2026-04-25T01:21:52.190209" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:52.188747" elapsed="0.001548"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:52.188010" elapsed="0.002405"/>
</kw>
<msg time="2026-04-25T01:21:52.190486" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:52.175305" elapsed="0.015252"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:52.174670" elapsed="0.016003"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:52.191374" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:52.190967" elapsed="0.000478"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:52.199123" 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-25T01:21:52.198540" elapsed="0.000623"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:52.199832" 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-25T01:21:52.199402" elapsed="0.000468"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:52.199939" elapsed="0.000067"/>
</return>
<msg time="2026-04-25T01:21:52.200199" 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-25T01:21:52.197958" elapsed="0.002278"/>
</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-25T01:21:52.200469" elapsed="0.000261"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:52.201494" level="INFO">${ds_type} = operational</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-25T01:21:52.200999" elapsed="0.000535"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:52.202154" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:52.201770" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:52.202775" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:52.202415" elapsed="0.000398"/>
</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-25T01:21:52.203441" elapsed="0.000037"/>
</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-25T01:21:52.203920" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:52.203602" elapsed="0.000431"/>
</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-25T01:21:52.204302" elapsed="0.001992"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:52.204074" elapsed="0.002283"/>
</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-25T01:21:52.206636" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:52.206398" elapsed="0.000323"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:52.203573" elapsed="0.003188"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:52.203166" elapsed="0.003638"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:52.202879" elapsed="0.003967"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:52.206911" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:21:52.207238" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:52.207310" 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-25T01:21:52.196889" elapsed="0.010459"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:52.208054" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:52.208172" 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-25T01:21:52.207620" elapsed="0.000590"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:52.209129" 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-25T01:21:52.208685" elapsed="0.000548">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:52.208317" elapsed="0.001017">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:52.208288" elapsed="0.001097">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-25T01:21:52.209624" elapsed="0.000034"/>
</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-25T01:21:52.209898" elapsed="0.000033"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:52.210024" elapsed="0.000025"/>
</return>
<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>
<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-25T01:21:52.193016" elapsed="0.017173">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:52.192651" elapsed="0.017647">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:52.192402" elapsed="0.017983">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:52.191793" elapsed="0.018732">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:52.210886" elapsed="0.000038"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:52.158045" elapsed="0.053046">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:54.237996" elapsed="0.000258"/>
</kw>
<msg time="2026-04-25T01:21:54.238325" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:54.237295" elapsed="0.001095"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:54.236756" elapsed="0.001749"/>
</kw>
<msg time="2026-04-25T01:21:54.238557" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:54.227967" elapsed="0.010637"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:54.227535" elapsed="0.011146"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:54.239279" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:54.238884" elapsed="0.000444"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:54.244834" 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-25T01:21:54.244430" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:54.245348" 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-25T01:21:54.245046" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:54.245428" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:21:54.245590" 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-25T01:21:54.244038" elapsed="0.001576"/>
</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-25T01:21:54.245774" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:54.246506" level="INFO">${ds_type} = operational</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-25T01:21:54.246114" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:54.246950" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:54.246703" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:54.247396" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:54.247147" elapsed="0.000279"/>
</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-25T01:21:54.247850" elapsed="0.000027"/>
</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-25T01:21:54.248145" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:54.247985" elapsed="0.000217"/>
</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-25T01:21:54.248371" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:54.248227" elapsed="0.000208"/>
</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-25T01:21:54.248607" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:54.248460" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:54.247947" elapsed="0.000734"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:54.247664" elapsed="0.001042"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:54.247474" elapsed="0.001260"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:54.248775" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:54.248998" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:54.249047" 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-25T01:21:54.243276" elapsed="0.005794"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:54.249542" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:54.249622" 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-25T01:21:54.249249" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:54.250248" 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-25T01:21:54.249942" elapsed="0.000383">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:54.249718" elapsed="0.000676">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:54.249699" elapsed="0.000727">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-25T01:21:54.250613" elapsed="0.000024"/>
</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-25T01:21:54.250794" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:54.250862" elapsed="0.000016"/>
</return>
<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>
<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-25T01:21:54.240392" elapsed="0.010594">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:54.240143" elapsed="0.010959">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:54.239994" elapsed="0.011166">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:54.239570" elapsed="0.011680">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:54.251500" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:54.212059" elapsed="0.039563">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:56.281061" elapsed="0.000249"/>
</kw>
<msg time="2026-04-25T01:21:56.281379" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:56.280336" elapsed="0.001109"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:56.279832" elapsed="0.001695"/>
</kw>
<msg time="2026-04-25T01:21:56.281576" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:56.270472" elapsed="0.011149"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:56.269831" elapsed="0.011867"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:56.282199" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:56.281900" elapsed="0.000347"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:56.288823" 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-25T01:21:56.288405" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:56.289328" 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-25T01:21:56.289032" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:56.289403" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:21:56.289573" 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-25T01:21:56.287984" elapsed="0.001614"/>
</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-25T01:21:56.289763" elapsed="0.000173"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:56.290467" level="INFO">${ds_type} = operational</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-25T01:21:56.290120" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:56.290945" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:56.290670" elapsed="0.000320"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:56.291434" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:56.291147" elapsed="0.000313"/>
</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-25T01:21:56.291873" elapsed="0.000026"/>
</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-25T01:21:56.292168" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:56.292005" elapsed="0.000224"/>
</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-25T01:21:56.292400" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:56.292255" elapsed="0.000198"/>
</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-25T01:21:56.292618" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:56.292475" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:56.291982" elapsed="0.000786"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:56.291694" elapsed="0.001105"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:56.291509" elapsed="0.001317"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:56.292865" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:21:56.293086" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:56.293140" 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-25T01:21:56.287094" elapsed="0.006070"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:56.293619" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:56.293702" 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-25T01:21:56.293342" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:56.294557" 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-25T01:21:56.294259" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:56.294023" elapsed="0.000677">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:56.293793" elapsed="0.000940">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-25T01:21:56.294917" elapsed="0.000025"/>
</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-25T01:21:56.295133" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:56.295203" elapsed="0.000038"/>
</return>
<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>
<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-25T01:21:56.283336" elapsed="0.012000">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:56.283051" elapsed="0.012363">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:56.282890" elapsed="0.012589">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:56.282485" elapsed="0.013087">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:56.295827" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:56.252873" elapsed="0.043078">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:21:58.324576" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:21:58.324907" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:58.323850" elapsed="0.001140"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:58.323363" elapsed="0.001712"/>
</kw>
<msg time="2026-04-25T01:21:58.325125" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:21:58.314052" elapsed="0.011119"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:21:58.313567" elapsed="0.011682"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:21:58.325720" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:21:58.325454" elapsed="0.000325"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:21:58.332244" 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-25T01:21:58.331794" elapsed="0.000478"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:58.332866" 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-25T01:21:58.332530" elapsed="0.000370"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:21:58.332954" elapsed="0.000061"/>
</return>
<msg time="2026-04-25T01:21:58.333167" 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-25T01:21:58.331324" elapsed="0.001868"/>
</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-25T01:21:58.333354" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:21:58.334054" level="INFO">${ds_type} = operational</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-25T01:21:58.333682" elapsed="0.000399"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:58.334487" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:58.334244" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:21:58.334922" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:21:58.334665" elapsed="0.000283"/>
</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-25T01:21:58.335421" elapsed="0.000025"/>
</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-25T01:21:58.335689" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:58.335537" elapsed="0.000207"/>
</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-25T01:21:58.335921" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:58.335769" elapsed="0.000224"/>
</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-25T01:21:58.336162" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:21:58.336017" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:21:58.335516" elapsed="0.000720"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:21:58.335247" elapsed="0.001014"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:58.335014" elapsed="0.001274"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:21:58.336327" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:21:58.336529" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:21:58.336588" 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-25T01:21:58.330027" elapsed="0.006591"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:21:58.337162" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:21:58.337241" 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-25T01:21:58.336833" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:21:58.337841" 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-25T01:21:58.337559" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:21:58.337336" elapsed="0.000678">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:21:58.337317" elapsed="0.000731">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-25T01:21:58.338206" elapsed="0.000022"/>
</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-25T01:21:58.338385" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:21:58.338451" elapsed="0.000015"/>
</return>
<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>
<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-25T01:21:58.326864" elapsed="0.011694">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:21:58.326616" elapsed="0.012012">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:21:58.326471" elapsed="0.012212">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:21:58.326051" elapsed="0.012720">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:21:58.339040" elapsed="0.000087"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:21:58.296617" elapsed="0.042612">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:00.367632" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:22:00.367945" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:00.366926" elapsed="0.001099"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:00.366443" elapsed="0.001665"/>
</kw>
<msg time="2026-04-25T01:22:00.368342" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:00.357644" elapsed="0.010744"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:00.357204" elapsed="0.011261"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:00.368927" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:00.368666" elapsed="0.000322"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:00.374376" 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-25T01:22:00.373925" elapsed="0.000479"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:00.374865" 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-25T01:22:00.374569" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:00.374939" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:22:00.375120" 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-25T01:22:00.373544" elapsed="0.001601"/>
</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-25T01:22:00.375304" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:00.375987" level="INFO">${ds_type} = operational</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-25T01:22:00.375631" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:00.376417" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:00.376176" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:00.376827" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:00.376591" elapsed="0.000262"/>
</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-25T01:22:00.377297" elapsed="0.000025"/>
</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-25T01:22:00.377564" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:00.377413" elapsed="0.000208"/>
</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-25T01:22:00.377788" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:00.377646" elapsed="0.000195"/>
</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-25T01:22:00.378029" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:00.377865" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:00.377392" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:00.377116" elapsed="0.001016"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:00.376902" elapsed="0.001256"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:00.378199" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:00.378417" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:00.378463" 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-25T01:22:00.372809" elapsed="0.005676"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:00.379295" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:00.379377" 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-25T01:22:00.378738" elapsed="0.000664"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:00.380000" 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-25T01:22:00.379698" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:00.379474" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:00.379455" elapsed="0.000721">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-25T01:22:00.380334" elapsed="0.000022"/>
</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-25T01:22:00.380512" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:00.380581" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:00.370182" elapsed="0.010507">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:00.369929" elapsed="0.010831">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:00.369781" elapsed="0.011037">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:00.369378" elapsed="0.011536">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:00.381179" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:00.340117" elapsed="0.041182">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:02.409890" elapsed="0.000261"/>
</kw>
<msg time="2026-04-25T01:22:02.410218" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:02.409223" elapsed="0.001058"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:02.408718" elapsed="0.001642"/>
</kw>
<msg time="2026-04-25T01:22:02.410405" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:02.400111" elapsed="0.010339"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:02.399671" elapsed="0.010854"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:02.411001" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:02.410722" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:02.416394" 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-25T01:22:02.416002" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:02.416875" 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-25T01:22:02.416585" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:02.416948" elapsed="0.000065"/>
</return>
<msg time="2026-04-25T01:22:02.417142" 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-25T01:22:02.415610" elapsed="0.001557"/>
</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-25T01:22:02.417406" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:02.418096" level="INFO">${ds_type} = operational</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-25T01:22:02.417732" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:02.418533" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:02.418286" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:02.418957" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:02.418714" elapsed="0.000286"/>
</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-25T01:22:02.419399" elapsed="0.000025"/>
</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-25T01:22:02.419657" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:02.419509" elapsed="0.000204"/>
</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-25T01:22:02.419879" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:02.419737" elapsed="0.000195"/>
</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-25T01:22:02.420115" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:02.419955" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:02.419490" elapsed="0.000699"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:02.419231" elapsed="0.000981"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:02.419048" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:02.420277" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:22:02.420479" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:02.420526" 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-25T01:22:02.414867" elapsed="0.005682"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:02.421057" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:02.421140" 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-25T01:22:02.420724" elapsed="0.000440"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:02.421736" 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-25T01:22:02.421455" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:02.421235" elapsed="0.000637">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:02.421216" elapsed="0.000688">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-25T01:22:02.422081" elapsed="0.000023"/>
</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-25T01:22:02.422258" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:02.422325" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:02.412074" elapsed="0.010358">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:02.411819" elapsed="0.010682">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:02.411677" elapsed="0.010879">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:02.411281" elapsed="0.011365">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:02.422883" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:02.382223" elapsed="0.040800">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:04.450084" elapsed="0.000333"/>
</kw>
<msg time="2026-04-25T01:22:04.450488" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:04.449393" elapsed="0.001160"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:04.448882" elapsed="0.001754"/>
</kw>
<msg time="2026-04-25T01:22:04.450684" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:04.440131" elapsed="0.010598"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:04.439696" elapsed="0.011109"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:04.451322" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:04.451021" elapsed="0.000354"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:04.456556" 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-25T01:22:04.456155" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:04.457054" 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-25T01:22:04.456746" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:04.457128" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:22:04.457284" 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-25T01:22:04.455762" elapsed="0.001546"/>
</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-25T01:22:04.457463" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:04.458124" level="INFO">${ds_type} = operational</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-25T01:22:04.457775" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:04.458549" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:04.458308" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:04.458983" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:04.458724" elapsed="0.000287"/>
</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-25T01:22:04.459439" elapsed="0.000025"/>
</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-25T01:22:04.459697" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:04.459550" elapsed="0.000202"/>
</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-25T01:22:04.459916" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:04.459776" elapsed="0.000212"/>
</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-25T01:22:04.460154" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:04.460012" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:04.459530" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:04.459245" elapsed="0.001005"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:04.459059" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:04.460314" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:22:04.460510" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:04.460555" 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-25T01:22:04.455003" elapsed="0.005575"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:04.461212" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:04.461290" 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-25T01:22:04.460748" elapsed="0.000565"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:04.461917" 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-25T01:22:04.461640" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:04.461421" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:04.461401" elapsed="0.000701">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-25T01:22:04.462254" 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-25T01:22:04.462426" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:04.462492" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:04.452422" elapsed="0.010174">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:04.452189" elapsed="0.010476">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:04.452048" elapsed="0.010671">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:04.451629" elapsed="0.011177">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:04.463053" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:04.423958" elapsed="0.039211">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:06.490426" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:22:06.490735" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:06.489727" elapsed="0.001071"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:06.489257" elapsed="0.001618"/>
</kw>
<msg time="2026-04-25T01:22:06.490921" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:06.480676" elapsed="0.010303"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:06.480204" elapsed="0.010852"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:06.491510" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:06.491252" elapsed="0.000304"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:06.496977" 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-25T01:22:06.496545" elapsed="0.000469"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:06.497499" 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-25T01:22:06.497203" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:06.497572" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:22:06.497730" 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-25T01:22:06.496160" elapsed="0.001595"/>
</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-25T01:22:06.497910" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:06.498576" level="INFO">${ds_type} = operational</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-25T01:22:06.498242" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:06.499014" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:06.498760" elapsed="0.000280"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:06.499507" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:06.499265" elapsed="0.000267"/>
</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-25T01:22:06.500016" elapsed="0.000028"/>
</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-25T01:22:06.500286" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:06.500134" elapsed="0.000207"/>
</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-25T01:22:06.500518" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:06.500366" elapsed="0.000208"/>
</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-25T01:22:06.500738" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:06.500598" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:06.500113" elapsed="0.000697"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:06.499780" elapsed="0.001054"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:06.499579" elapsed="0.001281"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:06.500899" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:22:06.501114" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:06.501160" 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-25T01:22:06.495388" elapsed="0.005795"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:06.501629" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:06.501705" 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-25T01:22:06.501357" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:06.502310" 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-25T01:22:06.502032" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:06.501798" elapsed="0.000653">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:06.501780" elapsed="0.000702">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-25T01:22:06.502636" elapsed="0.000022"/>
</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-25T01:22:06.502808" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:06.502874" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:06.492603" elapsed="0.010392">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:06.492365" elapsed="0.010701">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:06.492220" elapsed="0.010901">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:06.491785" elapsed="0.011428">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:06.503449" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:06.464306" elapsed="0.039260">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:08.534446" elapsed="0.000235"/>
</kw>
<msg time="2026-04-25T01:22:08.534745" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:08.533772" elapsed="0.001034"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:08.533304" elapsed="0.001583"/>
</kw>
<msg time="2026-04-25T01:22:08.535042" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:08.524437" elapsed="0.010654"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:08.523795" elapsed="0.011374"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:08.535628" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:08.535367" elapsed="0.000306"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:08.540820" 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-25T01:22:08.540434" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:08.541323" 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-25T01:22:08.541032" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:08.541398" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:22:08.541560" 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-25T01:22:08.540049" elapsed="0.001535"/>
</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-25T01:22:08.541740" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:08.542406" level="INFO">${ds_type} = operational</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-25T01:22:08.542070" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:08.542831" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:08.542592" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:08.543258" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:08.543020" 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-25T01:22:08.543672" 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-25T01:22:08.543927" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:08.543780" elapsed="0.000217"/>
</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-25T01:22:08.544165" elapsed="0.001497"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:08.544022" elapsed="0.001689"/>
</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-25T01:22:08.545899" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:08.545738" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:08.543761" elapsed="0.002353"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:08.543506" elapsed="0.002636"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:08.543329" elapsed="0.002839"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:08.546209" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:22:08.546416" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:08.546462" 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-25T01:22:08.539325" elapsed="0.007161"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:08.546954" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:08.547061" 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-25T01:22:08.546673" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:08.547676" 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-25T01:22:08.547381" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:08.547158" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:08.547139" elapsed="0.000709">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-25T01:22:08.548023" elapsed="0.000023"/>
</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-25T01:22:08.548315" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:08.548396" elapsed="0.000017"/>
</return>
<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>
<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-25T01:22:08.536718" elapsed="0.011791">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:08.536461" elapsed="0.012132">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:08.536320" elapsed="0.012344">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:08.535903" elapsed="0.012867">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:08.549045" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:08.504431" elapsed="0.044731">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:10.570999" elapsed="0.000253"/>
</kw>
<msg time="2026-04-25T01:22:10.571319" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:10.570281" elapsed="0.001102"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:10.569790" elapsed="0.001675"/>
</kw>
<msg time="2026-04-25T01:22:10.571512" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:10.561050" elapsed="0.010508"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:10.560612" elapsed="0.011031"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:10.572123" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:10.571844" elapsed="0.000325"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:10.577784" 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-25T01:22:10.577367" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:10.578290" 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-25T01:22:10.577993" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:10.578397" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:22:10.578563" 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-25T01:22:10.576978" elapsed="0.001610"/>
</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-25T01:22:10.578755" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:10.579449" level="INFO">${ds_type} = operational</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-25T01:22:10.579099" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:10.579901" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:10.579635" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:10.580338" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:10.580095" elapsed="0.000269"/>
</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-25T01:22:10.580781" elapsed="0.000026"/>
</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-25T01:22:10.581134" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:10.580895" elapsed="0.000297"/>
</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-25T01:22:10.581361" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:10.581219" elapsed="0.000196"/>
</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-25T01:22:10.581579" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:10.581438" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:10.580874" elapsed="0.000778"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:10.580595" elapsed="0.001082"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:10.580411" elapsed="0.001293"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:10.581750" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:22:10.581957" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:10.582020" 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-25T01:22:10.576149" elapsed="0.005895"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:10.582518" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:10.582596" 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-25T01:22:10.582218" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:10.583230" 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-25T01:22:10.582922" elapsed="0.000386">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:10.582689" elapsed="0.000689">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:10.582671" elapsed="0.000739">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-25T01:22:10.583564" elapsed="0.000022"/>
</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-25T01:22:10.583740" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:10.583821" elapsed="0.000017"/>
</return>
<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>
<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-25T01:22:10.573239" elapsed="0.010693">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:10.572959" elapsed="0.011060">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:10.572813" elapsed="0.011264">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:10.572403" elapsed="0.011763">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:10.584404" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:10.549704" elapsed="0.034817">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:12.614656" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:22:12.614993" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:12.613937" elapsed="0.001121"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:12.613457" elapsed="0.001681"/>
</kw>
<msg time="2026-04-25T01:22:12.615185" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:12.604822" elapsed="0.010408"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:12.604375" elapsed="0.010929"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:12.615851" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:12.615504" elapsed="0.000394"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:12.621114" 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-25T01:22:12.620702" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:12.621613" 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-25T01:22:12.621314" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:12.621687" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:22:12.621848" 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-25T01:22:12.620321" elapsed="0.001551"/>
</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-25T01:22:12.622046" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:12.622735" level="INFO">${ds_type} = operational</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-25T01:22:12.622392" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:12.623211" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:12.622930" elapsed="0.000307"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:12.623631" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:12.623389" elapsed="0.000268"/>
</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-25T01:22:12.624112" elapsed="0.000025"/>
</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-25T01:22:12.624380" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:12.624228" 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-25T01:22:12.624607" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:12.624466" elapsed="0.000195"/>
</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-25T01:22:12.624827" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:12.624684" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:12.624208" elapsed="0.000691"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:12.623910" elapsed="0.001013"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:12.623707" elapsed="0.001243"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:12.625007" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:22:12.625218" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:12.625264" 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-25T01:22:12.619579" elapsed="0.005707"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:12.625752" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:12.625831" 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-25T01:22:12.625462" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:12.626752" 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-25T01:22:12.626458" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:12.626222" elapsed="0.000676">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:12.625907" elapsed="0.001022">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-25T01:22:12.627112" elapsed="0.000023"/>
</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-25T01:22:12.627292" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:12.627358" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:12.616938" elapsed="0.010529">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:12.616702" elapsed="0.010899">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:12.616559" elapsed="0.011099">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:12.616152" elapsed="0.011595">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:12.628008" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:12.585276" elapsed="0.042853">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:14.655627" elapsed="0.000238"/>
</kw>
<msg time="2026-04-25T01:22:14.655928" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:14.654926" elapsed="0.001080"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:14.654441" elapsed="0.001648"/>
</kw>
<msg time="2026-04-25T01:22:14.656137" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:14.645791" elapsed="0.010390"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:14.645340" elapsed="0.010917"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:14.656724" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:14.656461" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:14.662230" 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-25T01:22:14.661798" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:14.662718" 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-25T01:22:14.662423" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:14.662792" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:22:14.662954" 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-25T01:22:14.661386" elapsed="0.001608"/>
</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-25T01:22:14.663155" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:14.663820" level="INFO">${ds_type} = operational</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-25T01:22:14.663480" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:14.664270" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:14.664024" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:14.664691" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:14.664448" elapsed="0.000269"/>
</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-25T01:22:14.665136" elapsed="0.000025"/>
</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-25T01:22:14.665394" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:14.665245" elapsed="0.000206"/>
</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-25T01:22:14.665633" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:14.665486" elapsed="0.000202"/>
</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-25T01:22:14.665855" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:14.665712" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:14.665226" elapsed="0.000803"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:14.664948" elapsed="0.001106"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:14.664764" elapsed="0.001316"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:14.666121" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:14.666326" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:14.666372" 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-25T01:22:14.660644" elapsed="0.005752"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:14.666850" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:14.666929" 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-25T01:22:14.666572" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:14.667548" 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-25T01:22:14.667261" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:14.667040" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:14.667021" elapsed="0.000697">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-25T01:22:14.667875" elapsed="0.000022"/>
</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-25T01:22:14.668068" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:14.668137" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:14.657817" elapsed="0.010429">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:14.657579" elapsed="0.010739">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:14.657422" elapsed="0.010952">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:14.657022" elapsed="0.011442">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:14.668706" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:14.629110" elapsed="0.039715">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:16.702729" elapsed="0.000265"/>
</kw>
<msg time="2026-04-25T01:22:16.703062" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:16.702025" elapsed="0.001102"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:16.701532" elapsed="0.001687"/>
</kw>
<msg time="2026-04-25T01:22:16.703267" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:16.692003" elapsed="0.011309"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:16.691226" elapsed="0.012160"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:16.703841" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:16.703585" elapsed="0.000302"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:16.709261" 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-25T01:22:16.708835" elapsed="0.000454"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:16.709842" 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-25T01:22:16.709544" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:16.709918" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:22:16.710099" 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-25T01:22:16.708421" elapsed="0.001702"/>
</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-25T01:22:16.710280" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:16.711021" level="INFO">${ds_type} = operational</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-25T01:22:16.710649" elapsed="0.000399"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:16.711450" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:16.711209" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:16.711865" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:16.711624" elapsed="0.000266"/>
</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-25T01:22:16.712314" 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-25T01:22:16.712575" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:16.712426" elapsed="0.000203"/>
</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-25T01:22:16.712792" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:16.712653" elapsed="0.000192"/>
</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-25T01:22:16.713044" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:16.712868" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:16.712406" elapsed="0.000713"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:16.712142" elapsed="0.001001"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:16.711938" elapsed="0.001231"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:16.713207" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:16.713409" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:16.713454" 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-25T01:22:16.707561" elapsed="0.005916"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:16.714144" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:16.714223" 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-25T01:22:16.713654" elapsed="0.000594"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:16.714883" 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-25T01:22:16.714577" elapsed="0.000403">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:16.714318" elapsed="0.000734">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:16.714299" elapsed="0.000784">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-25T01:22:16.715240" elapsed="0.000022"/>
</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-25T01:22:16.715414" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:16.715479" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:16.704912" elapsed="0.010672">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:16.704679" elapsed="0.010974">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:16.704538" elapsed="0.011170">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:16.704138" elapsed="0.011657">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:16.716048" elapsed="0.000065"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:16.669896" elapsed="0.046313">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:18.745686" elapsed="0.000256"/>
</kw>
<msg time="2026-04-25T01:22:18.746027" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:18.744935" elapsed="0.001159"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:18.744443" elapsed="0.001736"/>
</kw>
<msg time="2026-04-25T01:22:18.746227" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:18.735596" elapsed="0.010677"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:18.735123" elapsed="0.011228"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:18.746821" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:18.746555" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:18.752711" 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-25T01:22:18.752287" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:18.753219" 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-25T01:22:18.752903" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:18.753295" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:22:18.753458" 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-25T01:22:18.751849" elapsed="0.001633"/>
</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-25T01:22:18.753662" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:18.754350" level="INFO">${ds_type} = operational</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-25T01:22:18.754005" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:18.754833" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:18.754554" elapsed="0.000306"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:18.755294" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:18.755031" elapsed="0.000290"/>
</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-25T01:22:18.755762" elapsed="0.000032"/>
</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-25T01:22:18.756091" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:18.755890" elapsed="0.000260"/>
</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-25T01:22:18.756322" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:18.756175" elapsed="0.000204"/>
</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-25T01:22:18.756561" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:18.756411" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:18.755869" elapsed="0.000770"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:18.755573" elapsed="0.001090"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:18.755369" elapsed="0.001320"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:18.756730" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:22:18.756936" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:18.757000" 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-25T01:22:18.751088" elapsed="0.005937"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:18.757572" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:18.757651" 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-25T01:22:18.757287" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:18.758275" 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-25T01:22:18.757987" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:18.757747" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:18.757727" elapsed="0.000726">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-25T01:22:18.758612" elapsed="0.000023"/>
</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-25T01:22:18.758798" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:18.758866" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:18.747981" elapsed="0.011010">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:18.747713" elapsed="0.011353">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:18.747565" elapsed="0.011558">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:18.747149" elapsed="0.012068">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:18.759469" elapsed="0.000034"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:18.717184" elapsed="0.042428">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:20.787212" elapsed="0.000249"/>
</kw>
<msg time="2026-04-25T01:22:20.787529" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:20.786516" elapsed="0.001078"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:20.786046" elapsed="0.001628"/>
</kw>
<msg time="2026-04-25T01:22:20.787720" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:20.777489" elapsed="0.010277"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:20.777059" elapsed="0.010785"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:20.788317" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:20.788056" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:20.793555" 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-25T01:22:20.793162" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:20.794052" 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-25T01:22:20.793745" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:20.794126" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:22:20.794285" 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-25T01:22:20.792765" elapsed="0.001544"/>
</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-25T01:22:20.794547" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:20.795265" level="INFO">${ds_type} = operational</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-25T01:22:20.794874" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:20.795705" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:20.795460" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:20.796138" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:20.795881" elapsed="0.000283"/>
</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-25T01:22:20.796562" 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-25T01:22:20.796949" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:20.796796" elapsed="0.000227"/>
</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-25T01:22:20.797192" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:20.797049" elapsed="0.000196"/>
</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-25T01:22:20.797409" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:20.797268" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:20.796773" elapsed="0.000709"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:20.796394" elapsed="0.001118"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:20.796212" elapsed="0.001327"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:20.797579" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:20.797782" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:20.797828" 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-25T01:22:20.792033" elapsed="0.005818"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:20.798518" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:20.798598" 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-25T01:22:20.798037" elapsed="0.000585"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:20.799211" 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-25T01:22:20.798914" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:20.798694" elapsed="0.000656">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:20.798675" elapsed="0.000706">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-25T01:22:20.799534" elapsed="0.000022"/>
</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-25T01:22:20.799708" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:20.799774" elapsed="0.000014"/>
</return>
<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>
<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-25T01:22:20.789408" elapsed="0.010470">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:20.789173" elapsed="0.010773">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:20.789030" elapsed="0.010986">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:20.788594" elapsed="0.011511">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:20.800339" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:20.760499" elapsed="0.039956">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:22.827303" elapsed="0.000330"/>
</kw>
<msg time="2026-04-25T01:22:22.827700" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:22.826606" elapsed="0.001159"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:22.826107" elapsed="0.001777"/>
</kw>
<msg time="2026-04-25T01:22:22.827933" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:22.817150" elapsed="0.010847"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:22.816585" elapsed="0.011489"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:22.828538" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:22.828280" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:22.834076" 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-25T01:22:22.833663" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:22.834554" 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-25T01:22:22.834266" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:22.834627" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:22:22.834788" 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-25T01:22:22.833287" elapsed="0.001526"/>
</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-25T01:22:22.834982" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:22.835634" level="INFO">${ds_type} = operational</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-25T01:22:22.835303" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:22.836110" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:22.835842" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:22.836523" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:22.836286" elapsed="0.000262"/>
</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-25T01:22:22.836950" elapsed="0.000040"/>
</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-25T01:22:22.837234" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:22.837080" elapsed="0.000208"/>
</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-25T01:22:22.837453" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:22.837313" elapsed="0.000193"/>
</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-25T01:22:22.837669" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:22.837528" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:22.837059" elapsed="0.000682"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:22.836781" elapsed="0.000984"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:22.836595" elapsed="0.001197"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:22.837832" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:22.838051" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:22.838097" 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-25T01:22:22.832543" elapsed="0.005577"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:22.838572" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:22.838649" 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-25T01:22:22.838295" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:22.839318" 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-25T01:22:22.839035" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:22.838793" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:22.838773" elapsed="0.000721">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-25T01:22:22.839647" 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-25T01:22:22.839831" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:22.839899" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:22.829678" elapsed="0.010347">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:22.829440" elapsed="0.010657">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:22.829295" elapsed="0.010858">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:22.828827" elapsed="0.011416">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:22.840482" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:22.801478" elapsed="0.039122">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:24.867715" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:22:24.868040" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:24.867026" elapsed="0.001077"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:24.866469" elapsed="0.001715"/>
</kw>
<msg time="2026-04-25T01:22:24.868231" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:24.857834" elapsed="0.010442"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:24.857283" elapsed="0.011069"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:24.868829" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:24.868569" elapsed="0.000305"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:24.874104" 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-25T01:22:24.873699" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:24.874582" 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-25T01:22:24.874294" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:24.874656" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:22:24.874814" 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-25T01:22:24.873325" elapsed="0.001513"/>
</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-25T01:22:24.875024" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:24.875671" level="INFO">${ds_type} = operational</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-25T01:22:24.875342" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:24.876111" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:24.875853" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:24.876606" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:24.876369" elapsed="0.000262"/>
</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-25T01:22:24.877058" elapsed="0.000025"/>
</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-25T01:22:24.877323" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:24.877170" elapsed="0.000208"/>
</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-25T01:22:24.877542" elapsed="0.001708"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:24.877402" elapsed="0.001889"/>
</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-25T01:22:24.879468" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:24.879317" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:24.877151" elapsed="0.002393"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:24.876858" elapsed="0.002710"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:24.876677" elapsed="0.002917"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:24.879634" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:24.879836" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:24.879882" 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-25T01:22:24.872551" elapsed="0.007356"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:24.880381" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:24.880458" 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-25T01:22:24.880099" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:24.881090" 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-25T01:22:24.880774" elapsed="0.000390">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:24.880553" elapsed="0.000679">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:24.880535" elapsed="0.000728">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-25T01:22:24.881416" elapsed="0.000022"/>
</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-25T01:22:24.881592" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:24.881658" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:24.869937" elapsed="0.011855">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:24.869698" elapsed="0.012172">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:24.869555" elapsed="0.012369">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:24.869155" elapsed="0.012873">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:24.882269" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:24.841518" elapsed="0.040866">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:26.909694" elapsed="0.000256"/>
</kw>
<msg time="2026-04-25T01:22:26.910038" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:26.908997" elapsed="0.001112"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:26.908497" elapsed="0.001694"/>
</kw>
<msg time="2026-04-25T01:22:26.910322" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:26.899736" elapsed="0.010633"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:26.899291" elapsed="0.011155"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:26.910906" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:26.910646" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:26.916466" 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-25T01:22:26.916072" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:26.916960" 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-25T01:22:26.916660" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:26.917053" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:22:26.917214" 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-25T01:22:26.915666" elapsed="0.001573"/>
</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-25T01:22:26.917397" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:26.918067" level="INFO">${ds_type} = operational</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-25T01:22:26.917714" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:26.918496" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:26.918254" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:26.918912" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:26.918671" elapsed="0.000267"/>
</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-25T01:22:26.919354" elapsed="0.000045"/>
</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-25T01:22:26.919633" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:26.919485" elapsed="0.000203"/>
</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-25T01:22:26.919852" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:26.919712" elapsed="0.000193"/>
</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-25T01:22:26.920091" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:26.919928" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:26.919466" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:26.919183" elapsed="0.001006"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:26.918999" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:26.920252" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:26.920452" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:26.920498" 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-25T01:22:26.914889" elapsed="0.005633"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:26.920982" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:26.921063" 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-25T01:22:26.920695" elapsed="0.000392"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:26.921650" 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-25T01:22:26.921374" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:26.921156" elapsed="0.000634">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:26.921138" elapsed="0.000683">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-25T01:22:26.921990" elapsed="0.000022"/>
</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-25T01:22:26.922212" elapsed="0.000037"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:26.922313" elapsed="0.000020"/>
</return>
<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>
<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-25T01:22:26.912039" elapsed="0.010403">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:26.911783" elapsed="0.010745">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:26.911638" elapsed="0.010948">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:26.911205" elapsed="0.011472">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:26.922920" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:26.883244" elapsed="0.039819">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:28.952201" elapsed="0.000255"/>
</kw>
<msg time="2026-04-25T01:22:28.952522" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:28.951517" elapsed="0.001069"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:28.951046" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:22:28.952715" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:28.942357" elapsed="0.010403"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:28.941902" elapsed="0.010934"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:28.953331" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:28.953051" elapsed="0.000325"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:28.958596" 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-25T01:22:28.958194" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:28.959123" 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-25T01:22:28.958787" elapsed="0.000362"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:28.959197" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:22:28.959358" 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-25T01:22:28.957796" elapsed="0.001587"/>
</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-25T01:22:28.959540" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:28.960221" level="INFO">${ds_type} = operational</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-25T01:22:28.959861" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:28.960654" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:28.960409" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:28.961085" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:28.960830" elapsed="0.000280"/>
</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-25T01:22:28.961526" elapsed="0.000025"/>
</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-25T01:22:28.961857" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:28.961637" elapsed="0.000278"/>
</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-25T01:22:28.962101" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:28.961941" elapsed="0.000220"/>
</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-25T01:22:28.962329" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:28.962185" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:28.961617" elapsed="0.000787"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:28.961343" elapsed="0.001085"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:28.961157" elapsed="0.001297"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:28.962495" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:28.962700" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:28.962747" 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-25T01:22:28.957053" elapsed="0.005719"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:28.963292" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:28.963374" 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-25T01:22:28.963000" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:28.964216" 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-25T01:22:28.963911" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:28.963678" elapsed="0.000680">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:28.963450" elapsed="0.000941">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-25T01:22:28.964548" elapsed="0.000022"/>
</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-25T01:22:28.964726" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:28.964792" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:28.954406" elapsed="0.010494">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:28.954170" elapsed="0.010814">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:28.954028" elapsed="0.011015">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:28.953612" elapsed="0.011525">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:28.965382" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:28.924167" elapsed="0.041333">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:30.999516" elapsed="0.000261"/>
</kw>
<msg time="2026-04-25T01:22:30.999848" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:30.998654" elapsed="0.001263"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:30.997858" elapsed="0.002161"/>
</kw>
<msg time="2026-04-25T01:22:31.000070" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:30.986318" elapsed="0.013801"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:30.985712" elapsed="0.014488"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:31.000826" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:31.000434" elapsed="0.000441"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:31.006596" 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-25T01:22:31.006160" elapsed="0.000466"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:31.007109" 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-25T01:22:31.006794" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:31.007186" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:22:31.007382" 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-25T01:22:31.005753" elapsed="0.001660"/>
</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-25T01:22:31.007578" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:31.008311" level="INFO">${ds_type} = operational</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-25T01:22:31.007937" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:31.008750" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:31.008503" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:31.009193" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:31.008928" elapsed="0.000294"/>
</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-25T01:22:31.009672" elapsed="0.000026"/>
</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-25T01:22:31.009944" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:31.009790" elapsed="0.000228"/>
</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-25T01:22:31.010191" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:31.010045" elapsed="0.000202"/>
</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-25T01:22:31.010419" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:31.010271" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:31.009768" elapsed="0.000728"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:31.009483" elapsed="0.001038"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:31.009278" elapsed="0.001270"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:31.010591" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:22:31.010803" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:31.010851" 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-25T01:22:31.005009" elapsed="0.005866"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:31.011392" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:31.011474" 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-25T01:22:31.011072" elapsed="0.000426"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:31.012109" 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-25T01:22:31.011797" elapsed="0.000391">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:31.011572" elapsed="0.000689">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:31.011552" elapsed="0.000741">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-25T01:22:31.012452" elapsed="0.000022"/>
</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-25T01:22:31.012652" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:31.012720" elapsed="0.000018"/>
</return>
<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>
<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-25T01:22:31.001989" elapsed="0.010844">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:31.001725" elapsed="0.011280">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:31.001573" elapsed="0.011494">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:31.001150" elapsed="0.012011">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:31.013428" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:30.966356" elapsed="0.047195">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:33.042619" elapsed="0.000296"/>
</kw>
<msg time="2026-04-25T01:22:33.043010" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:33.041777" elapsed="0.001308"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:33.041190" elapsed="0.001994"/>
</kw>
<msg time="2026-04-25T01:22:33.043244" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:33.029730" elapsed="0.013569"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:33.029198" elapsed="0.014195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:33.043981" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:33.043646" elapsed="0.000393"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:33.050664" 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-25T01:22:33.050187" elapsed="0.000510"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:33.051304" 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-25T01:22:33.050906" elapsed="0.000430"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:33.051395" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:22:33.051590" 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-25T01:22:33.049697" elapsed="0.001924"/>
</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-25T01:22:33.051822" elapsed="0.000209"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:33.052673" level="INFO">${ds_type} = operational</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-25T01:22:33.052238" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:33.053231" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:33.052910" elapsed="0.000353"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:33.053753" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:33.053458" elapsed="0.000326"/>
</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-25T01:22:33.054295" elapsed="0.000029"/>
</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-25T01:22:33.054620" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:33.054428" elapsed="0.000262"/>
</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-25T01:22:33.054904" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:33.054721" elapsed="0.000266"/>
</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-25T01:22:33.055201" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:33.055017" elapsed="0.000324"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:33.054405" elapsed="0.000967"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:33.054083" elapsed="0.001320"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:33.053840" elapsed="0.001595"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:33.055486" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:22:33.055736" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:33.055791" 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-25T01:22:33.048777" elapsed="0.007043"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:33.056691" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:33.056790" 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-25T01:22:33.056065" elapsed="0.000754"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:33.057558" 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-25T01:22:33.057208" elapsed="0.000440">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:33.056908" elapsed="0.000824">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:33.056885" elapsed="0.000888">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-25T01:22:33.057994" elapsed="0.000029"/>
</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-25T01:22:33.058223" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:33.058305" elapsed="0.000020"/>
</return>
<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>
<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-25T01:22:33.045350" elapsed="0.013090">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:33.045058" elapsed="0.013471">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:33.044868" elapsed="0.013733">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:33.044332" elapsed="0.014383">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:33.059033" elapsed="0.000032"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:33.014256" elapsed="0.044926">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:35.088105" elapsed="0.000292"/>
</kw>
<msg time="2026-04-25T01:22:35.088487" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:35.087270" elapsed="0.001294"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:35.086674" elapsed="0.001988"/>
</kw>
<msg time="2026-04-25T01:22:35.088719" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:35.075218" elapsed="0.013553"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:35.074660" elapsed="0.014200"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:35.089440" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:35.089123" elapsed="0.000374"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:35.101201" 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-25T01:22:35.100317" elapsed="0.000946"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:35.102428" 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-25T01:22:35.101730" elapsed="0.000756"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:35.102590" elapsed="0.000065"/>
</return>
<msg time="2026-04-25T01:22:35.102935" 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-25T01:22:35.099457" elapsed="0.003562"/>
</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-25T01:22:35.103371" elapsed="0.000342"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:35.104849" level="INFO">${ds_type} = operational</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-25T01:22:35.104103" elapsed="0.000805"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:35.105836" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:35.105299" elapsed="0.000641"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:35.106589" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:35.106312" elapsed="0.000303"/>
</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-25T01:22:35.107030" elapsed="0.000025"/>
</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-25T01:22:35.107286" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:35.107139" elapsed="0.000202"/>
</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-25T01:22:35.107506" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:35.107365" elapsed="0.000194"/>
</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-25T01:22:35.107724" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:35.107581" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:35.107120" elapsed="0.000678"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:35.106846" elapsed="0.000975"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:35.106661" elapsed="0.001184"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:35.107884" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:22:35.108097" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:35.108142" 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-25T01:22:35.097782" elapsed="0.010384"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:35.108617" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:35.108694" 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-25T01:22:35.108340" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:35.109294" 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-25T01:22:35.109020" elapsed="0.000347">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:35.108786" elapsed="0.000647">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:35.108768" elapsed="0.000696">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-25T01:22:35.109618" elapsed="0.000022"/>
</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-25T01:22:35.109793" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:35.109858" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:35.091521" elapsed="0.018470">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:35.091015" elapsed="0.019047">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:35.090676" elapsed="0.019441">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:35.089796" elapsed="0.020408">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:35.110442" elapsed="0.000058"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:35.059820" elapsed="0.050776">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:37.139473" elapsed="0.000257"/>
</kw>
<msg time="2026-04-25T01:22:37.139846" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:37.138732" elapsed="0.001193"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:37.138187" elapsed="0.001842"/>
</kw>
<msg time="2026-04-25T01:22:37.140078" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:37.129507" elapsed="0.010617"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:37.129064" elapsed="0.011137"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:37.140678" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:37.140416" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:37.146063" 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-25T01:22:37.145651" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:37.146551" 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-25T01:22:37.146254" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:37.146625" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:22:37.146785" 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-25T01:22:37.145272" elapsed="0.001536"/>
</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-25T01:22:37.146976" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:37.147632" level="INFO">${ds_type} = operational</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-25T01:22:37.147300" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:37.148089" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:37.147831" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:37.148516" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:37.148262" elapsed="0.000279"/>
</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-25T01:22:37.148949" elapsed="0.000041"/>
</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-25T01:22:37.149236" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:37.149082" elapsed="0.000209"/>
</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-25T01:22:37.149460" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:37.149317" elapsed="0.000199"/>
</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-25T01:22:37.149679" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:37.149539" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:37.149061" elapsed="0.000691"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:37.148770" elapsed="0.001006"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:37.148588" elapsed="0.001214"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:37.149841" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:22:37.150057" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:37.150103" 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-25T01:22:37.144494" elapsed="0.005632"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:37.150846" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:37.150925" 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-25T01:22:37.150374" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:37.151545" 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-25T01:22:37.151259" elapsed="0.000364">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:37.151037" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:37.151017" elapsed="0.000709">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-25T01:22:37.152002" elapsed="0.000029"/>
</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-25T01:22:37.152196" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:37.152263" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:37.141778" elapsed="0.010594">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:37.141536" elapsed="0.010905">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:37.141390" elapsed="0.011105">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:37.140985" elapsed="0.011597">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:37.152843" elapsed="0.000029"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:37.111577" elapsed="0.041416">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:39.182803" elapsed="0.000267"/>
</kw>
<msg time="2026-04-25T01:22:39.183134" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:39.182154" elapsed="0.001040"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:39.181671" elapsed="0.001603"/>
</kw>
<msg time="2026-04-25T01:22:39.183319" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:39.173113" elapsed="0.010249"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:39.172663" elapsed="0.010773"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:39.183887" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:39.183630" elapsed="0.000302"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:39.189280" 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-25T01:22:39.188875" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:39.189759" 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-25T01:22:39.189470" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:39.189831" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:22:39.190004" 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-25T01:22:39.188492" elapsed="0.001538"/>
</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-25T01:22:39.190364" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:39.191043" level="INFO">${ds_type} = operational</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-25T01:22:39.190691" elapsed="0.000379"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:39.191498" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:39.191254" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:39.191921" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:39.191680" elapsed="0.000267"/>
</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-25T01:22:39.192392" elapsed="0.000025"/>
</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-25T01:22:39.192649" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:39.192501" elapsed="0.000204"/>
</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-25T01:22:39.192871" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:39.192730" elapsed="0.000194"/>
</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-25T01:22:39.193108" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:39.192948" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:39.192482" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:39.192197" elapsed="0.001008"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:39.192013" elapsed="0.001217"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:39.193270" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:39.193470" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:39.193517" 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-25T01:22:39.187742" elapsed="0.005800"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:39.194001" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:39.194081" 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-25T01:22:39.193715" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:39.194670" 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-25T01:22:39.194393" elapsed="0.000347">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:39.194175" elapsed="0.000630">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:39.194157" elapsed="0.000680">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-25T01:22:39.195007" elapsed="0.000022"/>
</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-25T01:22:39.195184" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:39.195250" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:39.184975" elapsed="0.010381">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:39.184729" elapsed="0.010698">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:39.184590" elapsed="0.010894">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:39.184178" elapsed="0.011400">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:39.195817" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:39.153791" elapsed="0.042142">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:41.225759" elapsed="0.000460"/>
</kw>
<msg time="2026-04-25T01:22:41.226302" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:41.224824" elapsed="0.001557"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:41.224022" elapsed="0.002460"/>
</kw>
<msg time="2026-04-25T01:22:41.226540" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:41.212215" elapsed="0.014380"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:41.211607" elapsed="0.015093"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:41.227317" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:41.226999" elapsed="0.000373"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:41.234216" 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-25T01:22:41.233693" elapsed="0.000559"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:41.234823" 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-25T01:22:41.234461" elapsed="0.000393"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:41.234915" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:22:41.235132" 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-25T01:22:41.233215" elapsed="0.001948"/>
</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-25T01:22:41.235364" elapsed="0.000200"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:41.236230" level="INFO">${ds_type} = operational</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-25T01:22:41.235772" elapsed="0.000490"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:41.236780" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:41.236481" elapsed="0.000331"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:41.237312" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:41.237021" elapsed="0.000322"/>
</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-25T01:22:41.237860" elapsed="0.000030"/>
</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-25T01:22:41.238352" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:41.238162" elapsed="0.000257"/>
</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-25T01:22:41.238631" elapsed="0.001978"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:41.238450" elapsed="0.002220"/>
</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-25T01:22:41.240911" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:41.240705" elapsed="0.000290"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:41.238136" elapsed="0.002889"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:41.237638" elapsed="0.003419"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:41.237401" elapsed="0.003690"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:41.241143" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:22:41.241418" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:41.241474" 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-25T01:22:41.232268" elapsed="0.009234"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:41.242292" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:41.242388" 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-25T01:22:41.241725" elapsed="0.000693"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:41.243250" 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-25T01:22:41.242873" elapsed="0.000465">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:41.242580" elapsed="0.000842">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:41.242555" elapsed="0.000906">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-25T01:22:41.243659" elapsed="0.000027"/>
</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-25T01:22:41.243880" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:41.243977" elapsed="0.000021"/>
</return>
<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>
<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-25T01:22:41.228737" elapsed="0.015377">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:41.228431" elapsed="0.015770">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:41.228216" elapsed="0.016054">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:41.227691" elapsed="0.016712">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:41.244723" elapsed="0.000031"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:41.196629" elapsed="0.048241">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:43.269628" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:22:43.269945" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:43.268945" elapsed="0.001080"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:43.268452" elapsed="0.001657"/>
</kw>
<msg time="2026-04-25T01:22:43.270157" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:43.259043" elapsed="0.011160"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:43.258439" elapsed="0.011843"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:43.270781" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:43.270501" elapsed="0.000328"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:43.276320" 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-25T01:22:43.275910" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:43.276804" 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-25T01:22:43.276515" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:43.276894" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:22:43.277075" 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-25T01:22:43.275527" elapsed="0.001574"/>
</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-25T01:22:43.277260" elapsed="0.000156"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:43.277917" level="INFO">${ds_type} = operational</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-25T01:22:43.277579" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:43.278364" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:43.278121" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:43.278853" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:43.278610" elapsed="0.000270"/>
</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-25T01:22:43.279307" elapsed="0.000025"/>
</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-25T01:22:43.279568" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:43.279418" elapsed="0.000207"/>
</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-25T01:22:43.279793" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:43.279649" elapsed="0.000199"/>
</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-25T01:22:43.280032" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:43.279872" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:43.279398" elapsed="0.000711"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:43.279134" elapsed="0.000999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:43.278929" elapsed="0.001230"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:43.280200" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:22:43.280406" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:43.280453" 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-25T01:22:43.274785" elapsed="0.005692"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:43.280983" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:43.281064" 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-25T01:22:43.280654" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:43.281664" 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-25T01:22:43.281383" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:43.281161" elapsed="0.000641">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:43.281142" elapsed="0.000693">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-25T01:22:43.282005" elapsed="0.000023"/>
</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-25T01:22:43.282187" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:43.282255" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:43.271883" elapsed="0.010481">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:43.271632" elapsed="0.010803">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:43.271487" elapsed="0.011005">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:43.271087" elapsed="0.011495">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:43.282823" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:43.245461" elapsed="0.037479">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:45.314500" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:22:45.314812" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:45.313803" elapsed="0.001075"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:45.313279" elapsed="0.001680"/>
</kw>
<msg time="2026-04-25T01:22:45.315111" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:45.304482" elapsed="0.010678"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:45.303995" elapsed="0.011245"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:45.315711" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:45.315444" elapsed="0.000315"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:45.321009" 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-25T01:22:45.320590" elapsed="0.000449"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:45.321505" 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-25T01:22:45.321208" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:45.321580" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:22:45.321773" 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-25T01:22:45.320207" elapsed="0.001591"/>
</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-25T01:22:45.321959" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:45.322669" level="INFO">${ds_type} = operational</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-25T01:22:45.322322" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:45.323118" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:45.322858" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:45.323533" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:45.323295" 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-25T01:22:45.323985" elapsed="0.000025"/>
</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-25T01:22:45.324248" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:45.324098" elapsed="0.000206"/>
</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-25T01:22:45.324470" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:45.324329" elapsed="0.000194"/>
</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-25T01:22:45.324689" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:45.324547" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:45.324078" elapsed="0.000683"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:45.323795" elapsed="0.000990"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:45.323606" elapsed="0.001205"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:45.324850" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:45.325082" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:45.325129" 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-25T01:22:45.319471" elapsed="0.005681"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:45.325608" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:45.325705" 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-25T01:22:45.325328" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:45.326543" 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-25T01:22:45.326253" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:45.326021" elapsed="0.000666">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:45.325781" elapsed="0.000938">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-25T01:22:45.326876" elapsed="0.000022"/>
</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-25T01:22:45.327129" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:45.327198" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:45.316808" elapsed="0.010498">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:45.316570" elapsed="0.010804">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:45.316427" elapsed="0.011003">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:45.316021" elapsed="0.011496">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:45.327758" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:45.283853" elapsed="0.044024">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:47.358294" elapsed="0.000252"/>
</kw>
<msg time="2026-04-25T01:22:47.358615" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:47.357598" elapsed="0.001082"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:47.357062" elapsed="0.001776"/>
</kw>
<msg time="2026-04-25T01:22:47.358889" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:47.348196" elapsed="0.010742"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:47.347513" elapsed="0.011552"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:47.359539" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:47.359276" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:47.365136" 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-25T01:22:47.364694" elapsed="0.000471"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:47.365623" 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-25T01:22:47.365331" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:47.365698" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:22:47.365859" 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-25T01:22:47.364312" elapsed="0.001573"/>
</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-25T01:22:47.366066" elapsed="0.000164"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:47.366756" level="INFO">${ds_type} = operational</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-25T01:22:47.366393" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:47.367203" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:47.366945" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:47.367617" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:47.367379" elapsed="0.000264"/>
</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-25T01:22:47.368059" elapsed="0.000025"/>
</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-25T01:22:47.368390" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:47.368169" elapsed="0.000278"/>
</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-25T01:22:47.368617" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:47.368472" elapsed="0.000199"/>
</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-25T01:22:47.368838" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:47.368695" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:47.368150" elapsed="0.000763"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:47.367871" elapsed="0.001065"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:47.367688" elapsed="0.001288"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:47.369018" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:47.369216" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:47.369261" 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-25T01:22:47.363572" elapsed="0.005713"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:47.369736" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:47.369822" 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-25T01:22:47.369458" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:47.370644" 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-25T01:22:47.370262" elapsed="0.000494">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:47.369933" elapsed="0.000917">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:47.369904" elapsed="0.000990">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-25T01:22:47.371145" elapsed="0.000033"/>
</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-25T01:22:47.371487" elapsed="0.000037"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:47.371598" elapsed="0.000022"/>
</return>
<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>
<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-25T01:22:47.360672" elapsed="0.011082">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:47.360425" elapsed="0.011430">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:47.360278" elapsed="0.011661">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:47.359833" elapsed="0.012261">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:47.372488" elapsed="0.000037"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:47.328736" elapsed="0.043926">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:49.403947" elapsed="0.000270"/>
</kw>
<msg time="2026-04-25T01:22:49.404282" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:49.403280" elapsed="0.001064"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:49.402781" elapsed="0.001645"/>
</kw>
<msg time="2026-04-25T01:22:49.404474" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:49.394016" elapsed="0.010503"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:49.393552" elapsed="0.011043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:49.405157" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:49.404793" elapsed="0.000412"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:49.410492" 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-25T01:22:49.410088" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:49.410992" 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-25T01:22:49.410685" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:49.411068" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:22:49.411229" 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-25T01:22:49.409691" elapsed="0.001562"/>
</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-25T01:22:49.411411" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:49.412136" level="INFO">${ds_type} = operational</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-25T01:22:49.411734" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:49.412571" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:49.412326" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:49.413010" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:49.412748" elapsed="0.000292"/>
</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-25T01:22:49.413447" elapsed="0.000025"/>
</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-25T01:22:49.413710" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:49.413559" elapsed="0.000206"/>
</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-25T01:22:49.413933" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:49.413791" elapsed="0.000210"/>
</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-25T01:22:49.414169" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:49.414025" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:49.413539" elapsed="0.000704"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:49.413275" elapsed="0.000992"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:49.413087" elapsed="0.001207"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:49.414334" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:22:49.414536" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:49.414582" 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-25T01:22:49.408954" elapsed="0.005652"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:49.415277" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:49.415358" 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-25T01:22:49.414780" elapsed="0.000603"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:49.415981" 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-25T01:22:49.415680" elapsed="0.000390">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:49.415456" elapsed="0.000684">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:49.415437" elapsed="0.000735">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-25T01:22:49.416329" elapsed="0.000022"/>
</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-25T01:22:49.416505" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:49.416571" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:49.406279" elapsed="0.010396">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:49.406039" elapsed="0.010757">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:49.405872" elapsed="0.010981">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:49.405463" elapsed="0.011480">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:49.417203" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:49.373594" elapsed="0.043725">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:51.445932" elapsed="0.000256"/>
</kw>
<msg time="2026-04-25T01:22:51.446253" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:51.445231" elapsed="0.001086"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:51.444742" elapsed="0.001815"/>
</kw>
<msg time="2026-04-25T01:22:51.446605" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:51.436120" elapsed="0.010529"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:51.435593" elapsed="0.011132"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:51.447210" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:51.446931" elapsed="0.000326"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:51.452816" 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-25T01:22:51.452277" elapsed="0.000566"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:51.453317" 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-25T01:22:51.453023" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:51.453391" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:22:51.453575" 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-25T01:22:51.451876" elapsed="0.001730"/>
</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-25T01:22:51.453765" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:51.454445" level="INFO">${ds_type} = operational</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-25T01:22:51.454105" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:51.454871" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:51.454631" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:51.455301" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:51.455061" elapsed="0.000265"/>
</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-25T01:22:51.455727" elapsed="0.000025"/>
</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-25T01:22:51.456004" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:51.455838" elapsed="0.000224"/>
</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-25T01:22:51.456229" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:51.456087" elapsed="0.000195"/>
</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-25T01:22:51.456447" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:51.456305" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:51.455819" elapsed="0.000778"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:51.455557" elapsed="0.001066"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:51.455373" elapsed="0.001276"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:51.456689" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:22:51.456891" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:51.456936" 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-25T01:22:51.451152" elapsed="0.005807"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:51.457428" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:51.457506" 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-25T01:22:51.457151" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:51.458174" 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-25T01:22:51.457871" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:51.457651" elapsed="0.000664">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:51.457632" elapsed="0.000715">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-25T01:22:51.458500" elapsed="0.000022"/>
</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-25T01:22:51.458674" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:51.458740" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:51.448299" elapsed="0.010547">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:51.448060" elapsed="0.010855">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:51.447900" elapsed="0.011086">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:51.447499" elapsed="0.011578">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:51.459318" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:51.418244" elapsed="0.041192">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:53.487585" elapsed="0.000236"/>
</kw>
<msg time="2026-04-25T01:22:53.487885" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:53.486886" elapsed="0.001058"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:53.486413" elapsed="0.001627"/>
</kw>
<msg time="2026-04-25T01:22:53.488087" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:53.477841" elapsed="0.010290"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:53.477425" elapsed="0.010784"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:53.488664" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:53.488407" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:53.493845" 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-25T01:22:53.493460" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:53.494418" 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-25T01:22:53.494124" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:53.494493" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:22:53.494651" 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-25T01:22:53.493080" elapsed="0.001595"/>
</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-25T01:22:53.494830" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:53.495508" level="INFO">${ds_type} = operational</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-25T01:22:53.495159" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:53.495931" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:53.495693" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:53.496360" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:53.496122" elapsed="0.000264"/>
</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-25T01:22:53.496777" elapsed="0.000025"/>
</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-25T01:22:53.497049" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:53.496887" elapsed="0.000218"/>
</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-25T01:22:53.497277" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:53.497130" elapsed="0.000200"/>
</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-25T01:22:53.497494" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:53.497353" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:53.496867" elapsed="0.000699"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:53.496611" elapsed="0.000978"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:53.496431" elapsed="0.001183"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:53.497652" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:53.497850" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:53.497895" 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-25T01:22:53.492340" elapsed="0.005578"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:53.498569" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:53.498649" 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-25T01:22:53.498110" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:53.499292" 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-25T01:22:53.498980" elapsed="0.000385">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:53.498745" elapsed="0.000685">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:53.498726" elapsed="0.000736">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-25T01:22:53.499652" elapsed="0.000031"/>
</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-25T01:22:53.499864" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:53.499948" elapsed="0.000033"/>
</return>
<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>
<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-25T01:22:53.489729" elapsed="0.010349">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:53.489494" elapsed="0.010655">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:53.489353" elapsed="0.010851">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:53.488941" elapsed="0.011388">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:53.500576" elapsed="0.000063"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:53.460326" elapsed="0.040410">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:55.526645" elapsed="0.000234"/>
</kw>
<msg time="2026-04-25T01:22:55.526943" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:55.525943" elapsed="0.001079"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:55.525426" elapsed="0.001679"/>
</kw>
<msg time="2026-04-25T01:22:55.527153" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:55.516790" elapsed="0.010408"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:55.516228" elapsed="0.011045"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:55.527741" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:55.527480" elapsed="0.000307"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:55.533424" 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-25T01:22:55.532981" elapsed="0.000472"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:55.533928" 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-25T01:22:55.533621" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:55.534020" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:22:55.534183" 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-25T01:22:55.532581" elapsed="0.001627"/>
</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-25T01:22:55.534366" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:55.535046" level="INFO">${ds_type} = operational</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-25T01:22:55.534690" elapsed="0.000383"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:55.535479" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:55.535235" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:55.535896" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:55.535654" elapsed="0.000267"/>
</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-25T01:22:55.536355" 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-25T01:22:55.536643" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:55.536487" elapsed="0.000216"/>
</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-25T01:22:55.536871" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:55.536727" elapsed="0.000198"/>
</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-25T01:22:55.537110" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:55.536948" elapsed="0.000236"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:55.536462" elapsed="0.000744"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:55.536179" elapsed="0.001050"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:55.535986" elapsed="0.001268"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:55.537293" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:22:55.537498" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:55.537544" 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-25T01:22:55.531833" elapsed="0.005735"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:55.538153" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:55.538232" 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-25T01:22:55.537840" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:55.538832" 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-25T01:22:55.538550" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:55.538328" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:55.538310" elapsed="0.000709">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-25T01:22:55.539176" elapsed="0.000022"/>
</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-25T01:22:55.539354" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:55.539420" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:55.528819" elapsed="0.010707">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:55.528586" elapsed="0.011009">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:55.528445" elapsed="0.011205">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:55.528045" elapsed="0.011693">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:55.539996" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:55.501508" elapsed="0.038607">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:57.570492" elapsed="0.000238"/>
</kw>
<msg time="2026-04-25T01:22:57.570795" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:57.569808" elapsed="0.001048"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:57.569330" elapsed="0.001607"/>
</kw>
<msg time="2026-04-25T01:22:57.571000" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:57.559747" elapsed="0.011299"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:57.559128" elapsed="0.011995"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:57.571614" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:57.571350" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:57.576847" 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-25T01:22:57.576456" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:57.577370" 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-25T01:22:57.577053" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:57.577445" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:22:57.577603" 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-25T01:22:57.576078" elapsed="0.001550"/>
</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-25T01:22:57.577856" elapsed="0.000195"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:57.578560" level="INFO">${ds_type} = operational</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-25T01:22:57.578219" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:57.579035" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:57.578767" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:57.579467" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:57.579229" 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-25T01:22:57.579891" 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-25T01:22:57.580169" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:57.580018" elapsed="0.000207"/>
</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-25T01:22:57.580414" elapsed="0.001431"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:57.580251" elapsed="0.001636"/>
</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-25T01:22:57.582083" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:57.581913" elapsed="0.000225"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:57.579997" elapsed="0.002165"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:57.579721" elapsed="0.002465"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:57.579539" elapsed="0.002673"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:57.582252" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:57.582458" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:57.582506" 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-25T01:22:57.575340" elapsed="0.007191"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:57.583003" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:57.583084" 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-25T01:22:57.582708" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:57.583727" 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-25T01:22:57.583443" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:57.583218" elapsed="0.000647">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:57.583197" elapsed="0.000700">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-25T01:22:57.584069" elapsed="0.000023"/>
</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-25T01:22:57.584247" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:57.584315" elapsed="0.000015"/>
</return>
<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>
<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-25T01:22:57.572687" elapsed="0.011734">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:57.572453" elapsed="0.012038">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:57.572310" elapsed="0.012237">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:57.571896" elapsed="0.012741">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:57.584874" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:57.541062" elapsed="0.043942">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:22:59.613686" elapsed="0.000406"/>
</kw>
<msg time="2026-04-25T01:22:59.614168" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:59.612812" elapsed="0.001429"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:59.612234" elapsed="0.002105"/>
</kw>
<msg time="2026-04-25T01:22:59.614396" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:22:59.600743" elapsed="0.013708"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:22:59.600225" elapsed="0.014320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:22:59.615133" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:22:59.614792" elapsed="0.000398"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:22:59.621936" 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-25T01:22:59.621543" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:59.622436" 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-25T01:22:59.622145" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:22:59.622510" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:22:59.622669" 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-25T01:22:59.621082" elapsed="0.001612"/>
</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-25T01:22:59.622852" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:22:59.623520" level="INFO">${ds_type} = operational</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-25T01:22:59.623185" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:59.623945" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:59.623705" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:22:59.624380" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:22:59.624142" elapsed="0.000264"/>
</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-25T01:22:59.624802" 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-25T01:22:59.625075" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:59.624910" elapsed="0.000221"/>
</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-25T01:22:59.625319" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:59.625156" elapsed="0.000221"/>
</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-25T01:22:59.625555" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:22:59.625411" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:22:59.624891" elapsed="0.000739"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:22:59.624632" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:59.624451" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:22:59.625718" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:22:59.625919" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:22:59.625981" 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-25T01:22:59.620153" elapsed="0.005853"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:22:59.626455" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:22:59.626532" 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-25T01:22:59.626182" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:22:59.627181" 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-25T01:22:59.626884" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:22:59.626664" elapsed="0.000657">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:22:59.626645" elapsed="0.000708">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-25T01:22:59.627512" 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-25T01:22:59.627685" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:22:59.627750" elapsed="0.000016"/>
</return>
<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>
<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-25T01:22:59.616453" elapsed="0.011403">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:22:59.616156" elapsed="0.011770">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:22:59.615984" elapsed="0.012019">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:22:59.615484" elapsed="0.012611">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:22:59.628334" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:22:59.585650" elapsed="0.042800">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:01.654283" elapsed="0.000250"/>
</kw>
<msg time="2026-04-25T01:23:01.654602" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:01.653445" elapsed="0.001222"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:01.652695" elapsed="0.002054"/>
</kw>
<msg time="2026-04-25T01:23:01.654798" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:01.643334" elapsed="0.011511"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:01.642839" elapsed="0.012085"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:01.655485" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:01.655192" elapsed="0.000342"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:01.660944" 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-25T01:23:01.660531" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:01.661457" 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-25T01:23:01.661158" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:01.661532" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:23:01.661698" 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-25T01:23:01.660140" elapsed="0.001583"/>
</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-25T01:23:01.661883" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:01.662570" level="INFO">${ds_type} = operational</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-25T01:23:01.662229" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:01.663016" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:01.662757" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:01.663559" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:01.663286" elapsed="0.000306"/>
</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-25T01:23:01.664036" elapsed="0.000026"/>
</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-25T01:23:01.664310" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:01.664155" elapsed="0.000212"/>
</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-25T01:23:01.664543" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:01.664394" elapsed="0.000203"/>
</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-25T01:23:01.664767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:01.664621" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:01.664133" elapsed="0.000710"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:01.663841" elapsed="0.001026"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:01.663645" elapsed="0.001249"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:01.664937" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:23:01.665159" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:01.665205" 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-25T01:23:01.659327" elapsed="0.005902"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:01.665701" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:01.665783" 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-25T01:23:01.665411" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:01.666672" 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-25T01:23:01.666374" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:01.666134" elapsed="0.000685">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:01.665859" elapsed="0.000993">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-25T01:23:01.667025" elapsed="0.000024"/>
</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-25T01:23:01.667207" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:01.667275" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:01.656636" elapsed="0.010748">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:01.656388" elapsed="0.011067">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:01.656243" elapsed="0.011268">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:01.655815" elapsed="0.011807">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:01.667876" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:01.629152" elapsed="0.038862">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:03.698060" elapsed="0.000259"/>
</kw>
<msg time="2026-04-25T01:23:03.698387" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:03.697212" elapsed="0.001243"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:03.696647" elapsed="0.001890"/>
</kw>
<msg time="2026-04-25T01:23:03.698693" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:03.687869" elapsed="0.010880"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:03.687331" elapsed="0.011504"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:03.699348" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:03.699074" elapsed="0.000321"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:03.705097" 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-25T01:23:03.704658" elapsed="0.000468"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:03.705588" 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-25T01:23:03.705293" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:03.705661" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:23:03.705826" 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-25T01:23:03.704255" elapsed="0.001596"/>
</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-25T01:23:03.706047" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:03.706724" level="INFO">${ds_type} = operational</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-25T01:23:03.706380" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:03.707191" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:03.706925" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:03.707615" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:03.707370" elapsed="0.000271"/>
</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-25T01:23:03.708071" elapsed="0.000025"/>
</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-25T01:23:03.708379" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:03.708185" elapsed="0.000265"/>
</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-25T01:23:03.708660" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:03.708480" elapsed="0.000238"/>
</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-25T01:23:03.708886" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:03.708741" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:03.708162" elapsed="0.000798"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:03.707880" elapsed="0.001120"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:03.707689" elapsed="0.001337"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:03.709069" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:23:03.709325" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:03.709375" 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-25T01:23:03.703500" elapsed="0.005900"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:03.709877" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:03.710013" 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-25T01:23:03.709582" elapsed="0.000459"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:03.710642" 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-25T01:23:03.710343" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:03.710116" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:03.710096" elapsed="0.000726">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-25T01:23:03.710999" elapsed="0.000024"/>
</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-25T01:23:03.711280" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:03.711350" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:03.700552" elapsed="0.010909">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:03.700308" elapsed="0.011226">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:03.700158" elapsed="0.011435">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:03.699648" elapsed="0.012039">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:03.711936" elapsed="0.000040"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:03.668850" elapsed="0.043226">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:05.744772" elapsed="0.000278"/>
</kw>
<msg time="2026-04-25T01:23:05.745123" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:05.743924" elapsed="0.001266"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:05.743423" elapsed="0.001858"/>
</kw>
<msg time="2026-04-25T01:23:05.745332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:05.734254" elapsed="0.011125"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:05.733721" elapsed="0.011737"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:05.745931" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:05.745668" elapsed="0.000326"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:05.752218" 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-25T01:23:05.751803" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:05.752738" 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-25T01:23:05.752428" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:05.752813" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:23:05.752991" 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-25T01:23:05.751379" elapsed="0.001641"/>
</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-25T01:23:05.753200" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:05.753888" level="INFO">${ds_type} = operational</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-25T01:23:05.753546" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:05.754333" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:05.754090" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:05.754757" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:05.754517" elapsed="0.000265"/>
</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-25T01:23:05.755198" 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-25T01:23:05.755551" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:05.755311" elapsed="0.000309"/>
</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-25T01:23:05.755830" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:05.755660" elapsed="0.000228"/>
</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-25T01:23:05.756075" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:05.755911" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:05.755291" elapsed="0.000861"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:05.755028" elapsed="0.001148"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:05.754827" elapsed="0.001376"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:05.756243" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:23:05.756492" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:05.756541" 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-25T01:23:05.750440" elapsed="0.006125"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:05.757333" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:05.757416" 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-25T01:23:05.756742" elapsed="0.000701"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:05.758235" 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-25T01:23:05.757857" elapsed="0.000474">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:05.757531" elapsed="0.000895">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:05.757508" elapsed="0.000965">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-25T01:23:05.758685" elapsed="0.000031"/>
</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-25T01:23:05.758924" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:05.759179" elapsed="0.000023"/>
</return>
<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>
<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-25T01:23:05.747371" elapsed="0.011954">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:05.747112" elapsed="0.012300">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:05.746740" elapsed="0.012743">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:05.746233" elapsed="0.013366">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:05.759907" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:05.712944" elapsed="0.047104">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:07.790944" elapsed="0.000265"/>
</kw>
<msg time="2026-04-25T01:23:07.791278" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:07.790152" elapsed="0.001194"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:07.789580" elapsed="0.001846"/>
</kw>
<msg time="2026-04-25T01:23:07.791474" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:07.780738" elapsed="0.010780"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:07.780170" elapsed="0.011424"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:07.792217" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:07.791808" elapsed="0.000459"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:07.798092" 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-25T01:23:07.797643" elapsed="0.000479"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:07.798582" 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-25T01:23:07.798289" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:07.798657" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:23:07.798821" 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-25T01:23:07.797255" elapsed="0.001605"/>
</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-25T01:23:07.799036" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:07.799711" level="INFO">${ds_type} = operational</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-25T01:23:07.799371" elapsed="0.000367"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:07.800159" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:07.799898" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:07.800575" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:07.800336" elapsed="0.000265"/>
</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-25T01:23:07.801030" elapsed="0.000025"/>
</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-25T01:23:07.801293" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:07.801143" elapsed="0.000206"/>
</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-25T01:23:07.801517" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:07.801373" elapsed="0.000199"/>
</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-25T01:23:07.801739" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:07.801595" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:07.801123" elapsed="0.000690"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:07.800840" elapsed="0.000997"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:07.800649" elapsed="0.001215"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:07.801905" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:23:07.802129" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:07.802176" 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-25T01:23:07.796510" elapsed="0.005689"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:07.802669" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:07.802749" 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-25T01:23:07.802375" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:07.803424" 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-25T01:23:07.803133" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:07.802887" elapsed="0.000684">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:07.802864" elapsed="0.000738">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-25T01:23:07.803759" 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-25T01:23:07.803993" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:07.804065" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:07.793367" elapsed="0.010808">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:07.793117" elapsed="0.011197">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:07.792952" elapsed="0.011420">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:07.792539" elapsed="0.011925">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:07.804718" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:07.761066" elapsed="0.043773">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:09.831553" elapsed="0.000245"/>
</kw>
<msg time="2026-04-25T01:23:09.831866" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:09.830879" elapsed="0.001050"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:09.830406" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:23:09.832230" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:09.821693" elapsed="0.010582"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:09.821148" elapsed="0.011202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:09.832804" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:09.832549" elapsed="0.000300"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:09.838168" 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-25T01:23:09.837629" elapsed="0.000579"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:09.838870" 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-25T01:23:09.838447" elapsed="0.000461"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:09.839002" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:23:09.839240" 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-25T01:23:09.837221" elapsed="0.002054"/>
</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-25T01:23:09.839503" elapsed="0.000229"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:09.840475" level="INFO">${ds_type} = operational</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-25T01:23:09.839986" elapsed="0.000527"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:09.841117" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:09.840745" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:09.841762" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:09.841371" elapsed="0.000418"/>
</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-25T01:23:09.842233" elapsed="0.000025"/>
</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-25T01:23:09.842495" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:09.842346" elapsed="0.000205"/>
</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-25T01:23:09.842715" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:09.842576" elapsed="0.000192"/>
</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-25T01:23:09.842931" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:09.842790" elapsed="0.000285"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:09.842325" elapsed="0.000776"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:09.842047" elapsed="0.001078"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:09.841837" elapsed="0.001314"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:09.843191" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:09.843392" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:09.843438" 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-25T01:23:09.836481" elapsed="0.006981"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:09.844124" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:09.844203" 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-25T01:23:09.843637" elapsed="0.000590"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:09.844804" 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-25T01:23:09.844519" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:09.844299" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:09.844280" elapsed="0.000720">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-25T01:23:09.845157" 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-25T01:23:09.845331" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:09.845396" elapsed="0.000039"/>
</return>
<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>
<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-25T01:23:09.833892" elapsed="0.011645">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:09.833654" elapsed="0.011954">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:09.833510" elapsed="0.012154">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:09.833098" elapsed="0.012654">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:09.846031" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:09.805747" elapsed="0.040407">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:11.874950" elapsed="0.000266"/>
</kw>
<msg time="2026-04-25T01:23:11.875283" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:11.874280" elapsed="0.001070"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:11.873768" elapsed="0.001663"/>
</kw>
<msg time="2026-04-25T01:23:11.875477" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:11.864998" elapsed="0.010523"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:11.864426" elapsed="0.011170"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:11.876119" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:11.875798" elapsed="0.000370"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:11.881729" 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-25T01:23:11.881334" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:11.882315" 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-25T01:23:11.882018" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:11.882391" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:23:11.882555" 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-25T01:23:11.880936" elapsed="0.001644"/>
</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-25T01:23:11.882738" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:11.883442" level="INFO">${ds_type} = operational</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-25T01:23:11.883086" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:11.883879" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:11.883632" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:11.884332" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:11.884089" elapsed="0.000268"/>
</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-25T01:23:11.884759" 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-25T01:23:11.885034" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:11.884869" elapsed="0.000222"/>
</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-25T01:23:11.885258" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:11.885115" elapsed="0.000196"/>
</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-25T01:23:11.885475" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:11.885334" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:11.884850" elapsed="0.000698"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:11.884588" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:11.884404" elapsed="0.001193"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:11.885635" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:23:11.885835" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:11.885881" 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-25T01:23:11.880195" elapsed="0.005709"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:11.886371" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:11.886448" 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-25T01:23:11.886093" elapsed="0.000379"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:11.887061" 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-25T01:23:11.886760" elapsed="0.000375">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:11.886541" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:11.886522" elapsed="0.000712">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-25T01:23:11.887387" elapsed="0.000022"/>
</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-25T01:23:11.887566" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:11.887632" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:11.877221" elapsed="0.010518">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:11.876976" elapsed="0.010833">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:11.876816" elapsed="0.011048">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:11.876411" elapsed="0.011541">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:11.888253" elapsed="0.000061"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:11.847081" elapsed="0.041332">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:13.917999" elapsed="0.000240"/>
</kw>
<msg time="2026-04-25T01:23:13.918304" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:13.917326" elapsed="0.001041"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:13.916843" elapsed="0.001605"/>
</kw>
<msg time="2026-04-25T01:23:13.918494" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:13.908271" elapsed="0.010267"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:13.907824" elapsed="0.010788"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:13.919103" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:13.918826" elapsed="0.000323"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:13.924426" 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-25T01:23:13.924032" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:13.924905" 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-25T01:23:13.924616" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:13.924993" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:23:13.925155" 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-25T01:23:13.923626" elapsed="0.001553"/>
</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-25T01:23:13.925334" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:13.925996" level="INFO">${ds_type} = operational</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-25T01:23:13.925648" elapsed="0.000375"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:13.926419" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:13.926182" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:13.926855" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:13.926592" elapsed="0.000288"/>
</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-25T01:23:13.927293" 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-25T01:23:13.927550" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:13.927402" elapsed="0.000204"/>
</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-25T01:23:13.927771" elapsed="0.001484"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:13.927630" elapsed="0.001665"/>
</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-25T01:23:13.929475" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:13.929320" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:13.927382" elapsed="0.002171"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:13.927124" elapsed="0.002454"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:13.926925" elapsed="0.002678"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:13.929642" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:13.929845" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:13.929892" 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-25T01:23:13.922884" elapsed="0.007031"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:13.930449" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:13.930528" 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-25T01:23:13.930170" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:13.931162" 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-25T01:23:13.930862" elapsed="0.000372">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:13.930624" elapsed="0.000677">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:13.930605" elapsed="0.000728">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-25T01:23:13.931489" elapsed="0.000022"/>
</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-25T01:23:13.931666" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:13.931734" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:13.920231" elapsed="0.011610">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:13.919956" elapsed="0.011954">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:13.919797" elapsed="0.012182">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:13.919379" elapsed="0.012693">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:13.932311" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:13.889329" elapsed="0.043100">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:15.960743" elapsed="0.000269"/>
</kw>
<msg time="2026-04-25T01:23:15.961081" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:15.960068" elapsed="0.001079"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:15.959557" elapsed="0.001673"/>
</kw>
<msg time="2026-04-25T01:23:15.961277" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:15.950907" elapsed="0.010416"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:15.950441" elapsed="0.010958"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:15.961894" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:15.961631" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:15.967592" 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-25T01:23:15.967173" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:15.968090" 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-25T01:23:15.967783" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:15.968165" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:23:15.968325" 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-25T01:23:15.966776" elapsed="0.001573"/>
</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-25T01:23:15.968579" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:15.969273" level="INFO">${ds_type} = operational</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-25T01:23:15.968903" elapsed="0.000398"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:15.969737" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:15.969488" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:15.970178" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:15.969917" elapsed="0.000287"/>
</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-25T01:23:15.970620" elapsed="0.000028"/>
</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-25T01:23:15.970890" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:15.970738" elapsed="0.000207"/>
</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-25T01:23:15.971133" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:15.970985" elapsed="0.000205"/>
</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-25T01:23:15.971359" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:15.971214" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:15.970717" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:15.970436" elapsed="0.001020"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:15.970252" elapsed="0.001229"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:15.971522" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:15.971724" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:15.971771" 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-25T01:23:15.966029" elapsed="0.005766"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:15.972268" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:15.972347" 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-25T01:23:15.971981" elapsed="0.000390"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:15.972947" 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-25T01:23:15.972662" elapsed="0.000377">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:15.972441" elapsed="0.000666">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:15.972422" elapsed="0.000716">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-25T01:23:15.973293" elapsed="0.000022"/>
</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-25T01:23:15.973514" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:15.973585" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:15.963020" elapsed="0.010673">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:15.962750" elapsed="0.011014">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:15.962602" elapsed="0.011218">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:15.962196" elapsed="0.011713">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:15.974166" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:15.933432" elapsed="0.040852">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:18.003348" elapsed="0.000425"/>
</kw>
<msg time="2026-04-25T01:23:18.003870" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:18.002399" elapsed="0.001554"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:18.001706" elapsed="0.002406"/>
</kw>
<msg time="2026-04-25T01:23:18.004181" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:17.992030" elapsed="0.012287"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:17.991584" elapsed="0.012870"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:18.005175" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:18.004729" elapsed="0.000494"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:18.010417" 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-25T01:23:18.010019" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:18.010904" 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-25T01:23:18.010607" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:18.010997" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:23:18.011158" 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-25T01:23:18.009623" elapsed="0.001560"/>
</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-25T01:23:18.011341" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:18.012019" level="INFO">${ds_type} = operational</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-25T01:23:18.011657" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:18.012462" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:18.012207" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:18.012881" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:18.012636" elapsed="0.000271"/>
</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-25T01:23:18.013379" elapsed="0.000034"/>
</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-25T01:23:18.013700" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:18.013518" elapsed="0.000251"/>
</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-25T01:23:18.014004" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:18.013800" elapsed="0.000261"/>
</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-25T01:23:18.014285" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:18.014084" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:18.013496" elapsed="0.000891"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:18.013161" elapsed="0.001258"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:18.012954" elapsed="0.001498"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:18.014506" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:23:18.014788" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:18.014852" 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-25T01:23:18.008860" elapsed="0.006025"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:18.015531" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:18.015641" 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-25T01:23:18.015148" elapsed="0.000526"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:18.016917" 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-25T01:23:18.016468" elapsed="0.000574">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:18.016096" elapsed="0.001042">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:18.015803" elapsed="0.001372">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-25T01:23:18.017332" elapsed="0.000022"/>
</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-25T01:23:18.017509" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:18.017577" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:18.006258" elapsed="0.011426">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:18.006020" elapsed="0.011734">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:18.005859" elapsed="0.011950">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:18.005461" elapsed="0.012436">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:18.018151" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:17.975598" elapsed="0.042671">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:20.051262" elapsed="0.000354"/>
</kw>
<msg time="2026-04-25T01:23:20.051707" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:20.050207" elapsed="0.001590"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:20.049493" elapsed="0.002426"/>
</kw>
<msg time="2026-04-25T01:23:20.052012" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:20.040246" elapsed="0.011835"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:20.039608" elapsed="0.012589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:20.052901" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:20.052494" elapsed="0.000526"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:20.059838" 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-25T01:23:20.059363" elapsed="0.000504"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:20.060346" 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-25T01:23:20.060051" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:20.060428" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:23:20.060600" 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-25T01:23:20.058721" elapsed="0.001905"/>
</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-25T01:23:20.060794" elapsed="0.000165"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:20.061504" level="INFO">${ds_type} = operational</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-25T01:23:20.061140" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:20.061992" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:20.061703" elapsed="0.000320"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:20.062537" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:20.062283" elapsed="0.000280"/>
</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-25T01:23:20.063039" elapsed="0.000027"/>
</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-25T01:23:20.063313" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:20.063157" elapsed="0.000214"/>
</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-25T01:23:20.063570" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:20.063396" elapsed="0.000239"/>
</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-25T01:23:20.063807" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:20.063659" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:20.063137" elapsed="0.000745"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:20.062827" elapsed="0.001080"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:20.062614" elapsed="0.001319"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:20.063992" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:23:20.064204" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:20.064250" 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-25T01:23:20.057948" elapsed="0.006326"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:20.064755" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:20.064835" 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-25T01:23:20.064458" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:20.065494" 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-25T01:23:20.065175" elapsed="0.000419">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:20.064932" elapsed="0.000744">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:20.064913" elapsed="0.000800">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-25T01:23:20.065871" elapsed="0.000030"/>
</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-25T01:23:20.066075" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:20.066146" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:20.054497" elapsed="0.011759">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:20.054165" elapsed="0.012162">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:20.053940" elapsed="0.012443">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:20.053373" elapsed="0.013101">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:20.066720" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:20.019279" elapsed="0.047561">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:22.096806" elapsed="0.000254"/>
</kw>
<msg time="2026-04-25T01:23:22.097126" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:22.096128" elapsed="0.001058"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:22.095645" elapsed="0.001622"/>
</kw>
<msg time="2026-04-25T01:23:22.097385" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:22.086895" elapsed="0.010537"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:22.086475" elapsed="0.011035"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:22.098014" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:22.097705" elapsed="0.000357"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:22.103232" 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-25T01:23:22.102828" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:22.103713" 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-25T01:23:22.103423" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:22.103786" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:23:22.103944" 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-25T01:23:22.102453" elapsed="0.001530"/>
</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-25T01:23:22.104140" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:22.104822" level="INFO">${ds_type} = operational</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-25T01:23:22.104483" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:22.105282" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:22.105027" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:22.105696" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:22.105459" 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-25T01:23:22.106151" 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-25T01:23:22.106408" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:22.106260" elapsed="0.000204"/>
</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-25T01:23:22.106630" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:22.106488" elapsed="0.000194"/>
</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-25T01:23:22.106845" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:22.106705" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:22.106241" elapsed="0.000676"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:22.105980" elapsed="0.000960"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:22.105768" elapsed="0.001210"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:22.107018" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:22.107217" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:22.107263" 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-25T01:23:22.101694" elapsed="0.005592"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:22.107905" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:22.107998" 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-25T01:23:22.107456" elapsed="0.000568"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:22.108611" 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-25T01:23:22.108332" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:22.108109" elapsed="0.000643">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:22.108086" elapsed="0.000697">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-25T01:23:22.108937" elapsed="0.000022"/>
</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-25T01:23:22.109176" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:22.109245" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:22.099085" elapsed="0.010272">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:22.098839" elapsed="0.010601">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:22.098695" elapsed="0.010809">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:22.098295" elapsed="0.011307">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:22.109894" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:22.067660" elapsed="0.042372">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:24.139556" elapsed="0.000255"/>
</kw>
<msg time="2026-04-25T01:23:24.139877" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:24.138859" elapsed="0.001082"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:24.138372" elapsed="0.001674"/>
</kw>
<msg time="2026-04-25T01:23:24.140094" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:24.129627" elapsed="0.010513"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:24.129090" elapsed="0.011126"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:24.140719" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:24.140425" elapsed="0.000343"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:24.146227" 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-25T01:23:24.145817" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:24.146708" 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-25T01:23:24.146417" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:24.146782" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:23:24.146942" 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-25T01:23:24.145438" elapsed="0.001544"/>
</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-25T01:23:24.147141" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:24.147801" level="INFO">${ds_type} = operational</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-25T01:23:24.147464" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:24.148242" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:24.148002" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:24.148674" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:24.148434" elapsed="0.000286"/>
</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-25T01:23:24.149152" elapsed="0.000025"/>
</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-25T01:23:24.149484" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:24.149263" elapsed="0.000281"/>
</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-25T01:23:24.149717" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:24.149569" elapsed="0.000203"/>
</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-25T01:23:24.149941" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:24.149796" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:24.149243" elapsed="0.000792"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:24.148958" elapsed="0.001101"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:24.148771" elapsed="0.001314"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:24.150125" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:23:24.150333" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:24.150385" 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-25T01:23:24.144652" elapsed="0.005760"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:24.150871" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:24.150949" 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-25T01:23:24.150592" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:24.151573" 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-25T01:23:24.151285" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:24.151062" elapsed="0.000659">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:24.151043" elapsed="0.000709">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-25T01:23:24.151907" elapsed="0.000022"/>
</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-25T01:23:24.152101" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:24.152168" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:24.141801" elapsed="0.010476">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:24.141565" elapsed="0.010782">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:24.141421" elapsed="0.010982">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:24.141022" elapsed="0.011469">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:24.152776" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:24.110920" elapsed="0.041977">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:26.183331" elapsed="0.000258"/>
</kw>
<msg time="2026-04-25T01:23:26.183656" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:26.182657" elapsed="0.001060"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:26.182186" elapsed="0.001611"/>
</kw>
<msg time="2026-04-25T01:23:26.183843" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:26.173538" elapsed="0.010350"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:26.173115" elapsed="0.010862"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:26.184507" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:26.184175" elapsed="0.000378"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:26.189721" 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-25T01:23:26.189296" elapsed="0.000456"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:26.190245" 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-25T01:23:26.189925" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:26.190322" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:23:26.190515" 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-25T01:23:26.188905" elapsed="0.001638"/>
</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-25T01:23:26.190707" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:26.191407" level="INFO">${ds_type} = operational</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-25T01:23:26.191062" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:26.191890" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:26.191643" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:26.192336" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:26.192093" elapsed="0.000269"/>
</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-25T01:23:26.192760" 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-25T01:23:26.193036" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:26.192871" elapsed="0.000224"/>
</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-25T01:23:26.193264" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:26.193120" elapsed="0.000199"/>
</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-25T01:23:26.193484" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:26.193342" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:26.192852" elapsed="0.000708"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:26.192591" elapsed="0.000993"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:26.192409" elapsed="0.001202"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:26.193650" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:23:26.193851" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:26.193899" 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-25T01:23:26.188187" elapsed="0.005736"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:26.194569" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:26.194649" 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-25T01:23:26.194113" elapsed="0.000560"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:26.195276" 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-25T01:23:26.194981" elapsed="0.000392">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:26.194745" elapsed="0.000725">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:26.194726" elapsed="0.000783">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-25T01:23:26.195694" elapsed="0.000023"/>
</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-25T01:23:26.195874" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:26.195942" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:26.185575" elapsed="0.010492">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:26.185342" elapsed="0.010834">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:26.185201" elapsed="0.011032">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:26.184786" elapsed="0.011538">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:26.196564" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:26.153710" elapsed="0.042973">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:28.226170" elapsed="0.000240"/>
</kw>
<msg time="2026-04-25T01:23:28.226512" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:28.225437" elapsed="0.001140"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:28.224895" elapsed="0.001763"/>
</kw>
<msg time="2026-04-25T01:23:28.226705" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:28.216232" elapsed="0.010517"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:28.215798" elapsed="0.011025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:28.227294" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:28.227036" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:28.232939" 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-25T01:23:28.232556" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:28.233429" 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-25T01:23:28.233144" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:28.233501" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:23:28.233656" 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-25T01:23:28.232182" elapsed="0.001498"/>
</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-25T01:23:28.233834" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:28.234510" level="INFO">${ds_type} = operational</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-25T01:23:28.234165" elapsed="0.000371"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:28.235029" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:28.234699" elapsed="0.000356"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:28.235442" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:28.235206" elapsed="0.000261"/>
</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-25T01:23:28.235863" 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-25T01:23:28.236137" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:28.235985" elapsed="0.000207"/>
</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-25T01:23:28.236356" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:28.236216" elapsed="0.000193"/>
</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-25T01:23:28.236572" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:28.236432" elapsed="0.000277"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:28.235951" elapsed="0.000783"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:28.235694" elapsed="0.001064"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:28.235513" elapsed="0.001270"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:28.236823" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:28.237040" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:28.237086" 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-25T01:23:28.231333" elapsed="0.005776"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:28.237554" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:28.237630" 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-25T01:23:28.237284" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:28.238229" 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-25T01:23:28.237940" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:28.237723" elapsed="0.000644">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:28.237705" elapsed="0.000693">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-25T01:23:28.238580" elapsed="0.000022"/>
</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-25T01:23:28.238756" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:28.238821" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:28.228520" elapsed="0.010407">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:28.228282" elapsed="0.010732">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:28.228141" elapsed="0.010929">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:28.227569" elapsed="0.011590">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:28.239391" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:28.197806" elapsed="0.041701">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:30.265826" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:23:30.266134" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:30.265134" elapsed="0.001060"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:30.264652" elapsed="0.001621"/>
</kw>
<msg time="2026-04-25T01:23:30.266320" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:30.256139" elapsed="0.010225"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:30.255709" elapsed="0.010731"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:30.266894" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:30.266637" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:30.272104" 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-25T01:23:30.271697" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:30.272674" 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-25T01:23:30.272356" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:30.272749" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:23:30.272908" 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-25T01:23:30.271314" elapsed="0.001619"/>
</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-25T01:23:30.273104" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:30.273784" level="INFO">${ds_type} = operational</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-25T01:23:30.273434" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:30.274225" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:30.273983" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:30.274640" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:30.274402" elapsed="0.000264"/>
</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-25T01:23:30.275083" elapsed="0.000025"/>
</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-25T01:23:30.275342" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:30.275193" elapsed="0.000205"/>
</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-25T01:23:30.275565" elapsed="0.001462"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:30.275422" elapsed="0.001647"/>
</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-25T01:23:30.277249" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:30.277094" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:30.275174" elapsed="0.002153"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:30.274896" elapsed="0.002454"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:30.274714" elapsed="0.002863"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:30.277658" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:23:30.277893" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:30.277940" 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-25T01:23:30.270582" elapsed="0.007395"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:30.278454" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:30.278534" 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-25T01:23:30.278165" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:30.279148" 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-25T01:23:30.278853" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:30.278630" elapsed="0.000662">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:30.278611" elapsed="0.000713">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-25T01:23:30.279479" elapsed="0.000023"/>
</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-25T01:23:30.279656" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:30.279723" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:30.267949" elapsed="0.011879">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:30.267718" elapsed="0.012179">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:30.267579" elapsed="0.012373">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:30.267185" elapsed="0.012874">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:30.280297" elapsed="0.000063"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:30.240328" elapsed="0.040129">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:32.311558" elapsed="0.000243"/>
</kw>
<msg time="2026-04-25T01:23:32.311868" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:32.310860" elapsed="0.001072"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:32.310389" elapsed="0.001640"/>
</kw>
<msg time="2026-04-25T01:23:32.312077" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:32.301781" elapsed="0.010341"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:32.301351" elapsed="0.010846"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:32.312670" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:32.312413" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:32.318346" 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-25T01:23:32.317931" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:32.318824" 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-25T01:23:32.318537" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:32.318897" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:23:32.319071" 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-25T01:23:32.317506" elapsed="0.001590"/>
</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-25T01:23:32.319253" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:32.319911" level="INFO">${ds_type} = operational</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-25T01:23:32.319575" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:32.320415" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:32.320128" elapsed="0.000313"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:32.320830" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:32.320591" elapsed="0.000264"/>
</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-25T01:23:32.321313" elapsed="0.000028"/>
</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-25T01:23:32.321584" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:32.321433" elapsed="0.000207"/>
</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-25T01:23:32.321811" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:32.321665" elapsed="0.000201"/>
</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-25T01:23:32.322054" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:32.321890" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:32.321413" elapsed="0.000719"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:32.321127" elapsed="0.001028"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:32.320902" elapsed="0.001278"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:32.322218" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:32.322420" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:32.322465" 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-25T01:23:32.316726" elapsed="0.005762"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:32.323036" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:32.323117" 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-25T01:23:32.322736" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:32.323719" 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-25T01:23:32.323436" elapsed="0.000358">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:32.323213" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:32.323194" elapsed="0.000706">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-25T01:23:32.324212" elapsed="0.000023"/>
</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-25T01:23:32.324410" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:32.324480" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:32.313883" elapsed="0.010705">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:32.313649" elapsed="0.011009">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:32.313507" elapsed="0.011206">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:32.312947" elapsed="0.011854">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:32.325060" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:32.281348" elapsed="0.043831">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:34.357161" elapsed="0.000363"/>
</kw>
<msg time="2026-04-25T01:23:34.357645" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:34.356213" elapsed="0.001528"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:34.355486" elapsed="0.002384"/>
</kw>
<msg time="2026-04-25T01:23:34.357948" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:34.345436" elapsed="0.012610"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:34.344856" elapsed="0.013316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:34.358831" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:34.358495" elapsed="0.000385"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:34.366083" 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-25T01:23:34.365559" elapsed="0.000566"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:34.366762" 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-25T01:23:34.366368" elapsed="0.000423"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:34.366843" elapsed="0.000039"/>
</return>
<msg time="2026-04-25T01:23:34.367061" 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-25T01:23:34.365034" elapsed="0.002065"/>
</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-25T01:23:34.367500" elapsed="0.000259"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:34.368567" level="INFO">${ds_type} = operational</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-25T01:23:34.368035" elapsed="0.000572"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:34.369098" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:34.368812" elapsed="0.000313"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:34.369566" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:34.369283" elapsed="0.000320"/>
</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-25T01:23:34.370235" elapsed="0.000029"/>
</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-25T01:23:34.370519" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:34.370361" elapsed="0.000217"/>
</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-25T01:23:34.370822" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:34.370605" elapsed="0.000314"/>
</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-25T01:23:34.371210" elapsed="0.000101"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:34.370958" elapsed="0.000407"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:34.370339" elapsed="0.001065"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:34.369984" elapsed="0.001459"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:34.369674" elapsed="0.001814"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:34.371555" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T01:23:34.371889" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:34.371962" 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-25T01:23:34.363822" elapsed="0.008199"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:34.372621" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:34.372706" 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-25T01:23:34.372288" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:34.373839" 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-25T01:23:34.373459" elapsed="0.000480">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:34.373131" elapsed="0.000942">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:34.372787" elapsed="0.001340">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-25T01:23:34.374366" elapsed="0.000033"/>
</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-25T01:23:34.374640" elapsed="0.000033"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:34.374751" elapsed="0.000026"/>
</return>
<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>
<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-25T01:23:34.360239" elapsed="0.014684">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:34.359957" elapsed="0.015107">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:34.359754" elapsed="0.015405">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:34.359168" elapsed="0.016161">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:34.375724" elapsed="0.000055"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:34.325997" elapsed="0.049917">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:36.406325" elapsed="0.000366"/>
</kw>
<msg time="2026-04-25T01:23:36.406762" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:36.405521" elapsed="0.001314"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:36.404978" elapsed="0.001941"/>
</kw>
<msg time="2026-04-25T01:23:36.406985" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:36.396167" elapsed="0.010866"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:36.395647" elapsed="0.011477"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:36.407649" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:36.407353" elapsed="0.000345"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:36.413622" 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-25T01:23:36.413110" elapsed="0.000549"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:36.414149" 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-25T01:23:36.413831" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:36.414254" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T01:23:36.414436" 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-25T01:23:36.412680" elapsed="0.001781"/>
</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-25T01:23:36.414627" elapsed="0.000176"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:36.415328" level="INFO">${ds_type} = operational</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-25T01:23:36.414985" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:36.415781" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:36.415515" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:36.416219" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:36.415959" elapsed="0.000286"/>
</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-25T01:23:36.416691" elapsed="0.000026"/>
</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-25T01:23:36.416960" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:36.416808" elapsed="0.000226"/>
</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-25T01:23:36.417232" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:36.417061" elapsed="0.000241"/>
</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-25T01:23:36.417510" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:36.417333" elapsed="0.000243"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:36.416787" elapsed="0.000819"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:36.416497" elapsed="0.001141"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:36.416298" elapsed="0.001371"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:36.417719" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:23:36.417942" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:36.418007" 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-25T01:23:36.411865" elapsed="0.006174"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:36.418549" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:36.418637" 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-25T01:23:36.418256" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:36.419351" 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-25T01:23:36.419062" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:36.418817" elapsed="0.000677">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:36.418797" elapsed="0.000729">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-25T01:23:36.419693" elapsed="0.000023"/>
</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-25T01:23:36.419875" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:36.419943" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:36.408816" elapsed="0.011255">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:36.408549" elapsed="0.011594">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:36.408400" elapsed="0.011798">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:36.407952" elapsed="0.012337">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:36.420536" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:36.377080" elapsed="0.043585">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:38.452036" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:23:38.452353" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:38.451288" elapsed="0.001128"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:38.450798" elapsed="0.001699"/>
</kw>
<msg time="2026-04-25T01:23:38.452550" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:38.442146" elapsed="0.010458"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:38.441606" elapsed="0.011078"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:38.453207" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:38.452883" elapsed="0.000373"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:38.458569" 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-25T01:23:38.458173" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:38.459103" 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-25T01:23:38.458790" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:38.459178" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:23:38.459339" 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-25T01:23:38.457781" elapsed="0.001582"/>
</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-25T01:23:38.459520" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:38.460215" level="INFO">${ds_type} = operational</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-25T01:23:38.459854" elapsed="0.000387"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:38.460643" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:38.460401" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:38.461194" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:38.460908" elapsed="0.000319"/>
</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-25T01:23:38.461667" elapsed="0.000027"/>
</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-25T01:23:38.461981" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:38.461793" elapsed="0.000256"/>
</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-25T01:23:38.462228" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:38.462078" elapsed="0.000212"/>
</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-25T01:23:38.462537" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:38.462314" elapsed="0.000277"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:38.461769" elapsed="0.000846"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:38.461468" elapsed="0.001171"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:38.461276" elapsed="0.001390"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:38.462706" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:38.462916" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:38.462979" 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-25T01:23:38.457039" elapsed="0.005966"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:38.463654" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:38.463735" 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-25T01:23:38.463182" elapsed="0.000578"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:38.464359" 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-25T01:23:38.464072" elapsed="0.000363">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:38.463832" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:38.463812" elapsed="0.000723">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-25T01:23:38.464692" elapsed="0.000022"/>
</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-25T01:23:38.464868" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:38.465277" elapsed="0.000022"/>
</return>
<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>
<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-25T01:23:38.454355" elapsed="0.011044">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:38.454098" elapsed="0.011371">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:38.453933" elapsed="0.011593">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:38.453495" elapsed="0.012119">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:38.465862" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:38.421680" elapsed="0.044316">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:40.496064" elapsed="0.000283"/>
</kw>
<msg time="2026-04-25T01:23:40.496417" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:40.495374" elapsed="0.001111"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:40.494880" elapsed="0.001688"/>
</kw>
<msg time="2026-04-25T01:23:40.496709" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:40.486228" elapsed="0.010529"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:40.485772" elapsed="0.011064"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:40.497315" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:40.497049" elapsed="0.000312"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:40.503531" 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-25T01:23:40.502954" elapsed="0.000616"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:40.504419" 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-25T01:23:40.503801" elapsed="0.000656"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:40.504525" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:23:40.504749" 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-25T01:23:40.502426" elapsed="0.002357"/>
</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-25T01:23:40.505024" elapsed="0.000226"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:40.505948" level="INFO">${ds_type} = operational</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-25T01:23:40.505477" elapsed="0.000528"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:40.506567" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:40.506231" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:40.507197" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:40.506810" elapsed="0.000423"/>
</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-25T01:23:40.507790" elapsed="0.000034"/>
</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-25T01:23:40.508210" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:40.507941" elapsed="0.000350"/>
</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-25T01:23:40.508524" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:40.508326" elapsed="0.000272"/>
</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-25T01:23:40.508829" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:40.508630" elapsed="0.000270"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:40.507914" elapsed="0.001017"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:40.507554" elapsed="0.001428"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:40.507298" elapsed="0.001712"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:40.509051" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:40.509253" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:40.509298" 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-25T01:23:40.501390" elapsed="0.007931"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:40.509789" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:40.509867" 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-25T01:23:40.509496" elapsed="0.000395"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:40.510485" 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-25T01:23:40.510195" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:40.509960" elapsed="0.000673">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:40.509941" elapsed="0.000723">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-25T01:23:40.510818" elapsed="0.000022"/>
</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-25T01:23:40.511079" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:40.511148" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:40.498408" elapsed="0.012850">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:40.498156" elapsed="0.013172">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:40.498013" elapsed="0.013372">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:40.497595" elapsed="0.013880">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:40.511716" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:40.466889" elapsed="0.044944">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:42.538854" elapsed="0.000320"/>
</kw>
<msg time="2026-04-25T01:23:42.539244" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:42.538162" elapsed="0.001147"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:42.537660" elapsed="0.001734"/>
</kw>
<msg time="2026-04-25T01:23:42.539442" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:42.529022" elapsed="0.010467"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:42.528568" elapsed="0.011000"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:42.540063" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:42.539774" elapsed="0.000337"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:42.545298" 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-25T01:23:42.544893" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:42.545771" 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-25T01:23:42.545484" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:42.545843" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:23:42.546016" 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-25T01:23:42.544520" elapsed="0.001521"/>
</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-25T01:23:42.546194" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:42.546848" level="INFO">${ds_type} = operational</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-25T01:23:42.546518" elapsed="0.000356"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:42.547331" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:42.547087" elapsed="0.000269"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:42.547738" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:42.547503" elapsed="0.000260"/>
</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-25T01:23:42.548175" 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-25T01:23:42.548501" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:42.548284" elapsed="0.000274"/>
</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-25T01:23:42.548728" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:42.548584" elapsed="0.000199"/>
</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-25T01:23:42.548949" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:42.548806" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:42.548264" elapsed="0.000777"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:42.548006" elapsed="0.001060"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:42.547808" elapsed="0.001283"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:42.549131" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:42.549358" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:42.549404" 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-25T01:23:42.543783" elapsed="0.005645"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:42.550067" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:42.550147" 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-25T01:23:42.549600" elapsed="0.000571"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:42.550739" 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-25T01:23:42.550460" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:42.550241" elapsed="0.000636">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:42.550223" elapsed="0.000685">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-25T01:23:42.551108" elapsed="0.000024"/>
</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-25T01:23:42.551288" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:42.551354" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:42.541175" elapsed="0.010285">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:42.540925" elapsed="0.010604">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:42.540782" elapsed="0.010802">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:42.540352" elapsed="0.011319">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:42.551906" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:42.512730" elapsed="0.039309">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:44.584991" elapsed="0.000370"/>
</kw>
<msg time="2026-04-25T01:23:44.585457" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:44.584086" elapsed="0.001466"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:44.583384" elapsed="0.002294"/>
</kw>
<msg time="2026-04-25T01:23:44.585752" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:44.572364" elapsed="0.013459"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:44.571607" elapsed="0.014333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:44.586687" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:44.586277" elapsed="0.000459"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:44.593925" 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-25T01:23:44.593296" elapsed="0.000661"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:44.594548" 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-25T01:23:44.594158" elapsed="0.000428"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:44.594653" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:23:44.594835" 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-25T01:23:44.592685" elapsed="0.002176"/>
</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-25T01:23:44.595044" elapsed="0.000200"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:44.596027" level="INFO">${ds_type} = operational</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-25T01:23:44.595489" elapsed="0.000580"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:44.596700" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:44.596325" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:44.597201" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:44.596920" elapsed="0.000307"/>
</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-25T01:23:44.597692" elapsed="0.000026"/>
</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-25T01:23:44.597989" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:44.597811" elapsed="0.000252"/>
</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-25T01:23:44.598256" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:44.598089" elapsed="0.000244"/>
</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-25T01:23:44.598624" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:44.598364" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:44.597789" elapsed="0.000959"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:44.597510" elapsed="0.001279"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:44.597281" elapsed="0.001553"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:44.598901" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:23:44.599226" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:44.599298" 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-25T01:23:44.591695" elapsed="0.007641"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:44.600063" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:44.600149" 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-25T01:23:44.599612" elapsed="0.000561"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:44.600807" 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-25T01:23:44.600497" elapsed="0.000432">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:44.600249" elapsed="0.000777">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:44.600229" elapsed="0.000831">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-25T01:23:44.601219" elapsed="0.000023"/>
</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-25T01:23:44.601409" elapsed="0.000024"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:44.601481" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:44.587934" elapsed="0.013657">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:44.587676" elapsed="0.014050">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:44.587522" elapsed="0.014261">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:44.587025" elapsed="0.014848">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:44.602155" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:44.553008" elapsed="0.049271">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:46.630373" elapsed="0.000236"/>
</kw>
<msg time="2026-04-25T01:23:46.630674" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:46.629707" elapsed="0.001027"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:46.629246" elapsed="0.001568"/>
</kw>
<msg time="2026-04-25T01:23:46.630860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:46.620669" elapsed="0.010233"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:46.620252" elapsed="0.010740"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:46.631449" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:46.631191" elapsed="0.000303"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:46.636696" 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-25T01:23:46.636288" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:46.637207" 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-25T01:23:46.636885" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:46.637281" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:23:46.637439" 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-25T01:23:46.635885" elapsed="0.001578"/>
</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-25T01:23:46.637619" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:46.638284" level="INFO">${ds_type} = operational</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-25T01:23:46.637933" elapsed="0.000377"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:46.638710" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:46.638470" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:46.639140" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:46.638884" elapsed="0.000282"/>
</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-25T01:23:46.639559" 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-25T01:23:46.639812" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:46.639665" elapsed="0.000210"/>
</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-25T01:23:46.640059" elapsed="0.001613"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:46.639899" elapsed="0.001816"/>
</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-25T01:23:46.641902" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:46.641741" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:46.639647" elapsed="0.002410"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:46.639391" elapsed="0.002691"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:46.639212" elapsed="0.002896"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:46.642150" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:23:46.642362" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:46.642408" 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-25T01:23:46.635160" elapsed="0.007271"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:46.642895" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:46.642990" 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-25T01:23:46.642606" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:46.643589" 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-25T01:23:46.643311" elapsed="0.000350">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:46.643088" elapsed="0.000640">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:46.643069" elapsed="0.000691">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-25T01:23:46.643914" elapsed="0.000022"/>
</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-25T01:23:46.644113" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:46.644181" elapsed="0.000019"/>
</return>
<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>
<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-25T01:23:46.632528" elapsed="0.011764">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:46.632292" elapsed="0.012069">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:46.632147" elapsed="0.012268">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:46.631724" elapsed="0.012778">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:46.644742" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:46.603192" elapsed="0.041665">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:48.671456" elapsed="0.000386"/>
</kw>
<msg time="2026-04-25T01:23:48.671919" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:48.670700" elapsed="0.001304"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:48.670214" elapsed="0.001878"/>
</kw>
<msg time="2026-04-25T01:23:48.672141" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:48.661293" elapsed="0.010893"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:48.660769" elapsed="0.011493"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:48.672726" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:48.672465" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:48.678296" 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-25T01:23:48.677825" elapsed="0.000501"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:48.678924" 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-25T01:23:48.678576" elapsed="0.000376"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:48.679019" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:23:48.679186" 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-25T01:23:48.677445" elapsed="0.001767"/>
</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-25T01:23:48.679373" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:48.680209" level="INFO">${ds_type} = operational</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-25T01:23:48.679843" elapsed="0.000393"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:48.680656" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:48.680413" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:48.681095" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:48.680834" elapsed="0.000287"/>
</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-25T01:23:48.681520" 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-25T01:23:48.681780" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:48.681631" elapsed="0.000206"/>
</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-25T01:23:48.682022" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:48.681862" elapsed="0.000217"/>
</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-25T01:23:48.682247" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:48.682102" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:48.681611" elapsed="0.000712"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:48.681350" elapsed="0.000996"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:48.681168" elapsed="0.001205"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:48.682412" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:23:48.682618" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:48.682665" 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-25T01:23:48.676692" elapsed="0.005997"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:48.683189" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:48.683269" 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-25T01:23:48.682888" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:48.683871" 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-25T01:23:48.683592" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:48.683370" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:48.683351" elapsed="0.000715">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-25T01:23:48.684223" elapsed="0.000022"/>
</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-25T01:23:48.684406" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:48.684472" elapsed="0.000017"/>
</return>
<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>
<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-25T01:23:48.673820" elapsed="0.010762">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:48.673578" elapsed="0.011075">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:48.673431" elapsed="0.011278">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:48.673027" elapsed="0.011770">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:48.685054" elapsed="0.000064"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:48.645674" elapsed="0.039543">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:50.711510" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:23:50.711854" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:50.710803" elapsed="0.001116"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:50.710289" elapsed="0.001729"/>
</kw>
<msg time="2026-04-25T01:23:50.712066" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:50.701623" elapsed="0.010488"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:50.701183" elapsed="0.011005"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:50.712661" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:50.712398" elapsed="0.000308"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:50.718019" 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-25T01:23:50.717589" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:50.718514" 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-25T01:23:50.718216" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:50.718589" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:23:50.718752" 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-25T01:23:50.717198" elapsed="0.001579"/>
</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-25T01:23:50.718934" elapsed="0.000179"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:50.719612" level="INFO">${ds_type} = operational</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-25T01:23:50.719276" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:50.720088" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:50.719826" elapsed="0.000288"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:50.720502" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:50.720264" 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-25T01:23:50.720937" 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-25T01:23:50.721220" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:50.721067" elapsed="0.000208"/>
</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-25T01:23:50.721442" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:50.721300" elapsed="0.000195"/>
</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-25T01:23:50.721660" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:50.721518" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:50.721046" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:50.720764" elapsed="0.000993"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:50.720575" elapsed="0.001208"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:50.721823" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:50.722043" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:50.722090" 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-25T01:23:50.716458" elapsed="0.005665"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:50.722663" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:50.722743" 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-25T01:23:50.722380" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:50.723594" 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-25T01:23:50.723301" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:50.723063" elapsed="0.000676">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:50.722819" elapsed="0.000952">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-25T01:23:50.723945" elapsed="0.000043"/>
</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-25T01:23:50.724145" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:50.724211" elapsed="0.000015"/>
</return>
<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>
<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-25T01:23:50.713775" elapsed="0.010543">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:50.713514" elapsed="0.010873">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:50.713367" elapsed="0.011075">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:50.712945" elapsed="0.011583">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:50.724767" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:50.686252" elapsed="0.038631">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:52.754015" elapsed="0.000247"/>
</kw>
<msg time="2026-04-25T01:23:52.754327" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:52.753336" elapsed="0.001055"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:52.752842" elapsed="0.001631"/>
</kw>
<msg time="2026-04-25T01:23:52.754519" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:52.743941" elapsed="0.010622"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:52.743489" elapsed="0.011148"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:52.755115" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:52.754837" elapsed="0.000324"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:52.762647" 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-25T01:23:52.762092" elapsed="0.000594"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:52.763351" 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-25T01:23:52.762914" elapsed="0.000475"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:52.763454" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:23:52.763674" 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-25T01:23:52.761509" elapsed="0.002200"/>
</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-25T01:23:52.764034" elapsed="0.000258"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:52.765115" level="INFO">${ds_type} = operational</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-25T01:23:52.764527" elapsed="0.000635"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:52.765735" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:52.765440" elapsed="0.000325"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:52.766250" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:52.765947" elapsed="0.000333"/>
</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-25T01:23:52.766795" elapsed="0.000030"/>
</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-25T01:23:52.767125" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:52.766930" elapsed="0.000258"/>
</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-25T01:23:52.767386" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:52.767218" elapsed="0.000228"/>
</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-25T01:23:52.767641" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:52.767473" elapsed="0.000226"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:52.766903" elapsed="0.000823"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:52.766554" elapsed="0.001198"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:52.766336" elapsed="0.001445"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:52.767826" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:23:52.768071" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:52.768124" 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-25T01:23:52.759639" elapsed="0.008511"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:52.768733" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:52.768822" 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-25T01:23:52.768397" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:52.769555" 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-25T01:23:52.769226" elapsed="0.000420">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:52.768929" elapsed="0.000792">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:52.768905" elapsed="0.000852">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-25T01:23:52.769942" elapsed="0.000066"/>
</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-25T01:23:52.770202" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:52.770279" elapsed="0.000018"/>
</return>
<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>
<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-25T01:23:52.756186" elapsed="0.014238">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:52.755934" elapsed="0.014578">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:52.755791" elapsed="0.014788">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:52.755394" elapsed="0.015284">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:52.770980" elapsed="0.000037"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:52.725812" elapsed="0.045315">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:54.798806" elapsed="0.000376"/>
</kw>
<msg time="2026-04-25T01:23:54.799255" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:54.798124" elapsed="0.001200"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:54.797609" elapsed="0.001806"/>
</kw>
<msg time="2026-04-25T01:23:54.799479" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:54.788781" elapsed="0.010759"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:54.788329" elapsed="0.011294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:54.800320" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:54.800006" elapsed="0.000360"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:54.805717" 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-25T01:23:54.805297" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:54.806250" 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-25T01:23:54.805923" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:54.806327" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:23:54.806493" 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-25T01:23:54.804871" elapsed="0.001646"/>
</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-25T01:23:54.806682" elapsed="0.000188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:54.807404" level="INFO">${ds_type} = operational</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-25T01:23:54.807061" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:54.807868" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:54.807590" elapsed="0.000304"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:54.808342" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:54.808071" elapsed="0.000297"/>
</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-25T01:23:54.808784" 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-25T01:23:54.809088" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:54.808900" elapsed="0.000254"/>
</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-25T01:23:54.809324" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:54.809181" elapsed="0.000197"/>
</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-25T01:23:54.809545" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:54.809401" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:54.808877" elapsed="0.000742"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:54.808601" elapsed="0.001043"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:54.808415" elapsed="0.001256"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:54.809711" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:54.809916" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:54.809978" 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-25T01:23:54.804141" elapsed="0.005864"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:54.810651" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:54.810730" 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-25T01:23:54.810180" elapsed="0.000575"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:54.811426" 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-25T01:23:54.811137" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:54.810878" elapsed="0.000702">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:54.810857" elapsed="0.000756">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-25T01:23:54.811770" elapsed="0.000022"/>
</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-25T01:23:54.811947" elapsed="0.000036"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:54.812032" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:54.801455" elapsed="0.010702">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:54.801210" elapsed="0.011025">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:54.801056" elapsed="0.011239">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:54.800609" elapsed="0.011781">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:54.812630" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:54.772104" elapsed="0.040646">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:56.843646" elapsed="0.000392"/>
</kw>
<msg time="2026-04-25T01:23:56.844144" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:56.842639" elapsed="0.001598"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:56.841946" elapsed="0.002408"/>
</kw>
<msg time="2026-04-25T01:23:56.844418" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:56.831766" elapsed="0.012714"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:56.831255" elapsed="0.013338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:56.845088" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:56.844800" elapsed="0.000334"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:56.851160" 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-25T01:23:56.850743" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:56.851679" 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-25T01:23:56.851355" elapsed="0.000351"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:56.851756" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:23:56.851921" 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-25T01:23:56.850352" elapsed="0.001594"/>
</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-25T01:23:56.852122" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:56.852795" level="INFO">${ds_type} = operational</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-25T01:23:56.852446" elapsed="0.000376"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:56.853249" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:56.852998" elapsed="0.000277"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:56.853756" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:56.853499" elapsed="0.000292"/>
</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-25T01:23:56.854223" 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-25T01:23:56.854491" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:56.854337" 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-25T01:23:56.854718" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:56.854575" elapsed="0.000198"/>
</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-25T01:23:56.854940" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:56.854797" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:56.854316" elapsed="0.000716"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:56.854049" elapsed="0.001008"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:56.853844" elapsed="0.001240"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:56.855125" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:23:56.855331" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:56.855377" 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-25T01:23:56.849532" elapsed="0.005869"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:56.855877" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:56.855956" 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-25T01:23:56.855597" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:56.856574" 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-25T01:23:56.856290" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:56.856067" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:56.856048" elapsed="0.000706">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-25T01:23:56.856910" elapsed="0.000022"/>
</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-25T01:23:56.857106" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:56.857176" elapsed="0.000016"/>
</return>
<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>
<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-25T01:23:56.846403" elapsed="0.010881">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:56.846092" elapsed="0.011263">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:56.845892" elapsed="0.011518">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:56.845429" elapsed="0.012068">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:56.857736" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:56.813635" elapsed="0.044219">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:23:58.883191" elapsed="0.000242"/>
</kw>
<msg time="2026-04-25T01:23:58.883501" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:58.882472" elapsed="0.001092"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:58.881996" elapsed="0.001650"/>
</kw>
<msg time="2026-04-25T01:23:58.883768" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:23:58.873249" elapsed="0.010567"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:23:58.872797" elapsed="0.011098"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:23:58.884376" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:23:58.884111" elapsed="0.000312"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:23:58.889863" 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-25T01:23:58.889452" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:58.890376" 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-25T01:23:58.890072" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:23:58.890451" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:23:58.890641" 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-25T01:23:58.889059" elapsed="0.001607"/>
</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-25T01:23:58.890830" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:23:58.891518" level="INFO">${ds_type} = operational</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-25T01:23:58.891176" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:58.891951" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:58.891708" elapsed="0.000297"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:23:58.892401" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:23:58.892159" elapsed="0.000268"/>
</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-25T01:23:58.892850" elapsed="0.000026"/>
</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-25T01:23:58.893131" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:58.892977" 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-25T01:23:58.893354" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:58.893212" elapsed="0.000196"/>
</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-25T01:23:58.893573" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:23:58.893431" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:23:58.892944" elapsed="0.000703"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:23:58.892669" elapsed="0.001001"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:58.892474" elapsed="0.001222"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:23:58.893734" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:23:58.893933" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:23:58.893998" 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-25T01:23:58.888282" elapsed="0.005743"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:23:58.894725" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:23:58.894805" 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-25T01:23:58.894200" elapsed="0.000629"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:23:58.895422" 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-25T01:23:58.895140" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:23:58.894901" elapsed="0.000661">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:23:58.894882" elapsed="0.000713">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-25T01:23:58.895756" elapsed="0.000022"/>
</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-25T01:23:58.896035" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:23:58.896128" elapsed="0.000022"/>
</return>
<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>
<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-25T01:23:58.885451" elapsed="0.010816">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:23:58.885216" elapsed="0.011124">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:23:58.885074" elapsed="0.011323">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:23:58.884658" elapsed="0.011828">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:23:58.896726" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:23:58.858741" elapsed="0.038103">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:00.923397" elapsed="0.000259"/>
</kw>
<msg time="2026-04-25T01:24:00.923728" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:00.922515" elapsed="0.001280"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:00.922026" elapsed="0.001852"/>
</kw>
<msg time="2026-04-25T01:24:00.923925" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:00.913404" elapsed="0.010580"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:00.912927" elapsed="0.011135"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:00.924533" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:00.924272" elapsed="0.000306"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:00.930074" 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-25T01:24:00.929665" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:00.930554" 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-25T01:24:00.930264" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:00.930628" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:24:00.930789" 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-25T01:24:00.929281" elapsed="0.001532"/>
</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-25T01:24:00.930984" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:00.931648" level="INFO">${ds_type} = operational</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-25T01:24:00.931305" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:00.932092" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:00.931833" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:00.932509" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:00.932267" elapsed="0.000267"/>
</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-25T01:24:00.932936" elapsed="0.000038"/>
</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-25T01:24:00.933304" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:00.933065" elapsed="0.000296"/>
</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-25T01:24:00.933529" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:00.933387" elapsed="0.000196"/>
</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-25T01:24:00.933749" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:00.933607" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:00.933043" elapsed="0.000780"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:00.932766" elapsed="0.001082"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:00.932580" elapsed="0.001294"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:00.933915" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:24:00.934131" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:00.934177" 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-25T01:24:00.928511" elapsed="0.005689"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:00.934650" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:00.934728" 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-25T01:24:00.934374" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:00.935337" 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-25T01:24:00.935053" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:00.934821" elapsed="0.000658">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:00.934802" elapsed="0.000708">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-25T01:24:00.935669" elapsed="0.000023"/>
</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-25T01:24:00.935846" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:00.935912" elapsed="0.000015"/>
</return>
<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>
<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-25T01:24:00.925652" elapsed="0.010380">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:00.925408" elapsed="0.010695">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:00.925257" elapsed="0.010902">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:00.924818" elapsed="0.011430">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:00.936492" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:00.897720" elapsed="0.038889">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:02.965008" elapsed="0.000263"/>
</kw>
<msg time="2026-04-25T01:24:02.965361" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:02.964251" elapsed="0.001189"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:02.963683" elapsed="0.001844"/>
</kw>
<msg time="2026-04-25T01:24:02.965575" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:02.954064" elapsed="0.011557"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:02.953531" elapsed="0.012166"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:02.966415" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:02.965951" elapsed="0.000514"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:02.972402" 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-25T01:24:02.971912" elapsed="0.000528"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:02.972940" 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-25T01:24:02.972627" elapsed="0.000358"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:02.973054" elapsed="0.000049"/>
</return>
<msg time="2026-04-25T01:24:02.973255" 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-25T01:24:02.971491" elapsed="0.001791"/>
</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-25T01:24:02.973458" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:02.974305" level="INFO">${ds_type} = operational</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-25T01:24:02.973876" elapsed="0.000457"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:02.974749" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:02.974499" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:02.975208" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:02.974941" elapsed="0.000293"/>
</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-25T01:24:02.975729" elapsed="0.000034"/>
</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-25T01:24:02.976053" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:02.975864" elapsed="0.000250"/>
</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-25T01:24:02.976286" elapsed="0.002013"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:02.976141" elapsed="0.002214"/>
</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-25T01:24:02.978561" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:02.978383" elapsed="0.000234"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:02.975842" elapsed="0.002799"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:02.975522" elapsed="0.003146"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:02.975282" elapsed="0.003414"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:02.978741" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:24:02.979004" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:02.979052" 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-25T01:24:02.970668" elapsed="0.008407"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:02.979638" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:02.979721" 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-25T01:24:02.979253" elapsed="0.000492"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:02.980427" 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-25T01:24:02.980086" elapsed="0.000421">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:02.979822" elapsed="0.000758">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:02.979801" elapsed="0.000811">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-25T01:24:02.980770" elapsed="0.000022"/>
</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-25T01:24:02.981022" elapsed="0.000033"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:02.981123" elapsed="0.000024"/>
</return>
<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>
<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-25T01:24:02.967751" elapsed="0.013497">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:02.967481" elapsed="0.013930">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:02.967260" elapsed="0.014215">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:02.966730" elapsed="0.014837">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:02.981829" elapsed="0.000031"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:02.938559" elapsed="0.043425">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:05.010887" elapsed="0.000277"/>
</kw>
<msg time="2026-04-25T01:24:05.011234" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:05.010095" elapsed="0.001205"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:05.009489" elapsed="0.001921"/>
</kw>
<msg time="2026-04-25T01:24:05.011482" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:04.999834" elapsed="0.011717"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:04.999192" elapsed="0.012473"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:05.012223" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:05.011923" elapsed="0.000349"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:05.071132" 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-25T01:24:05.070642" elapsed="0.000524"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:05.071640" 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-25T01:24:05.071340" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:05.071715" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:24:05.071890" 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-25T01:24:05.070226" elapsed="0.001689"/>
</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-25T01:24:05.072093" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:05.072783" level="INFO">${ds_type} = operational</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-25T01:24:05.072430" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:05.073237" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:05.072987" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:05.073705" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:05.073414" elapsed="0.000316"/>
</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-25T01:24:05.074211" elapsed="0.000026"/>
</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-25T01:24:05.074479" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:05.074326" elapsed="0.000209"/>
</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-25T01:24:05.074706" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:05.074563" elapsed="0.000196"/>
</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-25T01:24:05.074931" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:05.074784" elapsed="0.000303"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:05.074305" elapsed="0.000808"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:05.074017" elapsed="0.001121"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:05.073786" elapsed="0.001379"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:05.075209" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:24:05.075429" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:05.075475" 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-25T01:24:05.069369" elapsed="0.006130"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:05.075996" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:05.076078" 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-25T01:24:05.075678" elapsed="0.000424"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:05.076702" 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-25T01:24:05.076407" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:05.076175" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:05.076155" elapsed="0.000725">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-25T01:24:05.077056" elapsed="0.000022"/>
</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-25T01:24:05.077235" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:05.077303" elapsed="0.000017"/>
</return>
<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>
<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-25T01:24:05.013425" elapsed="0.063990">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:05.013174" elapsed="0.064313">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:05.012989" elapsed="0.064574">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:05.012522" elapsed="0.065136">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:05.077919" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:04.983070" elapsed="0.094987">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:07.106299" elapsed="0.000255"/>
</kw>
<msg time="2026-04-25T01:24:07.106625" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:07.105568" elapsed="0.001124"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:07.105028" elapsed="0.001745"/>
</kw>
<msg time="2026-04-25T01:24:07.106821" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:07.096298" elapsed="0.010569"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:07.095754" elapsed="0.011189"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:07.107469" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:07.107174" elapsed="0.000342"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:07.112823" 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-25T01:24:07.112418" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:07.113433" 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-25T01:24:07.113130" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:07.113511" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:24:07.113678" 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-25T01:24:07.112030" elapsed="0.001672"/>
</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-25T01:24:07.113862" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:07.114550" level="INFO">${ds_type} = operational</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-25T01:24:07.114208" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:07.114999" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:07.114738" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:07.115451" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:07.115180" elapsed="0.000297"/>
</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-25T01:24:07.115888" elapsed="0.000025"/>
</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-25T01:24:07.116356" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:07.116020" elapsed="0.000395"/>
</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-25T01:24:07.116589" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:07.116443" elapsed="0.000202"/>
</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-25T01:24:07.116814" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:07.116669" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:07.115997" elapsed="0.000893"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:07.115716" elapsed="0.001199"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:07.115526" elapsed="0.001416"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:07.117008" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:24:07.117215" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:07.117260" 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-25T01:24:07.111271" elapsed="0.006012"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:07.117744" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:07.117822" 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-25T01:24:07.117457" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:07.118764" 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-25T01:24:07.118387" elapsed="0.000456">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:07.117917" elapsed="0.000999">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:07.117898" elapsed="0.001052">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-25T01:24:07.119130" elapsed="0.000037"/>
</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-25T01:24:07.119342" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:07.119410" elapsed="0.000016"/>
</return>
<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>
<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-25T01:24:07.108596" elapsed="0.010925">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:07.108351" elapsed="0.011241">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:07.108200" elapsed="0.011450">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:07.107771" elapsed="0.011971">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:07.120013" elapsed="0.000096"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:07.079034" elapsed="0.041176">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:09.148725" elapsed="0.000308"/>
</kw>
<msg time="2026-04-25T01:24:09.149112" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:09.148038" elapsed="0.001140"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:09.147507" elapsed="0.001754"/>
</kw>
<msg time="2026-04-25T01:24:09.149309" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:09.138621" elapsed="0.010766"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:09.138185" elapsed="0.011288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:09.150005" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:09.149685" elapsed="0.000383"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:09.155874" 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-25T01:24:09.155461" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:09.156450" 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-25T01:24:09.156141" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:09.156528" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:24:09.156692" 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-25T01:24:09.154863" elapsed="0.001855"/>
</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-25T01:24:09.156954" elapsed="0.000210"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:09.157679" level="INFO">${ds_type} = operational</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-25T01:24:09.157334" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:09.158147" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:09.157867" elapsed="0.000308"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:09.158578" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:09.158334" elapsed="0.000270"/>
</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-25T01:24:09.159027" elapsed="0.000026"/>
</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-25T01:24:09.159306" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:09.159151" elapsed="0.000210"/>
</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-25T01:24:09.159530" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:09.159387" elapsed="0.000196"/>
</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-25T01:24:09.159770" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:09.159606" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:09.159130" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:09.158839" elapsed="0.001031"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:09.158652" elapsed="0.001244"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:09.159935" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:24:09.160171" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:09.160218" 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-25T01:24:09.154124" elapsed="0.006118"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:09.160764" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:09.160873" 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-25T01:24:09.160486" elapsed="0.000414"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:09.161513" 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-25T01:24:09.161227" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:09.160986" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:09.160952" elapsed="0.000736">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-25T01:24:09.161843" elapsed="0.000022"/>
</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-25T01:24:09.162033" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:09.162103" elapsed="0.000017"/>
</return>
<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>
<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-25T01:24:09.151222" elapsed="0.010999">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:09.150927" elapsed="0.011366">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:09.150748" elapsed="0.011600">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:09.150312" elapsed="0.012125">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:09.162676" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:09.121293" elapsed="0.041502">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:11.193158" elapsed="0.000246"/>
</kw>
<msg time="2026-04-25T01:24:11.193472" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:11.192476" elapsed="0.001058"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:11.191992" elapsed="0.001624"/>
</kw>
<msg time="2026-04-25T01:24:11.193664" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:11.183318" elapsed="0.010391"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:11.182765" elapsed="0.011020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:11.194288" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:11.194000" elapsed="0.000335"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:11.199594" 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-25T01:24:11.199199" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:11.200091" 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-25T01:24:11.199784" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:11.200166" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:24:11.200324" 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-25T01:24:11.198805" elapsed="0.001543"/>
</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-25T01:24:11.200599" elapsed="0.000163"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:11.201290" level="INFO">${ds_type} = operational</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-25T01:24:11.200930" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:11.201727" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:11.201481" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:11.202165" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:11.201906" elapsed="0.000286"/>
</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-25T01:24:11.202620" elapsed="0.000025"/>
</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-25T01:24:11.202881" elapsed="0.000212"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:11.202732" elapsed="0.000401"/>
</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-25T01:24:11.203311" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:11.203159" elapsed="0.000209"/>
</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-25T01:24:11.203539" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:11.203392" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:11.202712" elapsed="0.000903"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:11.202449" elapsed="0.001191"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:11.202262" elapsed="0.001404"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:11.203705" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:24:11.203908" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:11.203955" 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-25T01:24:11.198069" elapsed="0.005925"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:11.204450" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:11.204563" 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-25T01:24:11.204170" elapsed="0.000424"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:11.205217" 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-25T01:24:11.204911" elapsed="0.000380">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:11.204679" elapsed="0.000680">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:11.204655" elapsed="0.000736">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-25T01:24:11.205546" elapsed="0.000022"/>
</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-25T01:24:11.205722" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:11.205788" elapsed="0.000015"/>
</return>
<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>
<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-25T01:24:11.195397" elapsed="0.010497">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:11.195160" elapsed="0.010818">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:11.195010" elapsed="0.011026">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:11.194569" elapsed="0.011555">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:11.206397" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:11.163682" elapsed="0.042839">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:13.235915" elapsed="0.000560"/>
</kw>
<msg time="2026-04-25T01:24:13.236541" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:13.235166" elapsed="0.001441"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:13.234559" elapsed="0.002131"/>
</kw>
<msg time="2026-04-25T01:24:13.236738" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:13.225912" elapsed="0.010881"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:13.225377" elapsed="0.011497"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:13.237422" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:13.237148" elapsed="0.000321"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:13.243185" 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-25T01:24:13.242737" elapsed="0.000478"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:13.243718" 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-25T01:24:13.243384" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:13.243793" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:24:13.243958" 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-25T01:24:13.242342" elapsed="0.001657"/>
</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-25T01:24:13.244159" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:13.244843" level="INFO">${ds_type} = operational</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-25T01:24:13.244504" elapsed="0.000366"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:13.245290" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:13.245046" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:13.245712" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:13.245467" elapsed="0.000271"/>
</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-25T01:24:13.246177" elapsed="0.000025"/>
</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-25T01:24:13.246440" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:13.246290" elapsed="0.000206"/>
</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-25T01:24:13.246663" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:13.246521" elapsed="0.000196"/>
</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-25T01:24:13.246885" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:13.246741" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:13.246268" elapsed="0.000692"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:13.245998" elapsed="0.001001"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:13.245790" elapsed="0.001235"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:13.247066" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:24:13.247273" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:13.247320" 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-25T01:24:13.241588" elapsed="0.005756"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:13.247822" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:13.247901" 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-25T01:24:13.247539" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:13.248604" 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-25T01:24:13.248317" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:13.248092" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:13.248071" elapsed="0.000707">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-25T01:24:13.248935" elapsed="0.000022"/>
</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-25T01:24:13.249130" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:13.249201" elapsed="0.000016"/>
</return>
<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>
<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-25T01:24:13.238586" elapsed="0.010722">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:13.238319" elapsed="0.011061">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:13.238171" elapsed="0.011265">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:13.237719" elapsed="0.011853">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:13.249870" elapsed="0.000029"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:13.207357" elapsed="0.042658">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:15.280112" elapsed="0.000237"/>
</kw>
<msg time="2026-04-25T01:24:15.280413" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:15.279419" elapsed="0.001056"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:15.278919" elapsed="0.001670"/>
</kw>
<msg time="2026-04-25T01:24:15.280664" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:15.270287" elapsed="0.010441"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:15.269806" elapsed="0.011009"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:15.281314" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:15.281045" elapsed="0.000324"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:15.287057" 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-25T01:24:15.286529" elapsed="0.000566"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:15.287579" 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-25T01:24:15.287274" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:15.287655" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:24:15.287819" 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-25T01:24:15.286067" elapsed="0.001778"/>
</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-25T01:24:15.288029" elapsed="0.000190"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:15.288828" level="INFO">${ds_type} = operational</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-25T01:24:15.288421" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:15.289287" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:15.289037" elapsed="0.000277"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:15.289796" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:15.289544" elapsed="0.000278"/>
</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-25T01:24:15.290291" elapsed="0.000027"/>
</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-25T01:24:15.290575" elapsed="0.000205"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:15.290419" elapsed="0.000419"/>
</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-25T01:24:15.291085" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:15.290866" elapsed="0.000300"/>
</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-25T01:24:15.291385" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:15.291201" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:15.290392" elapsed="0.001075"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:15.290076" elapsed="0.001416"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:15.289871" elapsed="0.001646"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:15.291560" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:24:15.291768" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:15.291815" 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-25T01:24:15.285284" elapsed="0.006555"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:15.292402" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:15.292509" 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-25T01:24:15.292042" elapsed="0.000494"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:15.293196" 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-25T01:24:15.292840" elapsed="0.000433">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:15.292612" elapsed="0.000732">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:15.292592" elapsed="0.000786">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-25T01:24:15.293571" elapsed="0.000025"/>
</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-25T01:24:15.293804" elapsed="0.000033"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:15.293896" elapsed="0.000018"/>
</return>
<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>
<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-25T01:24:15.282537" elapsed="0.011492">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:15.282273" elapsed="0.011830">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:15.282106" elapsed="0.012054">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:15.281675" elapsed="0.012574">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:15.294498" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:15.250848" elapsed="0.043769">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:17.326178" elapsed="0.000280"/>
</kw>
<msg time="2026-04-25T01:24:17.326528" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:17.325202" elapsed="0.001391"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:17.324531" elapsed="0.002142"/>
</kw>
<msg time="2026-04-25T01:24:17.326811" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:17.315315" elapsed="0.011543"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:17.314868" elapsed="0.012067"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:17.327414" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:17.327149" elapsed="0.000311"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:17.332875" 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-25T01:24:17.332483" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:17.333369" 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-25T01:24:17.333081" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:17.333481" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:24:17.333645" 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-25T01:24:17.332102" elapsed="0.001567"/>
</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-25T01:24:17.333825" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:17.334501" level="INFO">${ds_type} = operational</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-25T01:24:17.334159" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:17.334925" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:17.334687" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:17.335357" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:17.335117" elapsed="0.000266"/>
</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-25T01:24:17.335780" 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-25T01:24:17.336053" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:17.335889" elapsed="0.000221"/>
</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-25T01:24:17.336275" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:17.336134" elapsed="0.000194"/>
</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-25T01:24:17.336491" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:17.336351" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:17.335869" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:17.335611" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:17.335429" elapsed="0.001184"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:17.336651" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:24:17.336851" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:17.336897" 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-25T01:24:17.331356" elapsed="0.005564"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:17.337469" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:17.337552" 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-25T01:24:17.337107" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:17.338170" 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-25T01:24:17.337871" elapsed="0.000373">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:17.337648" elapsed="0.000663">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:17.337629" elapsed="0.000714">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-25T01:24:17.338496" 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-25T01:24:17.338716" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:17.338783" elapsed="0.000016"/>
</return>
<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>
<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-25T01:24:17.328494" elapsed="0.010397">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:17.328256" elapsed="0.010718">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:17.328114" elapsed="0.010919">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:17.327697" elapsed="0.011425">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:17.339364" elapsed="0.000024"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:17.295599" elapsed="0.043881">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:19.373095" elapsed="0.000352"/>
</kw>
<msg time="2026-04-25T01:24:19.373537" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:19.372009" elapsed="0.001619"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:19.371117" elapsed="0.002635"/>
</kw>
<msg time="2026-04-25T01:24:19.373823" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:19.358004" elapsed="0.015890"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:19.357208" elapsed="0.016866"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:19.374825" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:19.374437" elapsed="0.000458"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:19.382944" 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-25T01:24:19.382248" elapsed="0.000762"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:19.383714" 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-25T01:24:19.383265" elapsed="0.000488"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:19.383826" elapsed="0.000055"/>
</return>
<msg time="2026-04-25T01:24:19.384093" 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-25T01:24:19.381626" elapsed="0.002505"/>
</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-25T01:24:19.384373" elapsed="0.000246"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:19.385400" level="INFO">${ds_type} = operational</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-25T01:24:19.384869" elapsed="0.000569"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:19.386053" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:19.385670" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:19.386695" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:19.386338" elapsed="0.000395"/>
</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-25T01:24:19.387402" elapsed="0.000038"/>
</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-25T01:24:19.387911" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:19.387569" elapsed="0.000448"/>
</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-25T01:24:19.388596" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:19.388058" elapsed="0.000625"/>
</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-25T01:24:19.388943" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:19.388722" elapsed="0.000324"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:19.387538" elapsed="0.001546"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:19.387126" elapsed="0.001999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:19.386810" elapsed="0.002358"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:19.389231" elapsed="0.000050"/>
</return>
<msg time="2026-04-25T01:24:19.389543" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:19.389611" 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-25T01:24:19.380522" elapsed="0.009126"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:19.390422" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:19.390541" 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-25T01:24:19.389912" elapsed="0.000665"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:19.391475" 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-25T01:24:19.391047" elapsed="0.000536">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:19.390685" elapsed="0.001001">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:19.390656" elapsed="0.001080">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-25T01:24:19.391999" elapsed="0.000034"/>
</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-25T01:24:19.392269" elapsed="0.000032"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:19.392370" elapsed="0.000026"/>
</return>
<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>
<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-25T01:24:19.376461" elapsed="0.016077">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:19.376105" elapsed="0.016543">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:19.375877" elapsed="0.016861">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:19.375281" elapsed="0.017601">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:19.393294" elapsed="0.000039"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:19.340255" elapsed="0.053221">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:21.424391" elapsed="0.000240"/>
</kw>
<msg time="2026-04-25T01:24:21.424698" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:21.423715" elapsed="0.001046"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:21.423240" elapsed="0.001602"/>
</kw>
<msg time="2026-04-25T01:24:21.424889" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:21.413115" elapsed="0.011817"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:21.412487" elapsed="0.012536"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:21.425585" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:21.425226" elapsed="0.000407"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:21.432522" 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-25T01:24:21.432125" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:21.433024" 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-25T01:24:21.432714" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:21.433100" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:24:21.433259" 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-25T01:24:21.431726" elapsed="0.001558"/>
</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-25T01:24:21.433441" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:21.434119" level="INFO">${ds_type} = operational</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-25T01:24:21.433763" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:21.434555" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:21.434309" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:21.435002" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:21.434733" elapsed="0.000297"/>
</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-25T01:24:21.435436" 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-25T01:24:21.435694" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:21.435546" elapsed="0.000204"/>
</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-25T01:24:21.435917" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:21.435774" elapsed="0.000212"/>
</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-25T01:24:21.436156" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:21.436011" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:21.435526" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:21.435264" elapsed="0.000991"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:21.435078" elapsed="0.001203"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:21.436320" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:24:21.436520" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:21.436567" 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-25T01:24:21.430952" elapsed="0.005639"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:21.437050" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:21.437128" 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-25T01:24:21.436764" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:21.437715" 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-25T01:24:21.437440" elapsed="0.000347">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:21.437223" elapsed="0.000629">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:21.437204" elapsed="0.000680">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-25T01:24:21.438052" elapsed="0.000022"/>
</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-25T01:24:21.438228" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:21.438293" elapsed="0.000015"/>
</return>
<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>
<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-25T01:24:21.426671" elapsed="0.011726">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:21.426429" elapsed="0.012079">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:21.426285" elapsed="0.012278">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:21.425868" elapsed="0.012782">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:21.438887" elapsed="0.000025"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:21.394397" elapsed="0.044647">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:23.466320" elapsed="0.000244"/>
</kw>
<msg time="2026-04-25T01:24:23.466648" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:23.465640" elapsed="0.001072"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:23.465162" elapsed="0.001631"/>
</kw>
<msg time="2026-04-25T01:24:23.466840" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:23.456369" elapsed="0.010515"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:23.455882" elapsed="0.011077"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:23.467440" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:23.467178" elapsed="0.000309"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:23.472745" 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-25T01:24:23.472350" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:23.473250" 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-25T01:24:23.472938" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:23.473325" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:24:23.473484" 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-25T01:24:23.471951" elapsed="0.001558"/>
</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-25T01:24:23.473667" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:23.474344" level="INFO">${ds_type} = operational</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-25T01:24:23.474001" elapsed="0.000370"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:23.474776" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:23.474532" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:23.475208" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:23.474953" elapsed="0.000280"/>
</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-25T01:24:23.475648" elapsed="0.000025"/>
</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-25T01:24:23.475907" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:23.475759" elapsed="0.000217"/>
</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-25T01:24:23.476146" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:23.476002" elapsed="0.000197"/>
</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-25T01:24:23.476363" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:23.476221" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:23.475740" elapsed="0.000776"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:23.475463" elapsed="0.001078"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:23.475280" elapsed="0.001286"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:23.476606" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:24:23.476807" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:23.476853" 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-25T01:24:23.471198" elapsed="0.005678"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:23.477341" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:23.477420" 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-25T01:24:23.477064" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:23.478251" 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-25T01:24:23.477928" elapsed="0.000396">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:23.477698" elapsed="0.000694">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:23.477496" elapsed="0.000930">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-25T01:24:23.478584" elapsed="0.000022"/>
</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-25T01:24:23.478761" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:23.478828" elapsed="0.000016"/>
</return>
<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>
<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-25T01:24:23.468543" elapsed="0.010394">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:23.468302" elapsed="0.010781">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:23.468160" elapsed="0.010981">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:23.467737" elapsed="0.011496">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:23.479478" elapsed="0.000027"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:23.439876" elapsed="0.039725">No leader found.</status>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:24:25.506864" elapsed="0.000268"/>
</kw>
<msg time="2026-04-25T01:24:25.507204" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:25.506185" elapsed="0.001088"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:25.505661" elapsed="0.001694"/>
</kw>
<msg time="2026-04-25T01:24:25.507403" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:24:25.496918" elapsed="0.010530"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:24:25.496484" elapsed="0.011038"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.508012" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:24:25.507734" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:24:25.513581" 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-25T01:24:25.513179" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.514184" 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-25T01:24:25.513863" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:25.514269" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:24:25.514436" 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-25T01:24:25.512754" elapsed="0.001708"/>
</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-25T01:24:25.514631" elapsed="0.000162"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.515338" level="INFO">${ds_type} = operational</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-25T01:24:25.514981" elapsed="0.000384"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.515782" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:25.515531" elapsed="0.000278"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.516268" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:24:25.515980" elapsed="0.000316"/>
</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-25T01:24:25.516710" elapsed="0.000025"/>
</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-25T01:24:25.516991" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:25.516825" elapsed="0.000224"/>
</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-25T01:24:25.517221" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:25.517074" elapsed="0.000202"/>
</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-25T01:24:25.517448" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:25.517301" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:25.516804" elapsed="0.000720"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:25.516534" elapsed="0.001014"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:25.516345" elapsed="0.001229"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:24:25.517617" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:24:25.517828" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:24:25.517876" 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-25T01:24:25.511996" elapsed="0.005905"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.518381" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:24:25.518460" 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-25T01:24:25.518099" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.519081" 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-25T01:24:25.518779" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:24:25.518556" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:24:25.518537" elapsed="0.000722">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-25T01:24:25.519415" elapsed="0.000023"/>
</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-25T01:24:25.519593" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:25.519660" elapsed="0.000016"/>
</return>
<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>
<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-25T01:24:25.509151" elapsed="0.010624">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:24:25.508885" elapsed="0.010968">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:24:25.508738" elapsed="0.011173">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:24:25.508331" elapsed="0.011687">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:24:25.520279" elapsed="0.000063"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:24:25.480675" elapsed="0.039768">No leader found.</status>
</kw>
<msg time="2026-04-25T01:24:25.520528" level="FAIL">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 5 minutes 50 seconds. The last error was: No leader found.</msg>
<arg>${restart_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Check OpenFlow Shards Status</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:18:34.020465" elapsed="351.500168">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 5 minutes 50 seconds. The last error was: No leader found.</status>
</kw>
<doc>Wait for node convergence and check status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:18:34.007796" elapsed="351.513002">Keyword 'ClusterOpenFlow.Check OpenFlow Shards Status' failed after retrying for 5 minutes 50 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s2-t26" name="Verify Data Recovery After Follower Restart" line="220">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:24:25.524495" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:24:25.524191" elapsed="0.000590"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:24:25.525825" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:24:25.525696" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-25T01:24:25.525675" elapsed="0.000224"/>
</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-25T01:24:25.530933" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:24:25.530823" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T01:24:25.530806" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.532142" 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-25T01:24:25.531641" elapsed="0.000531"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:24:25.532685" 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-25T01:24:25.532384" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:24:25.532762" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:24:25.532926" 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-25T01:24:25.531254" elapsed="0.001697"/>
</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-25T01:24:25.533333" elapsed="0.000023"/>
</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-25T01:24:25.533589" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:24:25.533434" elapsed="0.000214"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:24:25.533417" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:24:25.533184" elapsed="0.000515"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:24:25.533024" elapsed="0.000701"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:24:25.530458" elapsed="0.003324"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:24:25.525398" elapsed="0.008447"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:24:25.524938" elapsed="0.008959"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:24:25.521847" elapsed="0.012109"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:25.547161" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:25.542872" elapsed="0.004329">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:27.566090" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:27.561723" elapsed="0.004421">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:29.586069" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:29.581467" elapsed="0.004665">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:31.605599" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:31.599601" elapsed="0.006097">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:33.625333" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:33.620145" elapsed="0.005240">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:35.646374" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:35.641889" elapsed="0.004539">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:37.664736" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:37.660266" elapsed="0.004531">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:39.683693" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:39.679387" elapsed="0.004367">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:41.701776" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:41.697500" elapsed="0.004326">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:43.720436" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:43.716089" elapsed="0.004402">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:45.735278" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:45.730874" elapsed="0.004460">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:47.754456" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:47.750107" elapsed="0.004402">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:49.773320" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:49.768479" elapsed="0.004916">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:51.792635" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:51.786424" elapsed="0.006299">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:53.810381" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:53.806048" elapsed="0.004398">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:55.828562" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:55.824209" elapsed="0.004409">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:57.846541" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:57.842145" elapsed="0.004454">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:24:59.864239" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:24:59.859773" elapsed="0.004520">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:01.882326" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:01.877071" elapsed="0.005337">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:03.900343" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:03.894429" elapsed="0.005981">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:05.920394" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:05.916054" elapsed="0.004401">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:07.938045" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:07.933727" elapsed="0.004369">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:09.957032" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:09.952713" elapsed="0.004373">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:11.976140" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:11.971697" elapsed="0.004502">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:13.994691" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:13.990353" elapsed="0.004395">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:16.015361" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:16.010406" elapsed="0.005019">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:18.034729" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:18.030359" elapsed="0.004425">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:20.054397" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:20.049804" elapsed="0.004651">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:22.074685" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:22.069859" elapsed="0.004881">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:24.094075" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:24.089685" elapsed="0.004453">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:26.112006" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:26.107691" elapsed="0.004370">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:28.131224" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:28.126113" elapsed="0.005166">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:30.152362" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:30.146715" elapsed="0.005703">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:32.171718" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:32.167335" elapsed="0.004439">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:34.189402" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:34.184719" elapsed="0.004744">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:36.211273" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:36.206519" elapsed="0.004815">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:38.229733" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:38.225358" elapsed="0.004439">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:40.247861" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:40.243558" elapsed="0.004357">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:42.266983" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:42.262613" elapsed="0.004428">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:44.285126" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:44.280767" elapsed="0.004414">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:46.305679" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:46.300195" elapsed="0.005557">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:48.326730" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:48.322265" elapsed="0.004522">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:50.345336" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:50.340956" elapsed="0.004435">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:52.366729" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:52.362399" elapsed="0.004383">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:54.386161" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:54.381708" elapsed="0.004512">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:56.405094" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:56.400634" elapsed="0.004515">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:25:58.422684" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:25:58.418356" elapsed="0.004384">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:00.441160" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:00.436820" elapsed="0.004399">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:02.457921" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:02.453503" elapsed="0.004493">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:04.477203" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:04.472780" elapsed="0.004481">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:06.494614" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.490087" elapsed="0.004583">Variable '${temp_json_config_get}' not found.</status>
</kw>
<msg time="2026-04-25T01:26:06.494789" level="FAIL">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${temp_json_config_get}' not found.</msg>
<arg>${operation_timeout}</arg>
<arg>2s</arg>
<arg>BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster</arg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:24:25.534211" elapsed="100.960731">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>10000 Flows preserved in all controller instances.</doc>
<status status="FAIL" start="2026-04-25T01:24:25.521284" elapsed="100.973871">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 1 minute 40 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s2-t27" name="Verify Flows In Switch After Follower Restart" line="231">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:06.498809" elapsed="0.000292"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:06.498524" elapsed="0.000636"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:06.500255" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.500114" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.500089" elapsed="0.000242"/>
</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-25T01:26:06.505633" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.505508" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.505489" elapsed="0.000222"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.506864" 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-25T01:26:06.506407" elapsed="0.000490"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.507378" 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-25T01:26:06.507079" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.507451" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:26:06.507613" 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-25T01:26:06.506016" elapsed="0.001622"/>
</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-25T01:26:06.508020" 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-25T01:26:06.508269" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.508120" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.508104" elapsed="0.000243"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.507857" elapsed="0.000514"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.507695" elapsed="0.000702"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:06.505136" elapsed="0.003315"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:06.499786" elapsed="0.008837"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:06.499322" elapsed="0.009374"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:06.496219" elapsed="0.012537"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:26:06.513555" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:26:06.509134" elapsed="0.004463">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch after cluster restart.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.495578" elapsed="0.018168">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s2-t28" name="Stop Mininet Connected To Follower Node" line="238">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:06.517090" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:06.516793" elapsed="0.000575"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:06.518386" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.518269" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.518249" elapsed="0.000208"/>
</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-25T01:26:06.523541" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.523432" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.523414" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.524627" 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-25T01:26:06.524235" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.525169" 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-25T01:26:06.524860" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.525250" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:26:06.525413" 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-25T01:26:06.523839" elapsed="0.001598"/>
</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-25T01:26:06.525868" elapsed="0.000027"/>
</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-25T01:26:06.526186" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.526008" elapsed="0.000233"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.525987" elapsed="0.000278"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.525678" elapsed="0.000611"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.525495" elapsed="0.000818"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:06.523067" elapsed="0.003301"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:06.517956" elapsed="0.008468"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:06.517523" elapsed="0.008946"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:06.514586" elapsed="0.011935"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:26:06.535082" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:26:06.530754" elapsed="0.004369">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:26:06.535344" elapsed="0.000025"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.514069" elapsed="0.021420">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s2-t29" name="Delete All Flows From Follower Node" line="243">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:06.538869" elapsed="0.000236"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:06.538601" elapsed="0.000560"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:06.540172" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.540059" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.540040" elapsed="0.000253"/>
</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-25T01:26:06.545428" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.545310" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.545286" elapsed="0.000212"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.546521" 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-25T01:26:06.546133" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.547023" 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-25T01:26:06.546713" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.547096" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:26:06.547253" 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-25T01:26:06.545730" elapsed="0.001548"/>
</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-25T01:26:06.547628" 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-25T01:26:06.547909" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.547729" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.547711" elapsed="0.000306"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.547483" elapsed="0.000558"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.547331" elapsed="0.000735"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:06.544908" elapsed="0.003213"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:06.539749" elapsed="0.008427"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:06.539313" elapsed="0.008909"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:06.536407" elapsed="0.011868"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:06.557264" level="FAIL">Variable '${temp_json_config_del}' not found.</msg>
<arg>${temp_json_config_del}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.552926" elapsed="0.004380">Variable '${temp_json_config_del}' not found.</status>
</kw>
<doc>10000 Flows deleted via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.535819" elapsed="0.021661">Variable '${temp_json_config_del}' not found.</status>
</test>
<test id="s1-s2-t30" name="Verify No Flows In Leader Node After Follower Restart" line="250">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:06.560870" elapsed="0.000254"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:06.560550" elapsed="0.000645"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:06.562312" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.562196" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.562177" elapsed="0.000204"/>
</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-25T01:26:06.567409" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.567301" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.567284" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.568485" 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-25T01:26:06.568101" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.569018" 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-25T01:26:06.568685" elapsed="0.000361"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.569093" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:26:06.569250" 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-25T01:26:06.567705" elapsed="0.001570"/>
</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-25T01:26:06.569621" elapsed="0.000068"/>
</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-25T01:26:06.569920" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.569770" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.569753" elapsed="0.000263"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.569478" elapsed="0.000562"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.569328" elapsed="0.000742"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:06.566921" elapsed="0.003216"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:06.561887" elapsed="0.008308"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:06.561396" elapsed="0.008845"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:06.558376" elapsed="0.011917"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:06.583158" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_del}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.578766" elapsed="0.004433">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Verify flow count is 0 across cluster nodes.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.557840" elapsed="0.025504">Variable '${temp_json_config_get}' not found.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-25T01:26:06.584132" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-25T01:26:06.584040" elapsed="0.000145"/>
</kw>
<doc>Test suite for 2Node Cluster HA with Bulk Flows - Cluster node convergance and Data consistency after leader and follower restart with one switch connected</doc>
<status status="FAIL" start="2026-04-25T01:07:20.134410" elapsed="1126.449809"/>
</suite>
<suite id="s1-s3" name="Cluster HA Data Recovery BulkFlow Single Switch" source="/w/workspace/openflowplugin-csit-3node-clustering-bulkomatic-only-vanadium/test/csit/suites/openflowplugin/Clustering_Bulkomatic/030__Cluster_HA_Data_Recovery_BulkFlow_Single_Switch.robot">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils" type="SETUP">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.669473" 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-25T01:26:06.665086" elapsed="0.004444"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T01:26:06.664838" elapsed="0.004767"/>
</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-25T01:26:06.674772" 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-25T01:26:06.670783" elapsed="0.004018"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T01:26:06.675033" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.674891" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.674865" elapsed="0.000237"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.675755" 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-25T01:26:06.675404" elapsed="0.000395"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.676298" 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-25T01:26:06.675984" elapsed="0.000340"/>
</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-25T01:26:06.676906" elapsed="0.000315"/>
</kw>
<msg time="2026-04-25T01:26:06.677334" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T01:26:06.677383" 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-25T01:26:06.676523" elapsed="0.000892"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.677968" 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-25T01:26:06.677591" elapsed="0.000447"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.679042" 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-25T01:26:06.678760" elapsed="0.000310"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.679479" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:06.679221" elapsed="0.000284"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.679988" 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-25T01:26:06.679672" elapsed="0.000345"/>
</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-25T01:26:06.682576" elapsed="0.000097"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.682381" elapsed="0.000345"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.680074" elapsed="0.002680"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.683330" 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-25T01:26:06.682919" elapsed="0.000455"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.683925" 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-25T01:26:06.683542" elapsed="0.000442"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.684523" 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-25T01:26:06.684151" elapsed="0.000416"/>
</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-25T01:26:06.678304" elapsed="0.006324"/>
</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-25T01:26:06.670394" elapsed="0.014294"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.684877" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.684758" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.684739" 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-25T01:26:06.688247" 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-25T01:26:06.687836" elapsed="0.000439"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.688730" 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-25T01:26:06.688439" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.688800" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:26:06.688966" 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-25T01:26:06.687501" elapsed="0.001505"/>
</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-25T01:26:06.689395" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.689172" elapsed="0.000285"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.689059" elapsed="0.000424"/>
</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-25T01:26:06.685188" elapsed="0.004348"/>
</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-25T01:26:06.689690" 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-25T01:26:06.690222" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.690085" elapsed="0.000202"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.689951" elapsed="0.000361"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T01:26:06.669924" elapsed="0.020439"/>
</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-25T01:26:06.692958" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.692846" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.692829" elapsed="0.000215"/>
</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-25T01:26:06.697877" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.697770" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.697752" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.698908" 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-25T01:26:06.698524" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.699409" 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-25T01:26:06.699119" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.699546" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:26:06.699707" 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-25T01:26:06.698193" elapsed="0.001539"/>
</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-25T01:26:06.700096" elapsed="0.000023"/>
</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-25T01:26:06.700345" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.700197" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.700180" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.699935" elapsed="0.000511"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.699784" elapsed="0.000688"/>
</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-25T01:26:06.697478" elapsed="0.003048"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T01:26:06.690929" elapsed="0.009652"/>
</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-25T01:26:06.690513" elapsed="0.010111"/>
</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-25T01:26:06.664475" elapsed="0.036201"/>
</kw>
<test id="s1-s3-t1" name="Check Shards Status And Initialize Variables" line="30">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:06.704003" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:06.703720" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:06.705307" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.705192" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.705172" elapsed="0.000233"/>
</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-25T01:26:06.710477" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.710366" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.710348" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.711575" 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-25T01:26:06.711182" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.712073" 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-25T01:26:06.711766" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.712144" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:26:06.712301" 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-25T01:26:06.710779" elapsed="0.001546"/>
</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-25T01:26:06.712676" 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-25T01:26:06.712923" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.712775" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.712759" elapsed="0.000259"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.712533" elapsed="0.000508"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.712379" elapsed="0.000687"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:06.709990" elapsed="0.003129"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:06.704855" elapsed="0.008321"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:06.704427" elapsed="0.008794"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:06.701414" elapsed="0.011861"/>
</kw>
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:26:06.735650" elapsed="0.000248"/>
</kw>
<msg time="2026-04-25T01:26:06.735959" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:26:06.734988" elapsed="0.001047"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:26:06.734492" elapsed="0.001624"/>
</kw>
<msg time="2026-04-25T01:26:06.736164" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:26:06.725609" elapsed="0.010599"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:26:06.725113" elapsed="0.011171"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.736736" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:26:06.736479" elapsed="0.000302"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:26:06.742047" 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-25T01:26:06.741629" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.742523" 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-25T01:26:06.742237" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.742595" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:26:06.742755" 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-25T01:26:06.741232" elapsed="0.001548"/>
</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-25T01:26:06.742940" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.743618" level="INFO">${ds_type} = operational</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-25T01:26:06.743284" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.744054" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:06.743801" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.744462" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:06.744228" elapsed="0.000260"/>
</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-25T01:26:06.744891" elapsed="0.000025"/>
</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-25T01:26:06.745170" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.745020" elapsed="0.000206"/>
</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-25T01:26:06.745392" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.745250" elapsed="0.000196"/>
</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-25T01:26:06.745658" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.745469" elapsed="0.000243"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.744999" elapsed="0.000736"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.744717" elapsed="0.001041"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.744534" elapsed="0.001250"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:06.745824" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:26:06.746046" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:06.746092" 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-25T01:26:06.740496" elapsed="0.005619"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.746654" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:06.746733" 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-25T01:26:06.746373" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.747353" 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-25T01:26:06.747067" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:06.746828" elapsed="0.000666">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:06.746809" elapsed="0.000717">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-25T01:26:06.747682" elapsed="0.000022"/>
</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-25T01:26:06.747859" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.747928" elapsed="0.000015"/>
</return>
<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>
<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-25T01:26:06.737852" elapsed="0.010210">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:26:06.737618" elapsed="0.010517">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:26:06.737444" elapsed="0.010748">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.737045" elapsed="0.012551">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:06.749853" elapsed="0.000026"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.713596" elapsed="0.036390">No leader found.</status>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<var>${temp_json_config_add}</var>
<arg>${orig_json_config_add}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Add json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:06.750263" elapsed="0.000024"/>
</kw>
<kw name="Set DPN And Flow Count In Json Get" owner="BulkomaticKeywords">
<var>${temp_json_config_get}</var>
<arg>${orig_json_config_get}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Get json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:06.750538" elapsed="0.000023"/>
</kw>
<kw name="Set DPN And Flow Count In Json Del" owner="BulkomaticKeywords">
<var>${temp_json_config_del}</var>
<arg>${orig_json_config_del}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Del json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:06.750829" elapsed="0.000023"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_add}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:06.751079" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_get}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:06.751277" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_del}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:06.751470" elapsed="0.000020"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.700739" elapsed="0.050893">No leader found.</status>
</test>
<test id="s1-s3-t2" name="Get Inventory Follower Before Cluster Restart" line="49">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:06.755157" elapsed="0.000240"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:06.754871" elapsed="0.000584"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:06.756504" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.756373" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.756351" elapsed="0.000225"/>
</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-25T01:26:06.761580" elapsed="0.000052"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:06.761465" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:06.761446" elapsed="0.000243"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.762733" 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-25T01:26:06.762331" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.763242" 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-25T01:26:06.762928" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.763312" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:26:06.763474" 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-25T01:26:06.761931" elapsed="0.001644"/>
</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-25T01:26:06.763954" elapsed="0.000039"/>
</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-25T01:26:06.764221" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.764073" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.764056" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.763804" elapsed="0.000516"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.763636" elapsed="0.000711"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:06.761085" elapsed="0.003316"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:06.756073" elapsed="0.008384"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:06.755607" elapsed="0.008897"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:06.752623" elapsed="0.011935"/>
</kw>
<kw name="Get InventoryConfig Shard Status" owner="ClusterOpenFlow">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<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-25T01:26:06.771896" 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-25T01:26:06.771498" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.772404" 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-25T01:26:06.772110" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:06.772477" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:26:06.772638" 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-25T01:26:06.771116" elapsed="0.001546"/>
</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-25T01:26:06.772820" elapsed="0.000187"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.773501" 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-25T01:26:06.773170" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.773945" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:06.773706" elapsed="0.000279"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.774374" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:06.774138" elapsed="0.000262"/>
</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-25T01:26:06.774816" 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-25T01:26:06.775091" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.774924" elapsed="0.000369"/>
</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-25T01:26:06.775460" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.775318" elapsed="0.000196"/>
</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-25T01:26:06.775680" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:06.775538" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:06.774905" elapsed="0.000850"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:06.774644" elapsed="0.001135"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.774450" elapsed="0.001354"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:06.775843" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:06.776061" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:06.776107" 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-25T01:26:06.770371" elapsed="0.005759"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.776647" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:06.776725" 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-25T01:26:06.776366" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:06.777349" 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-25T01:26:06.777063" elapsed="0.000361">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:06.776819" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:06.776801" elapsed="0.000722">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-25T01:26:06.777716" elapsed="0.000023"/>
</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-25T01:26:06.777897" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:06.777965" elapsed="0.000034"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:06.767830" elapsed="0.010263">No leader found.</status>
</kw>
<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-25T01:26:07.788206" 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-25T01:26:07.787476" elapsed="0.000778"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:07.789118" 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-25T01:26:07.788556" elapsed="0.000606"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:07.789237" elapsed="0.000056"/>
</return>
<msg time="2026-04-25T01:26:07.789526" 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-25T01:26:07.786873" elapsed="0.002707"/>
</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-25T01:26:07.789864" elapsed="0.000337"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:07.791039" 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-25T01:26:07.790488" elapsed="0.000594"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:07.791696" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:07.791329" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:07.792354" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:07.791987" elapsed="0.000406"/>
</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-25T01:26:07.793041" elapsed="0.000037"/>
</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-25T01:26:07.793462" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:07.793206" elapsed="0.000345"/>
</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-25T01:26:07.793802" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:07.793588" elapsed="0.000289"/>
</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-25T01:26:07.794058" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:07.793900" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:07.793177" elapsed="0.000956"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:07.792757" elapsed="0.001401"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:07.792470" elapsed="0.001715"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:07.794227" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:26:07.794428" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:07.794474" 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-25T01:26:07.785711" elapsed="0.008786"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:07.795050" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:07.795132" 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-25T01:26:07.794746" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:07.795746" 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-25T01:26:07.795456" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:07.795229" elapsed="0.000661">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:07.795210" elapsed="0.000712">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-25T01:26:07.796100" elapsed="0.000023"/>
</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-25T01:26:07.796281" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:07.796350" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:07.779152" elapsed="0.017307">No leader found.</status>
</kw>
<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-25T01:26:08.805497" 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-25T01:26:08.804768" elapsed="0.000774"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:08.806266" 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-25T01:26:08.805802" elapsed="0.000503"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:08.806375" elapsed="0.000053"/>
</return>
<msg time="2026-04-25T01:26:08.806623" 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-25T01:26:08.804102" elapsed="0.002563"/>
</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-25T01:26:08.806895" elapsed="0.000271"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:08.808004" 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-25T01:26:08.807429" elapsed="0.000623"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:08.808837" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:08.808347" elapsed="0.000543"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:08.809668" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:08.809202" elapsed="0.000517"/>
</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-25T01:26:08.810231" elapsed="0.000026"/>
</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-25T01:26:08.810500" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:08.810347" elapsed="0.000209"/>
</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-25T01:26:08.810734" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:08.810581" elapsed="0.000209"/>
</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-25T01:26:08.810999" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:08.810815" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:08.810326" elapsed="0.000756"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:08.810051" elapsed="0.001056"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:08.809800" elapsed="0.001333"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:08.811175" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:08.811385" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:08.811433" 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-25T01:26:08.802929" elapsed="0.008528"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:08.811962" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:08.812059" 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-25T01:26:08.811664" elapsed="0.000497"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:08.812775" 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-25T01:26:08.812466" elapsed="0.000424">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:08.812238" elapsed="0.000724">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:08.812218" elapsed="0.000844">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-25T01:26:08.813227" elapsed="0.000022"/>
</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-25T01:26:08.813406" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:08.813472" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:08.798131" elapsed="0.015450">No leader found.</status>
</kw>
<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-25T01:26:09.823910" 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-25T01:26:09.823239" elapsed="0.000719"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:09.824663" 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-25T01:26:09.824231" elapsed="0.000471"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:09.824771" elapsed="0.000051"/>
</return>
<msg time="2026-04-25T01:26:09.825055" 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-25T01:26:09.822614" elapsed="0.002482"/>
</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-25T01:26:09.825389" elapsed="0.000277"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:09.826464" 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-25T01:26:09.825916" elapsed="0.000588"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:09.827118" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:09.826737" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:09.827748" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:09.827374" elapsed="0.000412"/>
</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-25T01:26:09.828873" elapsed="0.000038"/>
</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-25T01:26:09.829182" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:09.829027" elapsed="0.000215"/>
</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-25T01:26:09.829417" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:09.829269" elapsed="0.000204"/>
</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-25T01:26:09.829654" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:09.829497" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:09.829007" elapsed="0.000728"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:09.828624" elapsed="0.001136"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:09.827912" elapsed="0.001875"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:09.829828" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:26:09.830057" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:09.830105" 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-25T01:26:09.821181" elapsed="0.008949"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:09.830629" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:09.830711" 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-25T01:26:09.830334" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:09.831472" 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-25T01:26:09.831157" elapsed="0.000391">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:09.830811" elapsed="0.000805">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:09.830791" elapsed="0.000859">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-25T01:26:09.831833" elapsed="0.000027"/>
</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-25T01:26:09.832059" elapsed="0.000025"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:09.832136" elapsed="0.000021"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:09.814672" elapsed="0.017606">No leader found.</status>
</kw>
<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-25T01:26:10.843261" 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-25T01:26:10.842539" elapsed="0.000755"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:10.843857" 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-25T01:26:10.843499" elapsed="0.000389"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:10.843938" elapsed="0.000066"/>
</return>
<msg time="2026-04-25T01:26:10.844139" 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-25T01:26:10.841585" elapsed="0.002579"/>
</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-25T01:26:10.844325" elapsed="0.000187"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:10.845029" 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-25T01:26:10.844676" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:10.845457" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:10.845217" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:10.845870" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:10.845631" elapsed="0.000265"/>
</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-25T01:26:10.846341" 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-25T01:26:10.846621" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:10.846454" elapsed="0.000222"/>
</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-25T01:26:10.846844" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:10.846702" elapsed="0.000194"/>
</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-25T01:26:10.847075" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:10.846919" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:10.846433" elapsed="0.000718"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:10.846169" elapsed="0.001007"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:10.845950" elapsed="0.001253"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:10.847246" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:26:10.847447" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:10.847492" 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-25T01:26:10.839800" elapsed="0.007714"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:10.847989" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:10.848069" 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-25T01:26:10.847690" elapsed="0.000403"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:10.848669" 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-25T01:26:10.848383" elapsed="0.000369">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:10.848163" elapsed="0.000750">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:10.848144" elapsed="0.000804">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-25T01:26:10.849119" elapsed="0.000022"/>
</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-25T01:26:10.849294" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:10.849360" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:10.833399" elapsed="0.016067">No leader found.</status>
</kw>
<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-25T01:26:11.860770" 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-25T01:26:11.859735" elapsed="0.001102"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:11.861947" 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-25T01:26:11.861288" elapsed="0.000721"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:11.862060" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:26:11.862233" 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-25T01:26:11.858848" elapsed="0.003411"/>
</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-25T01:26:11.862419" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:11.863164" 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-25T01:26:11.862788" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:11.863647" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:11.863375" elapsed="0.000299"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:11.864088" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:11.863827" elapsed="0.000287"/>
</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-25T01:26:11.864535" elapsed="0.000025"/>
</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-25T01:26:11.864797" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:11.864647" elapsed="0.000210"/>
</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-25T01:26:11.865066" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:11.864882" elapsed="0.000240"/>
</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-25T01:26:11.865288" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:11.865145" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:11.864627" elapsed="0.000735"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:11.864362" elapsed="0.001024"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:11.864167" elapsed="0.001246"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:11.865452" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:11.865656" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:11.865702" 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-25T01:26:11.856867" elapsed="0.008858"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:11.866199" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:11.866276" 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-25T01:26:11.865899" elapsed="0.000401"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:11.866870" 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-25T01:26:11.866589" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:11.866370" elapsed="0.000660">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:11.866351" elapsed="0.000712">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-25T01:26:11.867293" elapsed="0.000023"/>
</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-25T01:26:11.867470" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:11.867538" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:11.850548" elapsed="0.017097">No leader found.</status>
</kw>
<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-25T01:26:12.879010" 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-25T01:26:12.878030" elapsed="0.001050"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:12.880142" 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-25T01:26:12.879587" elapsed="0.000582"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:12.880220" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:26:12.880398" 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-25T01:26:12.877129" elapsed="0.003294"/>
</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-25T01:26:12.880582" elapsed="0.000177"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:12.881279" 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-25T01:26:12.880921" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:12.881708" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:12.881466" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:12.882184" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:12.881882" elapsed="0.000329"/>
</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-25T01:26:12.882662" elapsed="0.000026"/>
</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-25T01:26:12.882948" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:12.882795" elapsed="0.000230"/>
</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-25T01:26:12.883212" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:12.883053" elapsed="0.000213"/>
</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-25T01:26:12.883447" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:12.883290" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:12.882756" elapsed="0.000767"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:12.882472" elapsed="0.001076"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:12.882267" elapsed="0.001308"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:12.883615" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:12.883824" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:12.883870" 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-25T01:26:12.875190" elapsed="0.008705"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:12.884404" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:12.884483" 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-25T01:26:12.884110" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:12.885108" 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-25T01:26:12.884801" elapsed="0.000382">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:12.884579" elapsed="0.000672">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:12.884560" elapsed="0.000723">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-25T01:26:12.885438" elapsed="0.000022"/>
</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-25T01:26:12.885691" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:12.885760" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:12.868749" elapsed="0.017119">No leader found.</status>
</kw>
<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-25T01:26:13.897228" 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-25T01:26:13.896225" elapsed="0.001070"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:13.898369" 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-25T01:26:13.897665" elapsed="0.000755"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:13.898498" elapsed="0.000054"/>
</return>
<msg time="2026-04-25T01:26:13.898747" 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-25T01:26:13.895359" elapsed="0.003424"/>
</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-25T01:26:13.899038" elapsed="0.000250"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:13.900045" 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-25T01:26:13.899529" elapsed="0.000555"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:13.900671" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:13.900319" elapsed="0.000389"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:13.901322" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:13.900927" elapsed="0.000433"/>
</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-25T01:26:13.901983" elapsed="0.000038"/>
</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-25T01:26:13.902365" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:13.902147" elapsed="0.000299"/>
</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-25T01:26:13.902692" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:13.902483" elapsed="0.000288"/>
</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-25T01:26:13.903035" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:13.902806" elapsed="0.000306"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:13.902119" elapsed="0.001027"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:13.901714" elapsed="0.001467"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:13.901433" elapsed="0.001785"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:13.903277" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:26:13.903572" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:13.903640" 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-25T01:26:13.893678" elapsed="0.009997"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:13.904367" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:13.904480" 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-25T01:26:13.903933" elapsed="0.000582"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:13.905405" 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-25T01:26:13.904938" elapsed="0.000570">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:13.904617" elapsed="0.000986">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:13.904591" elapsed="0.001058">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-25T01:26:13.905873" elapsed="0.000032"/>
</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-25T01:26:13.906121" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:13.906256" elapsed="0.000018"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:13.887207" elapsed="0.019161">No leader found.</status>
</kw>
<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-25T01:26:14.913649" 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-25T01:26:14.913051" elapsed="0.000643"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:14.914305" 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-25T01:26:14.913917" elapsed="0.000421"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:14.914398" elapsed="0.000047"/>
</return>
<msg time="2026-04-25T01:26:14.914604" 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-25T01:26:14.912546" elapsed="0.002089"/>
</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-25T01:26:14.914836" elapsed="0.000276"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:14.915733" 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-25T01:26:14.915322" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:14.916292" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:14.915986" elapsed="0.000337"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:14.916804" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:14.916512" elapsed="0.000323"/>
</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-25T01:26:14.917370" elapsed="0.000030"/>
</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-25T01:26:14.917696" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:14.917505" elapsed="0.000259"/>
</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-25T01:26:14.917995" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:14.917795" elapsed="0.000270"/>
</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-25T01:26:14.918278" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:14.918094" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:14.917482" elapsed="0.000888"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:14.917157" elapsed="0.001243"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:14.916898" elapsed="0.001536"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:14.918485" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:26:14.918731" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:14.918789" 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-25T01:26:14.911613" elapsed="0.007205"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:14.919446" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:14.919541" 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-25T01:26:14.919083" elapsed="0.000488"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:14.920304" 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-25T01:26:14.919936" elapsed="0.000463">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:14.919658" elapsed="0.000824">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:14.919635" elapsed="0.000886">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-25T01:26:14.920717" elapsed="0.000026"/>
</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-25T01:26:14.920940" elapsed="0.000042"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:14.921041" elapsed="0.000019"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:14.907657" elapsed="0.013515">No leader found.</status>
</kw>
<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-25T01:26:15.932874" 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-25T01:26:15.931545" elapsed="0.001568"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:15.933667" 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-25T01:26:15.933344" elapsed="0.000354"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:15.933750" elapsed="0.000044"/>
</return>
<msg time="2026-04-25T01:26:15.933987" 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-25T01:26:15.930618" elapsed="0.003397"/>
</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-25T01:26:15.934179" elapsed="0.000212"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:15.934910" 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-25T01:26:15.934560" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:15.935379" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:15.935125" elapsed="0.000281"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:15.935821" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:15.935565" elapsed="0.000282"/>
</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-25T01:26:15.936300" elapsed="0.000025"/>
</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-25T01:26:15.936658" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:15.936442" elapsed="0.000277"/>
</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-25T01:26:15.936905" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:15.936745" elapsed="0.000233"/>
</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-25T01:26:15.937157" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:15.937005" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:15.936393" elapsed="0.000841"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:15.936123" elapsed="0.001137"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:15.935901" elapsed="0.001386"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:15.937328" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:26:15.937536" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:15.937583" 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-25T01:26:15.928872" elapsed="0.008735"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:15.938109" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:15.938191" 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-25T01:26:15.937784" elapsed="0.000432"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:15.938801" 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-25T01:26:15.938513" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:15.938288" elapsed="0.000699">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:15.938268" elapsed="0.000756">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-25T01:26:15.939188" elapsed="0.000023"/>
</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-25T01:26:15.939365" elapsed="0.000046"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:15.939462" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:15.922368" elapsed="0.017204">No leader found.</status>
</kw>
<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-25T01:26:16.951217" 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-25T01:26:16.950311" elapsed="0.000940"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.951733" 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-25T01:26:16.951429" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:16.951810" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:26:16.951997" 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-25T01:26:16.949297" elapsed="0.002727"/>
</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-25T01:26:16.952185" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.952861" 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-25T01:26:16.952520" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.953314" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:16.953067" elapsed="0.000273"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.953735" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:16.953493" elapsed="0.000268"/>
</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-25T01:26:16.954284" elapsed="0.000025"/>
</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-25T01:26:16.954560" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:16.954395" elapsed="0.000222"/>
</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-25T01:26:16.954784" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:16.954643" elapsed="0.000195"/>
</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-25T01:26:16.955017" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:16.954861" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:16.954376" elapsed="0.000718"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:16.954103" elapsed="0.001015"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:16.953812" elapsed="0.001332"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:26:16.955183" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:16.955384" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:26:16.955430" 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-25T01:26:16.947412" elapsed="0.008042"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.955944" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:26:16.956038" 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-25T01:26:16.955650" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.956713" 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-25T01:26:16.956366" elapsed="0.000448">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:26:16.956140" elapsed="0.000742">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:26:16.956120" elapsed="0.000794">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-25T01:26:16.957083" elapsed="0.000023"/>
</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-25T01:26:16.957287" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:16.957371" elapsed="0.000022"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:26:16.940746" elapsed="0.016764">No leader found.</status>
</kw>
<msg time="2026-04-25T01:26:16.957637" level="FAIL">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</msg>
<var>${inv_conf_leader}</var>
<var>${inv_conf_followers_list}</var>
<arg>10s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Get_Leader_And_Followers_For_Shard</arg>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.767209" elapsed="10.190534">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>config inventory Leader is ${inv_conf_leader} and followers are ${inv_conf_followers_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:16.958125" elapsed="0.000025"/>
</kw>
<return>
<value>${inv_conf_leader}</value>
<value>${inv_conf_followers_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:16.958193" elapsed="0.000015"/>
</return>
<var>${inventory_leader}</var>
<var>${inventory_followers}</var>
<doc>Check Status for Inventory Config shard in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:26:06.764792" elapsed="10.193506">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_1}</var>
<arg>${Inventory_Followers}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:16.958491" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_1}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:16.958717" elapsed="0.000023"/>
</kw>
<doc>Find a follower in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:26:06.752063" elapsed="10.206836">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s3-t3" name="Start Mininet Connect To Follower Node1" line="55">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:16.966309" elapsed="0.000257"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:16.966025" elapsed="0.000599"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:16.967681" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:16.967560" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:16.967540" elapsed="0.000210"/>
</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-25T01:26:16.972911" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:16.972802" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:16.972784" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.974022" 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-25T01:26:16.973608" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.974504" 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-25T01:26:16.974214" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:16.974575" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:26:16.974731" 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-25T01:26:16.973231" elapsed="0.001524"/>
</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-25T01:26:16.975132" 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-25T01:26:16.975375" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:16.975230" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:16.975213" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:16.974985" elapsed="0.000488"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:16.974809" elapsed="0.000689"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:16.972437" elapsed="0.003113"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:16.967265" elapsed="0.008339"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:16.966778" elapsed="0.008869"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:16.960991" elapsed="0.014708"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:26:16.980182" level="FAIL">Variable '${Follower_Node_1}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_1}_IP}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:26:16.976018" elapsed="0.004204">Variable '${Follower_Node_1}' not found.</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-25T01:26:16.980432" elapsed="0.000022"/>
</kw>
<doc>Start mininet with connection to Follower Node1.</doc>
<status status="FAIL" start="2026-04-25T01:26:16.959933" elapsed="0.020714">Variable '${Follower_Node_1}' not found.</status>
</test>
<test id="s1-s3-t4" name="Add Bulk Flow From Follower" line="62">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:16.984166" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:16.983881" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:16.985424" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:16.985313" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:16.985294" elapsed="0.000198"/>
</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-25T01:26:16.990527" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:16.990418" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:16.990398" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.991600" 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-25T01:26:16.991217" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:16.992095" 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-25T01:26:16.991789" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:16.992171" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:26:16.992341" 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-25T01:26:16.990820" elapsed="0.001546"/>
</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-25T01:26:16.992733" 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-25T01:26:16.992994" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:16.992833" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:16.992816" elapsed="0.000256"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:16.992577" elapsed="0.000518"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:16.992418" elapsed="0.000701"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:16.989994" elapsed="0.003178"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:16.985025" elapsed="0.008202"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:16.984587" elapsed="0.008683"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:16.981519" elapsed="0.011836"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:17.002101" level="FAIL">Variable '${temp_json_config_add}' not found.</msg>
<arg>${temp_json_config_add}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:26:16.997720" elapsed="0.004423">Variable '${temp_json_config_add}' not found.</status>
</kw>
<doc>1000 Flows added via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:26:16.980996" elapsed="0.021288">Variable '${temp_json_config_add}' not found.</status>
</test>
<test id="s1-s3-t5" name="Get Bulk Flows and Verify In Cluster" line="66">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:17.005844" elapsed="0.000245"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:17.005550" elapsed="0.000597"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:17.007231" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:17.007118" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:17.007099" elapsed="0.000201"/>
</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-25T01:26:17.012412" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:17.012303" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:17.012285" elapsed="0.000221"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.013512" 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-25T01:26:17.013131" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.014106" 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-25T01:26:17.013727" elapsed="0.000409"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:17.014186" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:26:17.014342" 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-25T01:26:17.012736" elapsed="0.001630"/>
</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-25T01:26:17.014740" 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-25T01:26:17.014996" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:17.014837" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:17.014821" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:17.014597" elapsed="0.000499"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:17.014418" elapsed="0.000703"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:17.011916" elapsed="0.003262"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:17.006811" elapsed="0.008421"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:17.006316" elapsed="0.008962"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:17.003185" elapsed="0.012144"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:17.028044" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:17.023698" elapsed="0.004385">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Initiate get operation and check flow count across cluster nodes</doc>
<status status="FAIL" start="2026-04-25T01:26:17.002568" elapsed="0.025653">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s3-t6" name="Verify Flows In Switch Before Cluster Restart" line="73">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:17.031760" elapsed="0.000235"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:17.031460" elapsed="0.000593"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:17.033063" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:17.032937" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:17.032919" elapsed="0.000212"/>
</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-25T01:26:17.040702" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:17.040573" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:17.040549" elapsed="0.000231"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.041915" 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-25T01:26:17.041482" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.042491" 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-25T01:26:17.042177" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:17.042564" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:26:17.042730" 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-25T01:26:17.041081" elapsed="0.001674"/>
</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-25T01:26:17.043137" elapsed="0.000026"/>
</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-25T01:26:17.043386" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:17.043240" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:17.043223" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:17.042988" elapsed="0.000495"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:17.042810" elapsed="0.000699"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:17.038078" elapsed="0.005567"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:17.032650" elapsed="0.011056"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:17.032205" elapsed="0.011549"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:17.029115" elapsed="0.014694"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:26:17.048239" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:26:17.044038" elapsed="0.004241">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch before cluster restart.</doc>
<status status="FAIL" start="2026-04-25T01:26:17.028503" elapsed="0.019925">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t7" name="Kill All Cluster Nodes" line="80">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:17.052114" elapsed="0.000241"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:17.051830" elapsed="0.000582"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:17.053453" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:17.053340" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:17.053320" elapsed="0.000202"/>
</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-25T01:26:17.058776" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:17.058666" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:17.058648" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.060098" 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-25T01:26:17.059682" elapsed="0.000444"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.060585" 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-25T01:26:17.060289" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:17.060657" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:26:17.060816" 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-25T01:26:17.059294" elapsed="0.001548"/>
</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-25T01:26:17.061222" elapsed="0.000023"/>
</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-25T01:26:17.061470" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:17.061322" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:17.061305" elapsed="0.000242"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:17.061069" elapsed="0.000504"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:17.060894" elapsed="0.000704"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:17.058301" elapsed="0.003351"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:17.053048" elapsed="0.008673"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:17.052565" elapsed="0.009203"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:17.049331" elapsed="0.012491"/>
</kw>
<kw name="Kill_Members_From_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.066948" 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-25T01:26:17.066565" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.067449" 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-25T01:26:17.067160" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:17.067519" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:26:17.067672" level="INFO">${kill_index_list} = []</msg>
<var>${kill_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-25T01:26:17.066180" elapsed="0.001517"/>
</kw>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.068744" 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-25T01:26:17.068366" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.069244" 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-25T01:26:17.068931" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:17.069316" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:17.069468" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${original_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-25T01:26:17.067959" elapsed="0.001534"/>
</kw>
<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-25T01:26:17.071192" 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-25T01:26:17.070611" elapsed="0.000608"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.071671" 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-25T01:26:17.071382" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:17.071744" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:17.071903" 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-25T01:26:17.070235" elapsed="0.001696"/>
</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-25T01:26:17.072292" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:17.072113" elapsed="0.000240"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:17.072000" elapsed="0.000379"/>
</for>
<arg>command=${NODE_KILL_COMMAND}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T01:26:17.069701" elapsed="0.002732"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:17.072877" level="INFO">${updated_index_list} = []</msg>
<var>${updated_index_list}</var>
<arg>@{index_list}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:26:17.072589" elapsed="0.000315"/>
</kw>
<kw name="Remove Values From List" owner="Collections">
<arg>${updated_index_list}</arg>
<arg>@{kill_index_list}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:26:17.073076" elapsed="0.000212"/>
</kw>
<if>
<branch type="IF" condition="not ${confirm}">
<return>
<value>${updated_index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:17.073467" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:17.073360" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:17.073342" elapsed="0.000191"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.074228" level="INFO">Slept 1 second.</msg>
<msg time="2026-04-25T01:26:18.074373" level="INFO">Kill -9 closes open files, which may take longer than ssh overhead, but not long enough to warrant WUKS.</msg>
<arg>1s</arg>
<arg>Kill -9 closes open files, which may take longer than ssh overhead, but not long enough to warrant WUKS.</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="PASS" start="2026-04-25T01:26:17.073677" elapsed="1.000837"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Verify_Karaf_Is_Not_Running_On_Member" owner="ClusterManagement">
<arg>member_index=${index}</arg>
<doc>Fail if non-zero karaf instances are counted on member of given index.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:18.075614" elapsed="0.000064"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.075108" elapsed="0.000650"/>
</iter>
<var>${index}</var>
<value>@{kill_index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.074689" elapsed="0.001131"/>
</for>
<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-25T01:26:18.083298" 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-25T01:26:18.082265" elapsed="0.001096"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.084332" 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-25T01:26:18.083800" elapsed="0.000559"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:18.084406" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:26:18.084572" 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-25T01:26:18.081349" elapsed="0.003248"/>
</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-25T01:26:18.084936" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.084758" elapsed="0.000324"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.084648" elapsed="0.000464"/>
</for>
<arg>command=netstat -pnatu | grep 2550</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T01:26:18.076308" elapsed="0.008863"/>
</kw>
<return>
<value>${updated_index_list}</value>
<status status="PASS" start="2026-04-25T01:26:18.085214" elapsed="0.000028"/>
</return>
<doc>If the list is empty, kill all ODL instances. Otherwise, kill members based on ${kill_index_list}
If ${confirm} is True, sleep 1 second and verify killed instances are not there anymore.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member_index_list}</doc>
<status status="PASS" start="2026-04-25T01:26:17.062197" elapsed="1.023146"/>
</kw>
<doc>Kill All Nodes.</doc>
<status status="PASS" start="2026-04-25T01:26:17.048782" elapsed="1.036674"/>
</test>
<test id="s1-s3-t8" name="Stop Mininet Connected To Follower Node1 and Exit" line="84">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:18.088754" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:18.088487" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:18.090074" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:18.089937" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.089916" elapsed="0.000227"/>
</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-25T01:26:18.095352" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:18.095244" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.095226" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.096445" 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-25T01:26:18.096063" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.096923" 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-25T01:26:18.096634" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:18.097013" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:26:18.097167" 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-25T01:26:18.095666" elapsed="0.001526"/>
</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-25T01:26:18.097626" 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-25T01:26:18.097869" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:18.097723" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:18.097706" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.097391" elapsed="0.000592"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.097243" elapsed="0.000766"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:18.094860" elapsed="0.003203"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:18.089642" elapsed="0.008477"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:18.089196" elapsed="0.008969"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:18.086346" elapsed="0.011875"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:26:18.106567" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:26:18.102442" elapsed="0.004164">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:26:18.106823" elapsed="0.000024"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:26:18.085783" elapsed="0.021202">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t9" name="Restart All Cluster Nodes" line="89">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:18.110154" elapsed="0.000217"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:18.109869" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:18.111454" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:18.111338" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.111318" elapsed="0.000205"/>
</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-25T01:26:18.116762" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:18.116651" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.116632" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.117854" 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-25T01:26:18.117465" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.118363" 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-25T01:26:18.118064" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:18.118437" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:26:18.118593" 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-25T01:26:18.117078" elapsed="0.001541"/>
</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-25T01:26:18.118986" elapsed="0.000025"/>
</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-25T01:26:18.119235" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:18.119088" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:18.119071" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.118826" elapsed="0.000508"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.118671" elapsed="0.000687"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:18.116241" elapsed="0.003171"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:18.111023" elapsed="0.008446"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:18.110578" elapsed="0.008937"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:18.107758" elapsed="0.011833"/>
</kw>
<kw name="Start_Members_From_List_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.131776" level="INFO">${base_command} = /tmp/karaf-0.23.2/bin/start</msg>
<var>${base_command}</var>
<arg>"""${karaf_home}""" != ""</arg>
<arg>${karaf_home}/bin/start</arg>
<arg>${NODE_START_COMMAND}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T01:26:18.131357" elapsed="0.000446"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.132353" level="INFO">${command} = /tmp/karaf-0.23.2/bin/start</msg>
<var>${command}</var>
<arg>"""${export_java_home}""" != ""</arg>
<arg>export JAVA_HOME="${export_java_home}"; ${base_command}</arg>
<arg>${base_command}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T01:26:18.131988" elapsed="0.000391"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-25T01:26:18.132821" level="INFO">${epoch} = 1777080378.132745</msg>
<var>${epoch}</var>
<arg>time_zone=UTC</arg>
<arg>result_format=epoch</arg>
<arg>exclude_millis=False</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-25T01:26:18.132545" elapsed="0.000302"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.133462" level="INFO">${gc_filepath} = /tmp/karaf-0.23.2/data/log/gc_1777080378.132745.log</msg>
<var>${gc_filepath}</var>
<arg>"""${karaf_home}""" != ""</arg>
<arg>${karaf_home}/data/log/gc_${epoch}.log</arg>
<arg>${GC_LOG_PATH}/gc_${epoch}.log</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T01:26:18.133032" elapsed="0.000457"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.134047" level="INFO">${gc_options} = -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.23.2/data/log/gc_1777080378.132745.log</msg>
<var>${gc_options}</var>
<arg>"docker" not in """${node_start_command}"""</arg>
<arg>-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${gc_filepath}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T01:26:18.133660" elapsed="0.000414"/>
</kw>
<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-25T01:26:18.135665" 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-25T01:26:18.135184" elapsed="0.000512"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.136164" 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-25T01:26:18.135857" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:18.136238" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:18.136390" 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-25T01:26:18.134798" elapsed="0.001618"/>
</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-25T01:26:18.136746" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.136574" elapsed="0.000270"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.136467" elapsed="0.000404"/>
</for>
<arg>command=${command} ${gc_options}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T01:26:18.134285" elapsed="0.002640"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.148795" 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-25T01:26:18.148401" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.149301" 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-25T01:26:18.149002" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:18.149374" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:26:18.149539" 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-25T01:26:18.148016" elapsed="0.001549"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:18.150019" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-25T01:26:18.150157" elapsed="0.000023"/>
</continue>
<status status="NOT RUN" start="2026-04-25T01:26:18.150116" elapsed="0.000091"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:18.150098" elapsed="0.000131"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:18.150373" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.149775" elapsed="0.000652"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.149617" elapsed="0.000837"/>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="PASS" start="2026-04-25T01:26:18.147550" elapsed="0.002958"/>
</kw>
<status status="PASS" start="2026-04-25T01:26:18.147233" elapsed="0.003306"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.147213" elapsed="0.003350"/>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.152093" 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-25T01:26:18.151684" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.152576" 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-25T01:26:18.152285" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:18.152648" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:18.152802" 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-25T01:26:18.151276" elapsed="0.001552"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${session}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:18.153182" elapsed="0.000026"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="NOT RUN" start="2026-04-25T01:26:18.157209" elapsed="0.000028"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.153014" elapsed="0.004266"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.152879" elapsed="0.004429"/>
</for>
<arg>${member_index_list}</arg>
<status status="PASS" start="2026-04-25T01:26:18.150879" elapsed="0.006496"/>
</kw>
<status status="PASS" start="2026-04-25T01:26:18.150619" elapsed="0.006785"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.150603" elapsed="0.006825"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-25T01:26:18.157826" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:18.157486" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.157470" elapsed="0.000440"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="PASS" start="2026-04-25T01:26:18.146792" elapsed="0.011165"/>
</kw>
<arg>${timeout}</arg>
<arg>10s</arg>
<arg>Verify_Members_Are_Ready</arg>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-25T01:26:18.137106" elapsed="0.021054"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement" type="TEARDOWN">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.161736" 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-25T01:26:18.161350" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.162247" 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-25T01:26:18.161930" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:18.162320" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:26:18.162475" 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-25T01:26:18.160913" elapsed="0.001588"/>
</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-25T01:26:18.162836" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.162662" elapsed="0.000237"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.162553" elapsed="0.000373"/>
</for>
<arg>command=netstat -pnatu | grep 2550</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-25T01:26:18.158504" elapsed="0.004493"/>
</kw>
<doc>If the list is empty, start all cluster members. Otherwise, start members based on present indices.
If ${wait_for_sync}, wait for cluster sync on listed members.
Optionally karaf_home can be overriden. Optionally specific JAVA_HOME is used for starting.
Garbage collection is unconditionally logged to files. TODO: Make that reasonable conditional?</doc>
<status status="PASS" start="2026-04-25T01:26:18.123815" elapsed="0.039235"/>
</kw>
<doc>Restart all cluster nodes.</doc>
<status status="PASS" start="2026-04-25T01:26:18.107272" elapsed="0.055877"/>
</test>
<test id="s1-s3-t10" name="Verify Data Recovery After Cluster Restart" line="93">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:26:18.166509" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:26:18.166234" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:26:18.167828" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:18.167715" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.167695" elapsed="0.000204"/>
</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-25T01:26:18.172892" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:26:18.172784" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:26:18.172766" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.174046" 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-25T01:26:18.173615" elapsed="0.000459"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:26:18.174539" 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-25T01:26:18.174244" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:26:18.174616" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:26:18.174775" 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-25T01:26:18.173208" elapsed="0.001592"/>
</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-25T01:26:18.175173" elapsed="0.000023"/>
</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-25T01:26:18.175424" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:26:18.175275" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:26:18.175257" elapsed="0.000244"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:26:18.175026" elapsed="0.000499"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:26:18.174853" elapsed="0.000696"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:26:18.172416" elapsed="0.003188"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:26:18.167391" elapsed="0.008293"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:26:18.166937" elapsed="0.008795"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:26:18.164076" elapsed="0.011754"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:18.189219" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:18.184869" elapsed="0.004392">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:20.207985" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:20.203413" elapsed="0.004632">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:22.226418" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:22.221902" elapsed="0.004577">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:24.244195" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:24.239887" elapsed="0.004366">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:26.263373" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:26.258883" elapsed="0.004553">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:28.283726" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:28.279221" elapsed="0.004565">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:30.302514" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:30.297993" elapsed="0.004581">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:32.319918" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:32.314218" elapsed="0.005785">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:34.338256" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:34.333370" elapsed="0.004947">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:36.447852" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:36.443390" elapsed="0.004521">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:38.466194" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:38.461858" elapsed="0.004392">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:40.484302" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:40.479980" elapsed="0.004375">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:42.504485" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:42.500100" elapsed="0.004438">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:44.524589" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:44.519539" elapsed="0.005109">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:46.541508" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:46.537215" elapsed="0.004368">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:48.561126" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:48.556505" elapsed="0.004677">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:50.580013" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:50.575676" elapsed="0.004393">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:52.598085" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:52.593704" elapsed="0.004438">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:54.618803" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:54.614368" elapsed="0.004501">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:56.638644" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:56.633254" elapsed="0.005451">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:26:58.657303" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:26:58.652471" elapsed="0.004903">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:00.677067" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:00.672741" elapsed="0.004386">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:02.692255" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:02.687293" elapsed="0.005021">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:04.709660" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:04.703940" elapsed="0.005793">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:06.727412" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:06.722911" elapsed="0.004561">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:08.746018" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:08.741669" elapsed="0.004405">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:10.764788" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:10.760480" elapsed="0.004364">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:12.784232" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:12.779609" elapsed="0.004707">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:14.802670" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:14.798301" elapsed="0.004429">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:16.823391" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:16.818803" elapsed="0.004650">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:18.841301" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:18.836977" elapsed="0.004376">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:20.861531" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:20.856820" elapsed="0.004769">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:22.880149" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:22.875807" elapsed="0.004398">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:24.899115" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:24.894030" elapsed="0.005167">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:26.918797" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:26.914401" elapsed="0.004456">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:28.936592" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:28.932330" elapsed="0.004313">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:30.955651" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:30.951292" elapsed="0.004418">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:32.973730" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:32.969419" elapsed="0.004364">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:34.988459" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:34.983402" elapsed="0.005113">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:37.009112" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:37.004797" elapsed="0.004371">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:39.029513" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:39.024073" elapsed="0.005495">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:41.050813" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:41.046411" elapsed="0.004457">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:43.069731" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:43.065234" elapsed="0.004555">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:45.090090" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:45.085093" elapsed="0.005066">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:47.108885" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:47.103915" elapsed="0.005026">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:49.129328" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:49.124829" elapsed="0.004561">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:51.148906" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:51.144590" elapsed="0.004369">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:53.167294" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:53.162998" elapsed="0.004349">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:55.185863" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:55.180830" elapsed="0.005090">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:57.207370" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:57.202526" elapsed="0.004901">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:27:59.226133" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:27:59.220463" elapsed="0.005724">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:01.244475" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:01.239034" elapsed="0.005511">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:03.266502" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:03.260548" elapsed="0.006019">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:05.285941" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:05.280604" elapsed="0.005409">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:07.307566" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:07.301271" elapsed="0.006373">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:09.326168" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:09.321832" elapsed="0.004391">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:11.344142" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:11.339695" elapsed="0.004514">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:13.364505" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:13.360110" elapsed="0.004452">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:15.381650" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:15.377167" elapsed="0.004559">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:17.401193" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:17.396858" elapsed="0.004390">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:19.419995" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:19.415627" elapsed="0.004434">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:21.441320" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:21.435554" elapsed="0.005825">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:23.460825" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:23.456345" elapsed="0.004541">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:25.479278" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:25.474698" elapsed="0.004637">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:27.498577" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:27.494213" elapsed="0.004421">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:29.516578" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:29.510667" elapsed="0.005984">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:31.534722" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:31.530375" elapsed="0.004401">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:33.557059" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:33.552550" elapsed="0.004569">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:35.577874" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:35.573505" elapsed="0.004444">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:37.601365" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:37.595421" elapsed="0.006002">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:39.623042" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:39.618427" elapsed="0.004684">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:41.639317" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:41.634895" elapsed="0.004480">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:43.660318" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:43.655059" elapsed="0.005316">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:45.680564" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:45.676136" elapsed="0.004497">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:47.701695" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:47.695935" elapsed="0.005812">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:49.719071" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:49.714271" elapsed="0.004865">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:51.740091" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:51.735712" elapsed="0.004438">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:53.761899" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:53.757074" elapsed="0.004885">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:55.780547" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:55.776100" elapsed="0.004501">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:57.800070" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:57.795709" elapsed="0.004415">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:28:59.820363" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:28:59.816093" elapsed="0.004323">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:01.839304" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:01.834860" elapsed="0.004514">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:03.857260" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:03.852767" elapsed="0.004550">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:05.880360" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:05.875430" elapsed="0.005000">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:07.898812" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:07.893949" elapsed="0.004924">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:09.918712" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:09.914205" elapsed="0.004576">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:11.938171" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:11.933244" elapsed="0.004985">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:13.958139" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:13.952852" elapsed="0.005345">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:15.975733" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:15.969996" elapsed="0.005805">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:17.995263" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:17.990844" elapsed="0.004480">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:20.015456" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:20.011131" elapsed="0.004379">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:22.036052" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:22.031485" elapsed="0.004625">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:24.056473" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:24.052083" elapsed="0.004460">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:26.077161" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:26.071613" elapsed="0.005633">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:28.095781" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:28.089694" elapsed="0.006159">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:30.115899" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:30.111520" elapsed="0.004437">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:32.133913" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:32.129578" elapsed="0.004412">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:34.152731" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:34.147708" elapsed="0.005081">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:36.172517" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:36.167210" elapsed="0.005362">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:38.194708" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:38.190286" elapsed="0.004484">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:40.215844" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:40.211455" elapsed="0.004444">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:42.236716" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:42.232335" elapsed="0.004437">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:44.258503" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:44.253907" elapsed="0.004654">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:46.276672" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:46.272280" elapsed="0.004449">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:48.292025" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:48.287674" elapsed="0.004408">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:50.312393" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:50.307102" elapsed="0.005346">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:52.331213" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:52.326895" elapsed="0.004371">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:54.350260" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:54.345043" elapsed="0.005272">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:56.370648" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:56.365496" elapsed="0.005218">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:29:58.390623" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:29:58.385203" elapsed="0.005474">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:00.410241" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:00.405733" elapsed="0.004565">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:02.430105" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:02.424926" elapsed="0.005252">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:04.449348" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:04.444714" elapsed="0.004709">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:06.468279" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:06.463429" elapsed="0.004908">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:08.488629" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:08.483363" elapsed="0.005322">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:10.508396" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:10.503948" elapsed="0.004515">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:12.526441" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:12.521129" elapsed="0.005369">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:14.547201" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:14.542117" elapsed="0.005146">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:16.569355" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:16.564814" elapsed="0.004599">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:18.587803" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:18.582983" elapsed="0.004890">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:20.608692" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:20.602319" elapsed="0.006445">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:22.630155" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:22.625525" elapsed="0.004691">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:24.646607" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:24.640921" elapsed="0.005746">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:26.667446" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:26.662238" elapsed="0.005266">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:28.684624" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:28.680315" elapsed="0.004364">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:30.704144" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:30.699267" elapsed="0.004936">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:32.724476" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:32.719281" elapsed="0.005251">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:34.743923" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:34.739419" elapsed="0.004602">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:36.763672" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:36.758716" elapsed="0.005033">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:38.783402" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:38.777921" elapsed="0.005538">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:40.802744" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:40.798395" elapsed="0.004402">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:42.822068" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:42.816982" elapsed="0.005142">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:44.842820" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:44.837628" elapsed="0.005246">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:46.866210" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:46.860585" elapsed="0.005705">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:48.886148" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:48.881781" elapsed="0.004425">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:50.906471" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:50.901578" elapsed="0.004951">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:52.925438" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:52.921096" elapsed="0.004398">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:54.945336" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:54.941036" elapsed="0.004354">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:56.962125" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:56.957617" elapsed="0.004575">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:30:58.981841" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:30:58.976510" elapsed="0.005395">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:01.000698" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:00.996316" elapsed="0.004437">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:03.020826" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:03.015753" elapsed="0.005142">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:05.040052" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:05.035559" elapsed="0.004553">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:07.061158" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:07.056813" elapsed="0.004400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:09.077040" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:09.072691" elapsed="0.004405">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:11.096979" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:11.092478" elapsed="0.004557">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:13.115326" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:13.110934" elapsed="0.004450">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:15.135026" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:15.130244" elapsed="0.004843">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:17.155252" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:17.150716" elapsed="0.004603">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:19.174231" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:19.169892" elapsed="0.004389">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:21.193429" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:21.188931" elapsed="0.004565">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:23.213645" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:23.208854" elapsed="0.004857">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:25.233207" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:25.228838" elapsed="0.004425">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:27.252806" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:27.248409" elapsed="0.004453">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:29.272544" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:29.268134" elapsed="0.004470">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:31.291114" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:31.286684" elapsed="0.004494">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:33.306002" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:33.301491" elapsed="0.004574">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:35.323800" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:35.317923" elapsed="0.005967">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:37.346366" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:37.341743" elapsed="0.004681">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:39.365787" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:39.361437" elapsed="0.004404">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:41.384383" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:41.379988" elapsed="0.004455">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:43.401907" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:43.396245" elapsed="0.005734">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:45.423172" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:45.418330" elapsed="0.004905">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:47.441413" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:47.437052" elapsed="0.004418">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:49.461648" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:49.457201" elapsed="0.004505">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:51.479992" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:51.474194" elapsed="0.005868">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:53.499281" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:53.494300" elapsed="0.005047">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:55.518337" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:55.513732" elapsed="0.004659">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:57.537979" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:57.533617" elapsed="0.004419">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:31:59.557871" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:31:59.552812" elapsed="0.005112">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:01.574207" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:01.569290" elapsed="0.004974">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:03.595746" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:03.590658" elapsed="0.005145">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:05.616677" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:05.612315" elapsed="0.004429">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:07.637942" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:07.633574" elapsed="0.004467">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:09.656598" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.652162" elapsed="0.004509">Variable '${temp_json_config_get}' not found.</status>
</kw>
<msg time="2026-04-25T01:32:09.656802" level="FAIL">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</msg>
<arg>${restart_timeout}</arg>
<arg>2s</arg>
<arg>BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster</arg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:26:18.176055" elapsed="351.480923">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>1000 Flows preserved in all controller instances.</doc>
<status status="FAIL" start="2026-04-25T01:26:18.163439" elapsed="351.493730">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s3-t11" name="Start Mininet Again Connect To Follower Node1" line="103">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:09.661833" elapsed="0.000307"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:09.661336" elapsed="0.000867"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:09.663412" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.663269" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.663244" elapsed="0.000247"/>
</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-25T01:32:09.668635" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.668514" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.668495" elapsed="0.000212"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.669792" 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-25T01:32:09.669378" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.670337" 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-25T01:32:09.670018" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:09.670411" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:32:09.670579" 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-25T01:32:09.668957" elapsed="0.001647"/>
</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-25T01:32:09.671048" elapsed="0.000026"/>
</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-25T01:32:09.671309" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.671155" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:09.671137" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:09.670827" elapsed="0.000585"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:09.670662" elapsed="0.000776"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:09.668113" elapsed="0.003382"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:09.662901" elapsed="0.008668"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:09.662368" elapsed="0.009258"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:09.658647" elapsed="0.013045"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:32:09.676581" level="FAIL">Variable '${Follower_Node_1}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_1}_IP}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.672044" elapsed="0.004580">Variable '${Follower_Node_1}' not found.</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-25T01:32:09.676880" elapsed="0.000025"/>
</kw>
<doc>Start mininet with connection to follower node1.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.657836" elapsed="0.019309">Variable '${Follower_Node_1}' not found.</status>
</test>
<test id="s1-s3-t12" name="Verify Flows In Switch After Cluster Restart" line="110">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:09.682120" elapsed="0.000247"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:09.681793" elapsed="0.000642"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:09.683591" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.683472" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.683451" elapsed="0.000216"/>
</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-25T01:32:09.688682" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.688574" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.688556" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.689777" 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-25T01:32:09.689384" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.690290" 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-25T01:32:09.689986" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:09.690363" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:32:09.690531" 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-25T01:32:09.689000" elapsed="0.001557"/>
</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-25T01:32:09.690925" elapsed="0.000023"/>
</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-25T01:32:09.691228" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.691078" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:09.691059" elapsed="0.000246"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:09.690772" elapsed="0.000557"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:09.690613" elapsed="0.000741"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:09.688203" elapsed="0.003204"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:09.683168" elapsed="0.008295"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:09.682589" elapsed="0.008919"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:09.678862" elapsed="0.012698"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:32:09.695943" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:32:09.691769" elapsed="0.004231">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch after cluster restart.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.677940" elapsed="0.018223">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t13" name="Stop Mininet Connected To Follower Node1" line="117">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:09.701177" elapsed="0.000304"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:09.700776" elapsed="0.000784"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:09.702859" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.702700" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.702672" elapsed="0.000278"/>
</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-25T01:32:09.710074" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.709870" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.709838" elapsed="0.000343"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.711726" 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-25T01:32:09.711142" elapsed="0.000623"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.712534" 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-25T01:32:09.712121" elapsed="0.000449"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:09.712632" elapsed="0.000048"/>
</return>
<msg time="2026-04-25T01:32:09.712856" 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-25T01:32:09.710551" elapsed="0.002340"/>
</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-25T01:32:09.713323" 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-25T01:32:09.713652" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.713448" elapsed="0.000275"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:09.713422" elapsed="0.000334"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:09.713169" elapsed="0.000621"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:09.712984" elapsed="0.000843"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:09.709278" elapsed="0.004626"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:09.702341" elapsed="0.011663"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:09.701756" elapsed="0.012316"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:09.697338" elapsed="0.016811"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:32:09.723845" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:32:09.719314" elapsed="0.004588">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:32:09.724248" elapsed="0.000035"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.696720" elapsed="0.027745">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t14" name="Delete All Flows From Follower Node1" line="122">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:09.728655" elapsed="0.000251"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:09.728374" elapsed="0.000607"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:09.730077" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.729898" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.729876" elapsed="0.000277"/>
</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-25T01:32:09.735281" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.735151" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.735130" elapsed="0.000226"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.736445" 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-25T01:32:09.736022" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.737134" 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-25T01:32:09.736820" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:09.737206" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:32:09.737371" 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-25T01:32:09.735611" elapsed="0.001786"/>
</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-25T01:32:09.737766" elapsed="0.000027"/>
</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-25T01:32:09.738063" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.737887" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:09.737868" elapsed="0.000276"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:09.737618" elapsed="0.000550"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:09.737453" elapsed="0.000741"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:09.734701" elapsed="0.003636"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:09.729596" elapsed="0.008799"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:09.729141" elapsed="0.009302"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:09.725669" elapsed="0.012829"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:09.747419" level="FAIL">Variable '${temp_json_config_del}' not found.</msg>
<arg>${temp_json_config_del}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.743051" elapsed="0.004429">Variable '${temp_json_config_del}' not found.</status>
</kw>
<doc>1000 Flows deleted via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.724888" elapsed="0.022780">Variable '${temp_json_config_del}' not found.</status>
</test>
<test id="s1-s3-t15" name="Verify No Flows In Cluster" line="129">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:09.751442" elapsed="0.000260"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:09.751156" elapsed="0.000607"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:09.752845" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.752710" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.752685" elapsed="0.000235"/>
</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-25T01:32:09.758196" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.758071" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.758050" elapsed="0.000220"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.759388" 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-25T01:32:09.758915" elapsed="0.000502"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.759879" 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-25T01:32:09.759582" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:09.759950" elapsed="0.000050"/>
</return>
<msg time="2026-04-25T01:32:09.760140" 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-25T01:32:09.758524" elapsed="0.001642"/>
</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-25T01:32:09.760535" 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-25T01:32:09.760781" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.760634" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:09.760617" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:09.760389" elapsed="0.000493"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:09.760223" elapsed="0.000685"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:09.757646" elapsed="0.003333"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:09.752400" elapsed="0.008639"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:09.751921" elapsed="0.009166"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:09.748682" elapsed="0.012460"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:09.773913" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_del}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.769642" elapsed="0.004314">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Verify flow count is 0 across cluster nodes.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.748100" elapsed="0.026041">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s3-t16" name="Get Inventory Leader Before Leader Restart" line="136">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:09.777836" elapsed="0.000304"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:09.777476" elapsed="0.000724"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:09.779307" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.779175" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.779152" elapsed="0.000227"/>
</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-25T01:32:09.784354" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:09.784246" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:09.784228" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.785439" 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-25T01:32:09.785045" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.785920" 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-25T01:32:09.785630" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:09.786008" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:32:09.786166" 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-25T01:32:09.784651" elapsed="0.001539"/>
</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-25T01:32:09.786548" elapsed="0.000023"/>
</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-25T01:32:09.786793" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.786646" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:09.786630" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:09.786403" elapsed="0.000490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:09.786245" elapsed="0.000674"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:09.783870" elapsed="0.003117"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:09.778810" elapsed="0.008252"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:09.778359" elapsed="0.008747"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:09.775132" elapsed="0.012049"/>
</kw>
<kw name="Get InventoryConfig Shard Status" owner="ClusterOpenFlow">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<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-25T01:32:09.794373" 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-25T01:32:09.793991" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.794850" 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-25T01:32:09.794562" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:09.794920" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:32:09.795137" 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-25T01:32:09.793581" elapsed="0.001582"/>
</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-25T01:32:09.795320" elapsed="0.000175"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.796036" 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-25T01:32:09.795655" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.796486" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:09.796230" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.796904" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:09.796663" elapsed="0.000267"/>
</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-25T01:32:09.797358" 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-25T01:32:09.797663" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.797512" elapsed="0.000208"/>
</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-25T01:32:09.797890" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.797744" elapsed="0.000201"/>
</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-25T01:32:09.798129" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:09.797982" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:09.797494" elapsed="0.000711"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:09.797185" elapsed="0.001044"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:09.796999" elapsed="0.001255"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:09.798293" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:32:09.798497" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:09.798544" 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-25T01:32:09.792844" elapsed="0.005724"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.799090" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:09.799174" 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-25T01:32:09.798743" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:09.799769" 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-25T01:32:09.799492" elapsed="0.000351">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:09.799270" elapsed="0.000640">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:09.799251" elapsed="0.000690">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-25T01:32:09.800114" elapsed="0.000023"/>
</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-25T01:32:09.800290" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:09.800357" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:09.790195" elapsed="0.010268">No leader found.</status>
</kw>
<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-25T01:32:10.809016" 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-25T01:32:10.808361" elapsed="0.000701"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:10.809747" 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-25T01:32:10.809320" elapsed="0.000465"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:10.809854" elapsed="0.000054"/>
</return>
<msg time="2026-04-25T01:32:10.810117" 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-25T01:32:10.807790" elapsed="0.002363"/>
</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-25T01:32:10.810430" elapsed="0.000288"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:10.811553" 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-25T01:32:10.810995" elapsed="0.000598"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:10.812196" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:10.811826" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:10.812787" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:10.812452" elapsed="0.000371"/>
</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-25T01:32:10.813424" elapsed="0.000034"/>
</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-25T01:32:10.813876" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:10.813664" elapsed="0.000291"/>
</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-25T01:32:10.814215" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:10.814010" elapsed="0.000282"/>
</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-25T01:32:10.814525" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:10.814325" elapsed="0.000278"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:10.813634" elapsed="0.001002"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:10.813183" elapsed="0.001487"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:10.812893" elapsed="0.001815"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:10.814763" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:32:10.815082" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:10.815147" 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-25T01:32:10.806704" elapsed="0.008477"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:10.815885" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:10.816016" 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-25T01:32:10.815428" elapsed="0.000624"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:10.816703" 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-25T01:32:10.816416" elapsed="0.000362">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:10.816152" elapsed="0.000694">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:10.816126" elapsed="0.000751">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-25T01:32:10.817047" elapsed="0.000023"/>
</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-25T01:32:10.817226" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:10.817293" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:10.801539" elapsed="0.015859">No leader found.</status>
</kw>
<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-25T01:32:11.828817" 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-25T01:32:11.828285" elapsed="0.000567"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:11.829378" 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-25T01:32:11.829059" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:11.829454" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:32:11.829628" 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-25T01:32:11.827307" elapsed="0.002346"/>
</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-25T01:32:11.829812" elapsed="0.000191"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:11.830516" 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-25T01:32:11.830168" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:11.830977" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:11.830716" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:11.831399" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:11.831158" elapsed="0.000266"/>
</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-25T01:32:11.831844" 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-25T01:32:11.832132" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:11.831955" elapsed="0.000312"/>
</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-25T01:32:11.832450" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:11.832296" elapsed="0.000221"/>
</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-25T01:32:11.832689" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:11.832541" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:11.831934" elapsed="0.000830"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:11.831672" elapsed="0.001116"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:11.831478" elapsed="0.001336"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:11.832854" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:32:11.833077" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:11.833138" 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-25T01:32:11.825542" elapsed="0.007624"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:11.833647" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:11.833725" 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-25T01:32:11.833357" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:11.834360" 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-25T01:32:11.834056" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:11.833819" elapsed="0.000683">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:11.833801" elapsed="0.000733">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-25T01:32:11.834687" elapsed="0.000022"/>
</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-25T01:32:11.834863" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:11.834936" elapsed="0.000020"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:11.818492" elapsed="0.016575">No leader found.</status>
</kw>
<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-25T01:32:12.848819" 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-25T01:32:12.847780" elapsed="0.001106"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:12.849947" 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-25T01:32:12.849291" elapsed="0.000741"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:12.850138" elapsed="0.000075"/>
</return>
<msg time="2026-04-25T01:32:12.850502" 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-25T01:32:12.846898" elapsed="0.003658"/>
</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-25T01:32:12.850905" elapsed="0.000388"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:12.852425" 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-25T01:32:12.851652" elapsed="0.000830"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:12.853433" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:12.852861" elapsed="0.000629"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:12.854388" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:12.853823" elapsed="0.000621"/>
</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-25T01:32:12.855383" elapsed="0.000053"/>
</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-25T01:32:12.855951" elapsed="0.000073"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:12.855622" elapsed="0.000481"/>
</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-25T01:32:12.856499" elapsed="0.000102"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:12.856157" elapsed="0.000652"/>
</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-25T01:32:12.857254" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:12.856869" elapsed="0.000459"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:12.855580" elapsed="0.001771"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:12.854998" elapsed="0.002377"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:12.854553" elapsed="0.002848"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:12.857441" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:32:12.857646" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:12.857691" 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-25T01:32:12.845207" elapsed="0.012507"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:12.858187" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:12.858265" 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-25T01:32:12.857887" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:12.858879" 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-25T01:32:12.858582" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:12.858359" elapsed="0.000675">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:12.858341" elapsed="0.000726">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-25T01:32:12.859223" elapsed="0.000022"/>
</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-25T01:32:12.859402" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:12.859470" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:12.836189" elapsed="0.023388">No leader found.</status>
</kw>
<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-25T01:32:13.868847" 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-25T01:32:13.868224" elapsed="0.000668"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:13.869617" 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-25T01:32:13.869175" elapsed="0.000480"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:13.869725" elapsed="0.000052"/>
</return>
<msg time="2026-04-25T01:32:13.869982" 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-25T01:32:13.867657" elapsed="0.002364"/>
</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-25T01:32:13.870244" elapsed="0.000236"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:13.871206" 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-25T01:32:13.870708" elapsed="0.000537"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:13.871820" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:13.871478" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:13.872446" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:13.872097" elapsed="0.000386"/>
</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-25T01:32:13.873122" elapsed="0.000036"/>
</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-25T01:32:13.873442" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:13.873276" elapsed="0.000221"/>
</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-25T01:32:13.873664" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:13.873522" elapsed="0.000196"/>
</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-25T01:32:13.873956" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:13.873741" elapsed="0.000285"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:13.873250" elapsed="0.000800"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:13.872825" elapsed="0.001249"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:13.872554" elapsed="0.001546"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:13.874140" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:32:13.874344" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:13.874390" 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-25T01:32:13.866606" elapsed="0.007807"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:13.874867" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:13.874945" 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-25T01:32:13.874587" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:13.875567" 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-25T01:32:13.875282" elapsed="0.000357">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:13.875061" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:13.875043" elapsed="0.000695">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-25T01:32:13.875890" elapsed="0.000022"/>
</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-25T01:32:13.876081" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:13.876148" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:13.860693" elapsed="0.015561">No leader found.</status>
</kw>
<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-25T01:32:14.885096" 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-25T01:32:14.884359" elapsed="0.000785"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:14.885916" 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-25T01:32:14.885404" elapsed="0.000552"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:14.886053" elapsed="0.000062"/>
</return>
<msg time="2026-04-25T01:32:14.886321" 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-25T01:32:14.883643" elapsed="0.002708"/>
</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-25T01:32:14.886518" elapsed="0.000186"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:14.887271" 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-25T01:32:14.886869" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:14.887843" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:14.887520" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:14.888316" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:14.888062" elapsed="0.000288"/>
</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-25T01:32:14.888874" elapsed="0.000031"/>
</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-25T01:32:14.889239" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:14.889037" elapsed="0.000284"/>
</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-25T01:32:14.889558" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:14.889364" elapsed="0.000255"/>
</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-25T01:32:14.889790" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:14.889642" elapsed="0.000281"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:14.889009" elapsed="0.000940"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:14.888649" elapsed="0.001344"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:14.888411" elapsed="0.001612"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:14.890067" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:32:14.890281" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:14.890328" 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-25T01:32:14.882344" elapsed="0.008007"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:14.890822" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:14.890900" 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-25T01:32:14.890530" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:14.891554" 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-25T01:32:14.891241" elapsed="0.000398">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:14.891014" elapsed="0.000698">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:14.890993" elapsed="0.000751">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-25T01:32:14.891903" elapsed="0.000023"/>
</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-25T01:32:14.892101" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:14.892172" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:14.877186" elapsed="0.015099">No leader found.</status>
</kw>
<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-25T01:32:15.903070" 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-25T01:32:15.902577" elapsed="0.000527"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:15.903609" 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-25T01:32:15.903282" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:15.903690" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:32:15.903865" 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-25T01:32:15.901697" elapsed="0.002195"/>
</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-25T01:32:15.904075" elapsed="0.000178"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:15.904785" 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-25T01:32:15.904428" elapsed="0.000390"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:15.905308" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:15.905029" elapsed="0.000313"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:15.905759" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:15.905504" elapsed="0.000283"/>
</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-25T01:32:15.906333" elapsed="0.000031"/>
</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-25T01:32:15.906677" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:15.906472" elapsed="0.000281"/>
</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-25T01:32:15.906997" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:15.906785" elapsed="0.000286"/>
</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-25T01:32:15.907291" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:15.907101" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:15.906449" elapsed="0.000950"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:15.906075" elapsed="0.001355"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:15.905842" elapsed="0.001705"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:15.907603" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:32:15.907855" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:15.907914" 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-25T01:32:15.899795" elapsed="0.008151"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:15.908553" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:15.908651" 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-25T01:32:15.908198" elapsed="0.000483"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:15.909435" 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-25T01:32:15.909076" elapsed="0.000448">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:15.908769" elapsed="0.000838">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:15.908746" elapsed="0.000903">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-25T01:32:15.909854" elapsed="0.000028"/>
</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-25T01:32:15.910122" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:15.910211" elapsed="0.000020"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:15.893136" elapsed="0.017211">No leader found.</status>
</kw>
<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-25T01:32:16.920762" 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-25T01:32:16.920277" elapsed="0.000518"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:16.921288" 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-25T01:32:16.920986" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:16.921364" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:32:16.921550" 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-25T01:32:16.919856" elapsed="0.001720"/>
</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-25T01:32:16.921737" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:16.922443" 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-25T01:32:16.922096" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:16.923023" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:16.922695" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:16.923512" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:16.923253" elapsed="0.000285"/>
</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-25T01:32:16.923994" elapsed="0.000027"/>
</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-25T01:32:16.924260" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:16.924112" elapsed="0.000204"/>
</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-25T01:32:16.924482" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:16.924341" elapsed="0.000196"/>
</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-25T01:32:16.924701" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:16.924559" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:16.924091" elapsed="0.000682"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:16.923791" elapsed="0.001006"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:16.923589" elapsed="0.001239"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:16.924877" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:32:16.925178" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:16.925225" 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-25T01:32:16.918616" elapsed="0.006632"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:16.925715" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:16.925793" 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-25T01:32:16.925431" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:16.926454" 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-25T01:32:16.926147" elapsed="0.000491">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:16.925904" elapsed="0.000818">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:16.925884" elapsed="0.000870">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-25T01:32:16.926949" elapsed="0.000080"/>
</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-25T01:32:16.927195" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:16.927262" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:16.911585" elapsed="0.015783">No leader found.</status>
</kw>
<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-25T01:32:17.934656" 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-25T01:32:17.933957" elapsed="0.000744"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:17.935426" 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-25T01:32:17.934943" elapsed="0.000521"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:17.935533" elapsed="0.000056"/>
</return>
<msg time="2026-04-25T01:32:17.935774" 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-25T01:32:17.933408" elapsed="0.002401"/>
</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-25T01:32:17.936053" elapsed="0.000247"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:17.937031" 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-25T01:32:17.936530" elapsed="0.000540"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:17.937668" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:17.937324" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:17.938276" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:17.937915" elapsed="0.000398"/>
</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-25T01:32:17.938907" elapsed="0.000035"/>
</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-25T01:32:17.939337" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:17.939125" elapsed="0.000292"/>
</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-25T01:32:17.939586" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:17.939443" elapsed="0.000197"/>
</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-25T01:32:17.939806" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:17.939663" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:17.939094" elapsed="0.000787"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:17.938664" elapsed="0.001243"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:17.938387" elapsed="0.001547"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:17.939991" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:32:17.940200" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:17.940246" 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-25T01:32:17.932348" elapsed="0.007921"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:17.940825" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:17.940905" 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-25T01:32:17.940531" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:17.941609" 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-25T01:32:17.941274" elapsed="0.000412">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:17.941018" elapsed="0.000740">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:17.940998" elapsed="0.000791">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-25T01:32:17.941948" elapsed="0.000040"/>
</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-25T01:32:17.942147" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:17.942215" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:17.928175" elapsed="0.014147">No leader found.</status>
</kw>
<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-25T01:32:18.953662" 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-25T01:32:18.953179" elapsed="0.000516"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:18.954227" 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-25T01:32:18.953892" elapsed="0.000362"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:18.954308" elapsed="0.000042"/>
</return>
<msg time="2026-04-25T01:32:18.954487" 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-25T01:32:18.952721" elapsed="0.001791"/>
</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-25T01:32:18.954674" elapsed="0.000185"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:18.955405" 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-25T01:32:18.955048" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:18.955892" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:18.955629" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:18.956343" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:18.956091" elapsed="0.000278"/>
</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-25T01:32:18.956844" elapsed="0.000028"/>
</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-25T01:32:18.957149" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:18.956986" elapsed="0.000221"/>
</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-25T01:32:18.957392" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:18.957235" elapsed="0.000213"/>
</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-25T01:32:18.957621" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:18.957473" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:18.956945" elapsed="0.000751"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:18.956649" elapsed="0.001072"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:18.956424" elapsed="0.001327"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:18.957795" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:32:18.958038" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:18.958085" 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-25T01:32:18.951105" elapsed="0.007004"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:18.958674" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:18.958755" 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-25T01:32:18.958372" elapsed="0.000408"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:18.959410" 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-25T01:32:18.959116" elapsed="0.000450">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:18.958867" elapsed="0.000779">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:18.958845" elapsed="0.000835">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-25T01:32:18.959862" elapsed="0.000027"/>
</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-25T01:32:18.960069" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:18.960137" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:18.943672" elapsed="0.016575">No leader found.</status>
</kw>
<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-25T01:32:19.967526" 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-25T01:32:19.966878" elapsed="0.000693"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:19.968263" 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-25T01:32:19.967814" elapsed="0.000485"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:19.968368" elapsed="0.000053"/>
</return>
<msg time="2026-04-25T01:32:19.968605" 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-25T01:32:19.966339" elapsed="0.002302"/>
</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-25T01:32:19.968864" elapsed="0.000258"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:19.969822" 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-25T01:32:19.969355" elapsed="0.000503"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:19.970440" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:19.970105" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:19.971043" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:32:19.970690" elapsed="0.000389"/>
</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-25T01:32:19.971685" elapsed="0.000036"/>
</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-25T01:32:19.972191" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:19.971840" elapsed="0.000434"/>
</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-25T01:32:19.972512" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:19.972311" elapsed="0.000277"/>
</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-25T01:32:19.972831" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:19.972624" elapsed="0.000277"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:19.971812" elapsed="0.001124"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:19.971427" elapsed="0.001563"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:19.971153" elapsed="0.001879"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:32:19.973088" elapsed="0.000040"/>
</return>
<msg time="2026-04-25T01:32:19.973367" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:32:19.973433" 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-25T01:32:19.965291" elapsed="0.008175"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:32:19.974133" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:32:19.974242" 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-25T01:32:19.973714" elapsed="0.000652"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:32:19.975208" 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-25T01:32:19.974785" elapsed="0.000526">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:32:19.974468" elapsed="0.000939">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:32:19.974442" elapsed="0.001011">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-25T01:32:19.975674" elapsed="0.000031"/>
</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-25T01:32:19.975925" elapsed="0.000031"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:19.976057" elapsed="0.000023"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:32:19.961105" elapsed="0.015105">No leader found.</status>
</kw>
<msg time="2026-04-25T01:32:19.976351" level="FAIL">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</msg>
<var>${inv_conf_leader}</var>
<var>${inv_conf_followers_list}</var>
<arg>10s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Get_Leader_And_Followers_For_Shard</arg>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.789569" elapsed="10.186921">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>config inventory Leader is ${inv_conf_leader} and followers are ${inv_conf_followers_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:32:19.976803" elapsed="0.000031"/>
</kw>
<return>
<value>${inv_conf_leader}</value>
<value>${inv_conf_followers_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:19.976892" elapsed="0.000021"/>
</return>
<var>${inventory_leader}</var>
<var>${inventory_followers}</var>
<doc>Check Status for Inventory Config shard in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:32:09.787424" elapsed="10.189632">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Inventory_Leader}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:32:19.977341" elapsed="0.000032"/>
</kw>
<doc>Find leader in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:32:09.774537" elapsed="10.203034">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s3-t17" name="Start Mininet Connect To Leader" line="141">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:19.982659" elapsed="0.000339"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:19.982272" elapsed="0.000812"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:19.984622" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:19.984452" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:19.984421" elapsed="0.000294"/>
</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-25T01:32:19.991616" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:19.991460" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:19.991433" elapsed="0.000280"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:19.993179" 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-25T01:32:19.992610" elapsed="0.000608"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:19.993854" 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-25T01:32:19.993445" elapsed="0.000443"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:19.993952" elapsed="0.000070"/>
</return>
<msg time="2026-04-25T01:32:19.994203" 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-25T01:32:19.992081" elapsed="0.002157"/>
</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-25T01:32:19.994738" elapsed="0.000032"/>
</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-25T01:32:19.995117" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:19.994877" elapsed="0.000318"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:19.994853" elapsed="0.000377"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:19.994533" elapsed="0.000730"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:19.994317" elapsed="0.000985"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:19.990940" elapsed="0.004524"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:19.984036" elapsed="0.011511"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:19.983376" elapsed="0.012238"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:19.978841" elapsed="0.016851"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:32:20.005263" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Inventory_Leader}_IP}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:32:19.996283" elapsed="0.009061">Variable '${Inventory_Leader}' not found.</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-25T01:32:20.005679" elapsed="0.000031"/>
</kw>
<doc>Start mininet with connection to Leader Node.</doc>
<status status="FAIL" start="2026-04-25T01:32:19.978093" elapsed="0.027789">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s3-t18" name="Add Bulk Flow From Leader" line="148">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:20.009733" elapsed="0.000290"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:20.009450" elapsed="0.000635"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:20.011185" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.011041" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.011016" elapsed="0.000245"/>
</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-25T01:32:20.016350" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.016235" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.016214" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.017496" 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-25T01:32:20.017078" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.018005" 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-25T01:32:20.017691" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:20.018079" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:32:20.018242" 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-25T01:32:20.016669" elapsed="0.001598"/>
</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-25T01:32:20.018689" elapsed="0.000033"/>
</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-25T01:32:20.018981" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:20.018811" elapsed="0.000226"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:20.018792" elapsed="0.000270"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:20.018493" elapsed="0.000593"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:20.018325" elapsed="0.000786"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:20.015815" elapsed="0.003352"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:20.010712" elapsed="0.008511"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:20.010243" elapsed="0.009028"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:20.006958" elapsed="0.012368"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:20.028087" level="FAIL">Variable '${temp_json_config_add}' not found.</msg>
<arg>${temp_json_config_add}</arg>
<arg>${Inventory_Leader}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.023767" elapsed="0.004370">Variable '${temp_json_config_add}' not found.</status>
</kw>
<doc>1000 Flows added via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.006326" elapsed="0.021975">Variable '${temp_json_config_add}' not found.</status>
</test>
<test id="s1-s3-t19" name="Get Bulk Flows and Verify In Cluster Before Leader Restart" line="152">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:20.032122" elapsed="0.000262"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:20.031787" elapsed="0.000659"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:20.033528" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.033391" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.033368" elapsed="0.000235"/>
</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-25T01:32:20.038592" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.038480" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.038462" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.039722" 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-25T01:32:20.039309" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.040250" 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-25T01:32:20.039917" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:20.040323" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:32:20.040493" 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-25T01:32:20.038904" elapsed="0.001614"/>
</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-25T01:32:20.040888" 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-25T01:32:20.041151" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:20.041002" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:20.040984" elapsed="0.000244"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:20.040742" elapsed="0.000509"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:20.040576" elapsed="0.000702"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:20.038108" elapsed="0.003225"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:20.033085" elapsed="0.008303"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:20.032609" elapsed="0.008825"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:20.029354" elapsed="0.012134"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:20.054004" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.049655" elapsed="0.004400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Initiate get operation and check flow count across cluster nodes</doc>
<status status="FAIL" start="2026-04-25T01:32:20.028690" elapsed="0.025538">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s3-t20" name="Verify Flows In Switch Before Leader Restart" line="159">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:20.057924" elapsed="0.000261"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:20.057653" elapsed="0.000590"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:20.059292" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.059163" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.059140" elapsed="0.000223"/>
</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-25T01:32:20.064346" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.064237" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.064219" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.065439" 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-25T01:32:20.065042" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.065919" 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-25T01:32:20.065629" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:20.066005" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:32:20.066229" 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-25T01:32:20.064645" elapsed="0.001610"/>
</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-25T01:32:20.066619" 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-25T01:32:20.066864" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:20.066717" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:20.066701" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:20.066471" elapsed="0.000508"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:20.066310" elapsed="0.000697"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:20.063853" elapsed="0.003208"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:20.058847" elapsed="0.008270"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:20.058397" elapsed="0.008766"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:20.055238" elapsed="0.011977"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:32:20.071501" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:32:20.067421" elapsed="0.004118">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch before leader restart.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.054610" elapsed="0.017073">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t21" name="Kill Leader From Cluster Node" line="166">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:20.076249" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:20.075930" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:20.077552" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.077433" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.077412" elapsed="0.000210"/>
</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-25T01:32:20.082545" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.082437" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.082419" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.083618" 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-25T01:32:20.083234" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.084143" 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-25T01:32:20.083805" elapsed="0.000365"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:20.084216" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:32:20.084373" 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-25T01:32:20.082839" elapsed="0.001559"/>
</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-25T01:32:20.084752" 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-25T01:32:20.085007" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:20.084847" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:20.084831" elapsed="0.000254"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:20.084608" elapsed="0.000500"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:20.084449" elapsed="0.000684"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:20.082077" elapsed="0.003108"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:20.077140" elapsed="0.008155"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:20.076690" elapsed="0.008651"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:20.072502" elapsed="0.012892"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:32:20.089879" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<arg>${Inventory_Leader}</arg>
<doc>Convenience keyword that kills the specified member of the cluster.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member}</doc>
<status status="FAIL" start="2026-04-25T01:32:20.085644" elapsed="0.004273">Variable '${Inventory_Leader}' not found.</status>
</kw>
<doc>Kill Leader Node.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.072008" elapsed="0.018063">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s3-t22" name="Stop Mininet Connected To Leader Node" line="170">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:20.093414" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:20.093147" elapsed="0.000536"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:20.094677" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.094562" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.094543" elapsed="0.000203"/>
</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-25T01:32:20.099727" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.099617" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.099599" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.100834" 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-25T01:32:20.100449" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.101363" 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-25T01:32:20.101070" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:20.101434" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:32:20.101587" 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-25T01:32:20.100035" elapsed="0.001576"/>
</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-25T01:32:20.101955" elapsed="0.000174"/>
</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-25T01:32:20.102355" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:20.102207" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:20.102190" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:20.101812" elapsed="0.000641"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:20.101662" elapsed="0.000816"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:20.099245" elapsed="0.003285"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:20.094275" elapsed="0.008332"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:20.093835" elapsed="0.008818"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:20.090823" elapsed="0.011882"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:32:20.110944" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:32:20.106889" elapsed="0.004106">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:32:20.111211" elapsed="0.000024"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.090351" elapsed="0.021007">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t23" name="Restart Leader from Cluster Node" line="175">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:20.114709" elapsed="0.000221"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:20.114442" elapsed="0.000559"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:20.116006" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.115876" elapsed="0.000249"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.115858" elapsed="0.000294"/>
</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-25T01:32:20.121204" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.121089" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.121066" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.122347" 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-25T01:32:20.121915" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.122828" 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-25T01:32:20.122538" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:20.122897" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:32:20.123070" 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-25T01:32:20.121504" elapsed="0.001591"/>
</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-25T01:32:20.123448" elapsed="0.000025"/>
</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-25T01:32:20.123817" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:20.123551" elapsed="0.000325"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:20.123534" elapsed="0.000367"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:20.123303" elapsed="0.000621"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:20.123150" elapsed="0.000800"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:20.120679" elapsed="0.003350"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:20.115587" elapsed="0.008517"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:20.115156" elapsed="0.009030"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:20.112147" elapsed="0.012096"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:32:20.128740" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<arg>${Inventory_Leader}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.124475" elapsed="0.004305">Variable '${Inventory_Leader}' not found.</status>
</kw>
<doc>Start Leader Node Up.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.111560" elapsed="0.017359">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s3-t24" name="Verify Data Recovery After Leader Restart" line="179">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:32:20.132420" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:32:20.132149" elapsed="0.000557"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:32:20.133738" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.133617" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.133597" elapsed="0.000210"/>
</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-25T01:32:20.138830" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:32:20.138722" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:32:20.138704" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.139917" 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-25T01:32:20.139528" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:32:20.140428" 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-25T01:32:20.140136" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:32:20.140498" elapsed="0.000031"/>
</return>
<msg time="2026-04-25T01:32:20.140654" 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-25T01:32:20.139147" elapsed="0.001532"/>
</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-25T01:32:20.141048" elapsed="0.000023"/>
</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-25T01:32:20.141364" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:32:20.141212" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:32:20.141194" elapsed="0.000247"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:32:20.140888" elapsed="0.000578"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:32:20.140732" elapsed="0.000761"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:32:20.138354" elapsed="0.003194"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:32:20.133323" elapsed="0.008281"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:32:20.132860" elapsed="0.008790"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:32:20.129802" elapsed="0.011901"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:20.154806" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.150544" elapsed="0.004304">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:22.175396" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:22.170458" elapsed="0.005010">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:24.194511" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:24.189950" elapsed="0.004620">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:26.214033" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:26.208771" elapsed="0.005325">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:28.233846" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:28.229438" elapsed="0.004475">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:30.251661" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:30.247281" elapsed="0.004435">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:32.271502" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:32.267038" elapsed="0.004520">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:34.289737" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:34.285365" elapsed="0.004432">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:36.309412" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:36.304895" elapsed="0.004574">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:38.329656" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:38.324056" elapsed="0.005654">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:40.347175" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:40.341407" elapsed="0.005835">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:42.365704" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:42.361398" elapsed="0.004361">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:44.385775" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:44.381311" elapsed="0.004518">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:46.405674" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:46.399096" elapsed="0.006661">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:48.425298" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:48.420566" elapsed="0.004814">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:50.446735" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:50.440786" elapsed="0.006019">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:52.466017" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:52.461600" elapsed="0.004479">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:54.483792" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:54.479439" elapsed="0.004411">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:56.505098" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:56.499337" elapsed="0.005819">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:32:58.523877" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:32:58.517884" elapsed="0.006067">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:00.544142" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:00.538883" elapsed="0.005320">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:02.564434" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:02.559916" elapsed="0.004586">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:04.584535" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:04.580005" elapsed="0.004590">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:06.606664" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:06.602267" elapsed="0.004457">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:08.626146" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:08.621795" elapsed="0.004407">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:10.645226" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:10.640076" elapsed="0.005203">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:12.664534" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:12.660229" elapsed="0.004360">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:14.684824" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:14.679505" elapsed="0.005523">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:16.705451" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:16.699217" elapsed="0.006306">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:18.728056" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:18.721912" elapsed="0.006203">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:20.748589" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:20.743664" elapsed="0.004993">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:22.766544" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:22.760757" elapsed="0.005851">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:24.782181" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:24.777089" elapsed="0.005150">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:26.800908" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:26.796488" elapsed="0.004497">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:28.820035" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:28.815525" elapsed="0.004565">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:30.838029" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:30.833536" elapsed="0.004551">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:32.855936" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:32.850049" elapsed="0.005970">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:34.876903" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:34.872062" elapsed="0.004892">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:36.894166" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:36.888432" elapsed="0.005798">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:38.913842" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:38.909412" elapsed="0.004487">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:40.933120" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:40.928759" elapsed="0.004417">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:42.950828" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:42.946371" elapsed="0.004512">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:44.972061" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:44.967471" elapsed="0.004651">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:46.990891" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:46.986557" elapsed="0.004388">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:49.009096" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:49.004640" elapsed="0.004512">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:51.027915" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:51.022885" elapsed="0.005098">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:53.047255" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:53.042869" elapsed="0.004443">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:55.065691" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:55.061343" elapsed="0.004403">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:57.085734" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:57.081179" elapsed="0.004617">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:33:59.104532" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:33:59.100135" elapsed="0.004456">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:01.122835" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:01.118272" elapsed="0.004619">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:03.141951" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:03.137573" elapsed="0.004452">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:05.161224" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:05.156846" elapsed="0.004433">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:07.181337" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:07.176766" elapsed="0.004637">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:09.201501" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:09.195584" elapsed="0.005984">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:11.219774" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:11.215378" elapsed="0.004450">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:13.237139" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:13.231376" elapsed="0.005828">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:15.255391" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:15.251091" elapsed="0.004363">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:17.274716" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:17.270414" elapsed="0.004355">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:19.295928" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:19.290987" elapsed="0.005019">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:21.317393" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:21.312617" elapsed="0.004846">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:23.336589" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:23.332033" elapsed="0.004618">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:25.356902" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:25.350651" elapsed="0.006307">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:27.379480" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:27.373567" elapsed="0.006013">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:29.396200" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:29.391883" elapsed="0.004370">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:31.414830" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:31.410365" elapsed="0.004527">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:33.434457" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:33.429764" elapsed="0.004767">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:35.453386" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:35.447488" elapsed="0.005966">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:37.470887" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:37.465083" elapsed="0.005873">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:39.488937" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:39.484621" elapsed="0.004383">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:41.506799" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:41.502445" elapsed="0.004411">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:43.523532" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:43.519170" elapsed="0.004418">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:45.541804" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:45.537378" elapsed="0.004487">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:47.561797" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:47.557357" elapsed="0.004516">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:49.579377" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:49.573589" elapsed="0.005873">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:51.598460" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:51.594000" elapsed="0.004517">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:53.614646" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:53.610319" elapsed="0.004422">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:55.634063" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:55.629738" elapsed="0.004383">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:57.652849" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:57.648434" elapsed="0.004472">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:34:59.674210" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:34:59.668488" elapsed="0.005773">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:01.693307" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:01.687898" elapsed="0.005468">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:03.711001" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:03.706565" elapsed="0.004493">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:05.730893" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:05.726520" elapsed="0.004454">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:07.752326" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:07.746379" elapsed="0.006004">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:09.772007" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:09.767652" elapsed="0.004413">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:11.791462" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:11.786341" elapsed="0.005174">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:13.810462" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:13.806123" elapsed="0.004401">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:15.830257" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:15.824760" elapsed="0.005563">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:17.849205" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:17.842875" elapsed="0.006400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:19.869091" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:19.863575" elapsed="0.005577">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:21.888891" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:21.884249" elapsed="0.004705">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:23.908557" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:23.904130" elapsed="0.004483">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:25.929037" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:25.923814" elapsed="0.005284">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:27.949670" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:27.945188" elapsed="0.004557">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:29.971245" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:29.966889" elapsed="0.004416">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:31.988204" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:31.983404" elapsed="0.004858">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:34.008696" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:34.003733" elapsed="0.005046">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:36.030399" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:36.024659" elapsed="0.005801">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:38.048237" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:38.043840" elapsed="0.004460">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:40.069841" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:40.065308" elapsed="0.004588">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:42.088191" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:42.083826" elapsed="0.004420">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:44.101297" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:44.096983" elapsed="0.004367">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:46.119793" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:46.114415" elapsed="0.005437">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:48.142108" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:48.137705" elapsed="0.004462">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:50.162990" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:50.158657" elapsed="0.004388">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:52.182974" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:52.178637" elapsed="0.004393">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:54.202377" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:54.195808" elapsed="0.006646">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:56.222409" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:56.217157" elapsed="0.005310">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:35:58.243039" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:35:58.238569" elapsed="0.004532">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:00.261461" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:00.257124" elapsed="0.004392">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:02.282727" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:02.278345" elapsed="0.004435">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:04.302030" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:04.297698" elapsed="0.004387">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:06.321586" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:06.316273" elapsed="0.005385">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:08.340758" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:08.335502" elapsed="0.005312">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:10.363123" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:10.356799" elapsed="0.006383">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:12.386739" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:12.382199" elapsed="0.004595">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:14.406551" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:14.402121" elapsed="0.004504">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:16.428031" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:16.422283" elapsed="0.005809">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:18.447853" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:18.443237" elapsed="0.004718">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:20.469073" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:20.463457" elapsed="0.005672">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:22.491663" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:22.485396" elapsed="0.006325">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:24.512153" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:24.507206" elapsed="0.005006">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:26.534228" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:26.529876" elapsed="0.004406">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:28.552613" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:28.548249" elapsed="0.004421">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:30.570043" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:30.564318" elapsed="0.005792">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:32.589359" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:32.584901" elapsed="0.004529">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:34.607754" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:34.602670" elapsed="0.005136">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:36.628142" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:36.622736" elapsed="0.005459">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:38.650239" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:38.644696" elapsed="0.005612">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:40.670513" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:40.665461" elapsed="0.005167">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:42.691513" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:42.687061" elapsed="0.004510">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:44.717640" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:44.711573" elapsed="0.006139">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:46.888268" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:46.883324" elapsed="0.005006">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:48.906629" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:48.902042" elapsed="0.004643">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:50.925415" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:50.920233" elapsed="0.005239">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:52.945600" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:52.941265" elapsed="0.004391">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:54.965681" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:54.960198" elapsed="0.005537">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:56.983344" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:56.979003" elapsed="0.004395">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:36:59.004139" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:36:58.999812" elapsed="0.004382">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:01.025504" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:01.020009" elapsed="0.005551">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:03.046091" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:03.041400" elapsed="0.004746">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:05.063337" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:05.057599" elapsed="0.005811">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:07.085074" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:07.079167" elapsed="0.005964">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:09.104506" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:09.099335" elapsed="0.005233">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:11.125978" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:11.120276" elapsed="0.005763">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:13.146237" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:13.140994" elapsed="0.005299">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:15.165510" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:15.161132" elapsed="0.004452">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:17.186766" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:17.180879" elapsed="0.005950">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:19.209775" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:19.202748" elapsed="0.007123">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:21.229789" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:21.223467" elapsed="0.006391">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:23.244497" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:23.239094" elapsed="0.005473">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:25.263637" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:25.258714" elapsed="0.004979">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:27.284678" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:27.279670" elapsed="0.005071">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:29.306281" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:29.300972" elapsed="0.005386">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:31.325062" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:31.320727" elapsed="0.004389">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:33.346425" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:33.340624" elapsed="0.005858">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:35.363648" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:35.357956" elapsed="0.005758">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:37.384189" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:37.379347" elapsed="0.004901">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:39.403221" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:39.398086" elapsed="0.005191">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:41.425509" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:41.419694" elapsed="0.005878">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:43.447845" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:43.441952" elapsed="0.005952">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:45.470704" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:45.464359" elapsed="0.006403">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:47.491648" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:47.487337" elapsed="0.004371">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:49.514129" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:49.508532" elapsed="0.005657">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:51.533488" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:51.528335" elapsed="0.005208">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:53.551435" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:53.547124" elapsed="0.004368">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:55.573632" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:55.567621" elapsed="0.006065">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:57.594604" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:57.589144" elapsed="0.005522">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:37:59.612901" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:37:59.608573" elapsed="0.004383">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:01.633427" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:01.628352" elapsed="0.005128">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:03.655614" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:03.651292" elapsed="0.004378">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:05.679315" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:05.672377" elapsed="0.007000">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:07.698975" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:07.693828" elapsed="0.005216">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:09.717743" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:09.712803" elapsed="0.005003">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:11.735606" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.731331" elapsed="0.004328">Variable '${temp_json_config_get}' not found.</status>
</kw>
<msg time="2026-04-25T01:38:11.735776" level="FAIL">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</msg>
<arg>${restart_timeout}</arg>
<arg>2s</arg>
<arg>BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster</arg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.141915" elapsed="351.594007">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>1000 Flows preserved in all controller instances.</doc>
<status status="FAIL" start="2026-04-25T01:32:20.129263" elapsed="351.606886">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s3-t25" name="Start Mininet Again Connect To Leader" line="194">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:11.740631" elapsed="0.000265"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:11.740347" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:11.742093" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.741935" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.741911" elapsed="0.000256"/>
</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-25T01:38:11.747131" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.747023" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.747004" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.748323" 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-25T01:38:11.747825" elapsed="0.000527"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.748810" 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-25T01:38:11.748519" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:11.748880" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:38:11.749058" 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-25T01:38:11.747444" elapsed="0.001639"/>
</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-25T01:38:11.749453" 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-25T01:38:11.749696" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.749550" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:11.749534" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:11.749307" elapsed="0.000561"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:11.749139" elapsed="0.000762"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:11.746644" elapsed="0.003313"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:11.741622" elapsed="0.008407"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:11.741132" elapsed="0.008942"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:11.737461" elapsed="0.012666"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:38:11.754695" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Inventory_Leader}_IP}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.750435" elapsed="0.004298">Variable '${Inventory_Leader}' not found.</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-25T01:38:11.754952" elapsed="0.000035"/>
</kw>
<doc>Start mininet with connection to Leader Node.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.736858" elapsed="0.018261">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s3-t26" name="Verify Flows In Switch After Leader Restart" line="201">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:11.759125" elapsed="0.000221"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:11.758834" elapsed="0.000568"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:11.760439" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.760300" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.760274" elapsed="0.000239"/>
</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-25T01:38:11.765563" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.765454" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.765436" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.766665" 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-25T01:38:11.766263" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.767172" 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-25T01:38:11.766861" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:11.767243" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:38:11.767401" 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-25T01:38:11.765860" elapsed="0.001566"/>
</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-25T01:38:11.767799" elapsed="0.000024"/>
</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-25T01:38:11.768065" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.767901" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:11.767884" elapsed="0.000258"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:11.767637" elapsed="0.000532"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:11.767480" elapsed="0.000722"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:11.765049" elapsed="0.003209"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:11.759993" elapsed="0.008320"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:11.759554" elapsed="0.008803"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:11.756258" elapsed="0.012153"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:38:11.772763" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:38:11.768618" elapsed="0.004184">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch after leader restart.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.755572" elapsed="0.017375">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t27" name="Stop Mininet Connected To Leader Node After Leader Restart" line="208">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:11.776562" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:11.776238" elapsed="0.000608"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:11.777901" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.777788" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.777769" elapsed="0.000215"/>
</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-25T01:38:11.782880" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.782774" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.782757" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.783946" 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-25T01:38:11.783565" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.784439" 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-25T01:38:11.784152" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:11.784510" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:38:11.784665" 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-25T01:38:11.783186" elapsed="0.001504"/>
</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-25T01:38:11.785077" elapsed="0.000023"/>
</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-25T01:38:11.785348" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.785181" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:11.785164" elapsed="0.000261"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:11.784914" elapsed="0.000534"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:11.784746" elapsed="0.000726"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:11.782418" elapsed="0.003108"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:11.777500" elapsed="0.008080"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:11.777030" elapsed="0.008594"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:11.773766" elapsed="0.011910"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:38:11.794151" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:38:11.789998" elapsed="0.004194">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:38:11.794409" elapsed="0.000025"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.773231" elapsed="0.021328">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t28" name="Delete All Flows From Leader Node" line="213">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:11.798843" elapsed="0.000371"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:11.798394" elapsed="0.000903"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:11.800796" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.800627" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.800599" elapsed="0.000300"/>
</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-25T01:38:11.807600" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.807493" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.807476" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.808674" 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-25T01:38:11.808291" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.809197" 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-25T01:38:11.808885" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:11.809333" elapsed="0.000033"/>
</return>
<msg time="2026-04-25T01:38:11.809494" 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-25T01:38:11.807896" elapsed="0.001623"/>
</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-25T01:38:11.809869" 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-25T01:38:11.810131" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.809981" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:11.809950" elapsed="0.000256"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:11.809725" elapsed="0.000504"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:11.809570" elapsed="0.000685"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:11.807130" elapsed="0.003178"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:11.800195" elapsed="0.010167"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:11.799531" elapsed="0.010875"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:11.795446" elapsed="0.015012"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:11.819131" level="FAIL">Variable '${temp_json_config_del}' not found.</msg>
<arg>${temp_json_config_del}</arg>
<arg>${Inventory_Leader}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.814832" elapsed="0.004338">Variable '${temp_json_config_del}' not found.</status>
</kw>
<doc>1000 Flows deleted via Leader Node and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.794868" elapsed="0.024440">Variable '${temp_json_config_del}' not found.</status>
</test>
<test id="s1-s3-t29" name="Verify No Flows In Cluster After Leader Restart" line="220">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:11.822769" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:11.822504" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:11.824038" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.823910" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.823892" elapsed="0.000215"/>
</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-25T01:38:11.829334" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.829201" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.829184" elapsed="0.000228"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.830495" 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-25T01:38:11.830088" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.830998" 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-25T01:38:11.830688" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:11.831071" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:38:11.831229" 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-25T01:38:11.829645" elapsed="0.001609"/>
</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-25T01:38:11.831612" 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-25T01:38:11.831859" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.831712" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:11.831694" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:11.831467" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:11.831308" elapsed="0.000691"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:11.828799" elapsed="0.003256"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:11.823624" elapsed="0.008550"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:11.823203" elapsed="0.009017"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:11.820199" elapsed="0.012074"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:11.844756" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_del}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.840456" elapsed="0.004341">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Verify flow count is 0 across cluster nodes.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.819589" elapsed="0.025358">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s3-t30" name="Get Inventory Follower Before follower Restart" line="227">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:11.848478" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:11.848202" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:11.849770" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.849657" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.849638" elapsed="0.000200"/>
</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-25T01:38:11.854860" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:11.854753" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:11.854735" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.855928" 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-25T01:38:11.855547" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.856426" 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-25T01:38:11.856137" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:11.856497" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:38:11.856652" 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-25T01:38:11.855167" 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-25T01:38:11.857040" 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-25T01:38:11.857297" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.857138" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:11.857122" elapsed="0.000250"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:11.856880" elapsed="0.000515"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:11.856728" elapsed="0.000691"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:11.854393" elapsed="0.003080"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:11.849367" elapsed="0.008159"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:11.848903" elapsed="0.008668"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:11.845850" elapsed="0.011773"/>
</kw>
<kw name="Get InventoryConfig Shard Status" owner="ClusterOpenFlow">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<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-25T01:38:11.864680" 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-25T01:38:11.864304" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.865175" 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-25T01:38:11.864869" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:11.865270" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:38:11.865425" 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-25T01:38:11.863912" elapsed="0.001538"/>
</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-25T01:38:11.865655" elapsed="0.000180"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.866352" 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-25T01:38:11.866015" elapsed="0.000364"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.866781" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:11.866540" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.867215" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:11.866958" elapsed="0.000282"/>
</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-25T01:38:11.867638" 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-25T01:38:11.867888" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.867741" elapsed="0.000203"/>
</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-25T01:38:11.868129" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.867985" elapsed="0.000198"/>
</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-25T01:38:11.868348" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:11.868206" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:11.867724" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:11.867468" elapsed="0.000975"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:11.867286" elapsed="0.001182"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:11.868506" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:38:11.868705" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:11.868750" 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-25T01:38:11.863186" elapsed="0.005587"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.869271" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:11.869350" 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-25T01:38:11.868948" elapsed="0.000426"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:11.869938" 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-25T01:38:11.869664" elapsed="0.000365">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:11.869444" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:11.869426" elapsed="0.000701">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-25T01:38:11.870282" elapsed="0.000022"/>
</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-25T01:38:11.870459" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:11.870525" elapsed="0.000014"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:11.860572" elapsed="0.010059">No leader found.</status>
</kw>
<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-25T01:38:12.882309" 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-25T01:38:12.881725" elapsed="0.000624"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:12.882943" 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-25T01:38:12.882572" elapsed="0.000428"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:12.883063" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:38:12.883272" 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-25T01:38:12.881234" elapsed="0.002070"/>
</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-25T01:38:12.883590" elapsed="0.000211"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:12.884474" 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-25T01:38:12.884039" elapsed="0.000469"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:12.885074" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:12.884722" elapsed="0.000388"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:12.885620" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:12.885318" elapsed="0.000334"/>
</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-25T01:38:12.886197" elapsed="0.000031"/>
</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-25T01:38:12.886531" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:12.886335" elapsed="0.000268"/>
</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-25T01:38:12.886825" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:12.886635" elapsed="0.000260"/>
</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-25T01:38:12.887131" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:12.886925" elapsed="0.000273"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:12.886311" elapsed="0.000916"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:12.885957" elapsed="0.001299"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:12.885716" elapsed="0.001570"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:12.887335" elapsed="0.000035"/>
</return>
<msg time="2026-04-25T01:38:12.887585" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:12.887644" 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-25T01:38:12.879152" elapsed="0.008522"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:12.888271" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:12.888368" 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-25T01:38:12.887903" elapsed="0.000496"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:12.889175" 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-25T01:38:12.888794" elapsed="0.000467">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:12.888488" elapsed="0.000854">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:12.888463" elapsed="0.000920">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-25T01:38:12.889587" elapsed="0.000027"/>
</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-25T01:38:12.889816" elapsed="0.000026"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:12.889901" elapsed="0.000019"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:12.871701" elapsed="0.018351">No leader found.</status>
</kw>
<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-25T01:38:13.899646" 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-25T01:38:13.899032" elapsed="0.000657"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:13.900378" 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-25T01:38:13.899923" elapsed="0.000492"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:13.900480" elapsed="0.000049"/>
</return>
<msg time="2026-04-25T01:38:13.900710" 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-25T01:38:13.898477" elapsed="0.002268"/>
</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-25T01:38:13.900982" elapsed="0.000237"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:13.902035" 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-25T01:38:13.901535" elapsed="0.000538"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:13.902638" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:13.902301" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:13.903253" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:13.902883" elapsed="0.000406"/>
</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-25T01:38:13.903856" elapsed="0.000034"/>
</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-25T01:38:13.904242" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:13.904030" elapsed="0.000306"/>
</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-25T01:38:13.904570" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:13.904370" elapsed="0.000276"/>
</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-25T01:38:13.904878" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:13.904679" elapsed="0.000280"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:13.904002" elapsed="0.001010"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:13.903621" elapsed="0.001425"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:13.903357" elapsed="0.001724"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:13.905136" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:38:13.905414" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:13.905478" 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-25T01:38:13.897436" elapsed="0.008075"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:13.906160" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:13.906269" 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-25T01:38:13.905752" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:13.907115" 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-25T01:38:13.906709" elapsed="0.000501">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:13.906401" elapsed="0.000901">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:13.906375" elapsed="0.000971">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-25T01:38:13.907561" elapsed="0.000031"/>
</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-25T01:38:13.907807" elapsed="0.000029"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:13.907900" elapsed="0.000022"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:13.891179" elapsed="0.016887">No leader found.</status>
</kw>
<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-25T01:38:14.919011" 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-25T01:38:14.918044" elapsed="0.001034"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:14.920207" 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-25T01:38:14.919449" elapsed="0.000788"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:14.920288" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:38:14.920458" 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-25T01:38:14.917171" elapsed="0.003312"/>
</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-25T01:38:14.920643" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:14.921328" 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-25T01:38:14.920989" elapsed="0.000365"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:14.921835" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:14.921590" elapsed="0.000271"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:14.922280" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:14.922033" elapsed="0.000273"/>
</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-25T01:38:14.922719" elapsed="0.000023"/>
</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-25T01:38:14.922992" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:14.922828" elapsed="0.000221"/>
</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-25T01:38:14.923220" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:14.923074" elapsed="0.000200"/>
</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-25T01:38:14.923441" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:14.923297" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:14.922808" elapsed="0.000706"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:14.922550" elapsed="0.000989"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:14.922358" elapsed="0.001208"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:14.923607" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:38:14.923824" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:14.923871" 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-25T01:38:14.915350" elapsed="0.008545"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:14.924362" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:14.924439" 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-25T01:38:14.924083" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:14.925047" 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-25T01:38:14.924751" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:14.924532" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:14.924514" elapsed="0.000705">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-25T01:38:14.925373" elapsed="0.000022"/>
</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-25T01:38:14.925549" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:14.925616" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:14.909113" elapsed="0.016607">No leader found.</status>
</kw>
<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-25T01:38:15.936460" 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-25T01:38:15.935692" elapsed="0.000800"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:15.936960" 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-25T01:38:15.936665" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:15.937065" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:38:15.937238" 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-25T01:38:15.934758" elapsed="0.002505"/>
</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-25T01:38:15.937418" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:15.938103" 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-25T01:38:15.937750" elapsed="0.000380"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:15.938532" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:15.938290" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:15.939041" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:15.938782" elapsed="0.000286"/>
</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-25T01:38:15.939496" elapsed="0.000025"/>
</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-25T01:38:15.939755" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:15.939607" elapsed="0.000205"/>
</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-25T01:38:15.939994" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:15.939837" elapsed="0.000213"/>
</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-25T01:38:15.940216" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:15.940073" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:15.939587" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:15.939326" elapsed="0.000990"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:15.939120" elapsed="0.001221"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:15.940382" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:38:15.940581" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:15.940627" 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-25T01:38:15.933119" elapsed="0.007532"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:15.941114" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:15.941192" 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-25T01:38:15.940824" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:15.941779" 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-25T01:38:15.941504" elapsed="0.000345">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:15.941286" elapsed="0.000629">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:15.941268" elapsed="0.000679">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-25T01:38:15.942117" elapsed="0.000022"/>
</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-25T01:38:15.942292" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:15.942360" elapsed="0.000017"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:15.926790" elapsed="0.015685">No leader found.</status>
</kw>
<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-25T01:38:16.949846" 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-25T01:38:16.949209" elapsed="0.000682"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:16.950596" 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-25T01:38:16.950162" elapsed="0.000473"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:16.950706" elapsed="0.000050"/>
</return>
<msg time="2026-04-25T01:38:16.951000" 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-25T01:38:16.948619" elapsed="0.002420"/>
</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-25T01:38:16.951271" elapsed="0.000170"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:16.951939" 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-25T01:38:16.951603" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:16.952385" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:16.952143" elapsed="0.000268"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:16.952798" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:16.952560" 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-25T01:38:16.953329" 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-25T01:38:16.953585" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:16.953438" elapsed="0.000203"/>
</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-25T01:38:16.953808" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:16.953665" elapsed="0.000197"/>
</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-25T01:38:16.954044" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:16.953886" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:16.953418" elapsed="0.000702"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:16.953156" elapsed="0.000987"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:16.952944" elapsed="0.001225"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:16.954210" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:38:16.954410" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:16.954456" 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-25T01:38:16.947524" elapsed="0.006956"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:16.954943" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:16.955038" 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-25T01:38:16.954653" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:16.955634" 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-25T01:38:16.955352" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:16.955132" elapsed="0.000640">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:16.955114" elapsed="0.000690">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-25T01:38:16.955958" elapsed="0.000037"/>
</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-25T01:38:16.956152" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:16.956218" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:16.943321" elapsed="0.013004">No leader found.</status>
</kw>
<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-25T01:38:17.967201" 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-25T01:38:17.966178" elapsed="0.001090"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:17.967766" 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-25T01:38:17.967466" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:17.967841" elapsed="0.000041"/>
</return>
<msg time="2026-04-25T01:38:17.968035" 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-25T01:38:17.965304" elapsed="0.002756"/>
</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-25T01:38:17.968216" elapsed="0.000171"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:17.968884" 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-25T01:38:17.968548" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:17.969335" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:17.969089" elapsed="0.000272"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:17.969754" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:17.969511" elapsed="0.000269"/>
</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-25T01:38:17.970251" elapsed="0.000025"/>
</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-25T01:38:17.970587" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:17.970437" elapsed="0.000206"/>
</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-25T01:38:17.970811" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:17.970668" elapsed="0.000197"/>
</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-25T01:38:17.971046" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:17.970888" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:17.970416" elapsed="0.000705"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:17.970078" elapsed="0.001066"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:17.969831" elapsed="0.001339"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:17.971209" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:38:17.971410" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:17.971457" 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-25T01:38:17.963639" elapsed="0.007841"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:17.971932" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:17.972027" 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-25T01:38:17.971655" elapsed="0.000396"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:17.972622" 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-25T01:38:17.972341" elapsed="0.000353">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:17.972121" elapsed="0.000640">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:17.972103" elapsed="0.000689">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-25T01:38:17.972945" elapsed="0.000040"/>
</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-25T01:38:17.973142" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:17.973208" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:17.957373" elapsed="0.015940">No leader found.</status>
</kw>
<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-25T01:38:18.978777" 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-25T01:38:18.978306" elapsed="0.000504"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:18.979302" 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-25T01:38:18.979000" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:18.979378" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:38:18.979547" 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-25T01:38:18.977896" elapsed="0.001676"/>
</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-25T01:38:18.979733" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:18.980427" 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-25T01:38:18.980081" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:18.980862" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:18.980618" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:18.981299" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:18.981057" elapsed="0.000268"/>
</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-25T01:38:18.981745" elapsed="0.000025"/>
</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-25T01:38:18.982137" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:18.981982" elapsed="0.000213"/>
</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-25T01:38:18.982366" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:18.982221" elapsed="0.000200"/>
</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-25T01:38:18.982587" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:18.982444" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:18.981947" elapsed="0.000713"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:18.981571" elapsed="0.001114"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:18.981376" elapsed="0.001336"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:18.982752" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:38:18.982952" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:18.983015" 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-25T01:38:18.977151" elapsed="0.005888"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:18.983495" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:18.983572" 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-25T01:38:18.983215" elapsed="0.000380"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:18.984189" 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-25T01:38:18.983885" elapsed="0.000378">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:18.983664" elapsed="0.000666">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:18.983646" elapsed="0.000716">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-25T01:38:18.984516" elapsed="0.000022"/>
</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-25T01:38:18.984691" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:18.984757" elapsed="0.000015"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:18.974037" elapsed="0.010824">No leader found.</status>
</kw>
<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-25T01:38:19.995020" 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-25T01:38:19.994536" elapsed="0.000517"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:19.995520" 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-25T01:38:19.995225" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:19.995595" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:38:19.995762" 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-25T01:38:19.993773" elapsed="0.002014"/>
</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-25T01:38:19.995943" elapsed="0.000182"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:19.996625" 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-25T01:38:19.996288" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:19.997069" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:19.996811" elapsed="0.000284"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:19.997499" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:19.997246" elapsed="0.000279"/>
</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-25T01:38:19.997936" 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-25T01:38:19.998210" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:19.998062" elapsed="0.000272"/>
</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-25T01:38:19.998506" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:19.998360" elapsed="0.000201"/>
</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-25T01:38:19.998727" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:19.998585" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:19.998042" elapsed="0.000759"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:19.997768" elapsed="0.001057"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:19.997576" elapsed="0.001276"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:19.998892" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:38:19.999110" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:19.999157" 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-25T01:38:19.992080" elapsed="0.007101"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:19.999636" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:19.999715" 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-25T01:38:19.999356" elapsed="0.000383"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:20.000325" 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-25T01:38:20.000044" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:19.999809" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:19.999791" elapsed="0.000702">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-25T01:38:20.000647" elapsed="0.000022"/>
</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-25T01:38:20.000822" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:20.000889" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:19.985872" elapsed="0.015137">No leader found.</status>
</kw>
<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-25T01:38:21.013862" 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-25T01:38:21.013299" elapsed="0.000596"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:21.014457" 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-25T01:38:21.014122" elapsed="0.000364"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:21.014537" elapsed="0.000043"/>
</return>
<msg time="2026-04-25T01:38:21.014713" 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-25T01:38:21.012187" elapsed="0.002551"/>
</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-25T01:38:21.014900" elapsed="0.000197"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:21.015639" 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-25T01:38:21.015277" elapsed="0.000398"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:21.016118" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:21.015853" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:21.016533" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:21.016294" elapsed="0.000264"/>
</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-25T01:38:21.017063" elapsed="0.000029"/>
</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-25T01:38:21.017380" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:21.017192" elapsed="0.000250"/>
</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-25T01:38:21.017698" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:21.017470" elapsed="0.000285"/>
</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-25T01:38:21.017926" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:21.017779" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:21.017164" elapsed="0.000857"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:21.016820" elapsed="0.001226"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:21.016612" elapsed="0.001461"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:21.018116" elapsed="0.000034"/>
</return>
<msg time="2026-04-25T01:38:21.018332" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:21.018391" 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-25T01:38:21.010215" elapsed="0.008203"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:21.019013" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:21.019096" 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-25T01:38:21.018621" elapsed="0.000498"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:21.019730" 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-25T01:38:21.019421" elapsed="0.000407">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:21.019192" elapsed="0.000709">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:21.019173" elapsed="0.000768">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-25T01:38:21.020144" elapsed="0.000025"/>
</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-25T01:38:21.020329" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:21.020396" elapsed="0.000017"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:21.002131" elapsed="0.018377">No leader found.</status>
</kw>
<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-25T01:38:22.031817" 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-25T01:38:22.030836" elapsed="0.001047"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.032947" 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-25T01:38:22.032281" elapsed="0.000753"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.033138" elapsed="0.000073"/>
</return>
<msg time="2026-04-25T01:38:22.033494" 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-25T01:38:22.029951" elapsed="0.003598"/>
</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-25T01:38:22.033893" elapsed="0.000386"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.035394" 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-25T01:38:22.034637" elapsed="0.000815"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.036355" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:22.035801" elapsed="0.000657"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.037369" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:38:22.036791" elapsed="0.000634"/>
</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-25T01:38:22.037871" 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-25T01:38:22.038145" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.037995" elapsed="0.000207"/>
</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-25T01:38:22.038369" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.038226" elapsed="0.000197"/>
</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-25T01:38:22.038663" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.038513" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.037961" elapsed="0.000777"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.037700" elapsed="0.001063"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.037500" elapsed="0.001289"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:38:22.038830" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:38:22.039048" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:38:22.039094" 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-25T01:38:22.028156" elapsed="0.010962"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.039577" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:38:22.039654" 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-25T01:38:22.039294" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.040265" 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-25T01:38:22.039984" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:38:22.039750" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:38:22.039732" elapsed="0.000718">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-25T01:38:22.040605" elapsed="0.000023"/>
</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-25T01:38:22.040782" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.040850" elapsed="0.000016"/>
</return>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</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-25T01:38:22.021540" elapsed="0.019417">No leader found.</status>
</kw>
<msg time="2026-04-25T01:38:22.041070" level="FAIL">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</msg>
<var>${inv_conf_leader}</var>
<var>${inv_conf_followers_list}</var>
<arg>10s</arg>
<arg>1s</arg>
<arg>ClusterManagement.Get_Leader_And_Followers_For_Shard</arg>
<arg>shard_name=inventory</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.859946" elapsed="10.181223">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>config inventory Leader is ${inv_conf_leader} and followers are ${inv_conf_followers_list}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:38:22.041396" elapsed="0.000022"/>
</kw>
<return>
<value>${inv_conf_leader}</value>
<value>${inv_conf_followers_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.041460" elapsed="0.000015"/>
</return>
<var>${inventory_leader}</var>
<var>${inventory_followers}</var>
<doc>Check Status for Inventory Config shard in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:38:11.857844" elapsed="10.183720">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</kw>
<kw name="Get From List" owner="Collections">
<var>${Follower_Node_2}</var>
<arg>${Inventory_Followers}</arg>
<arg>1</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-25T01:38:22.041754" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${Follower_Node_2}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:38:22.041975" elapsed="0.000023"/>
</kw>
<doc>Find follower in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:38:11.845307" elapsed="10.196828">Keyword 'ClusterManagement.Get_Leader_And_Followers_For_Shard' failed after retrying for 10 seconds. The last error was: No leader found.</status>
</test>
<test id="s1-s3-t31" name="Start Mininet Connect To Follower Node2" line="233">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:22.045722" elapsed="0.000239"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:22.045412" elapsed="0.000628"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:22.047061" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.046934" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.046916" elapsed="0.000213"/>
</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-25T01:38:22.052092" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.051979" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.051947" elapsed="0.000213"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.053187" 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-25T01:38:22.052793" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.053702" 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-25T01:38:22.053414" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.053773" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:38:22.053926" 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-25T01:38:22.052403" elapsed="0.001548"/>
</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-25T01:38:22.054313" 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-25T01:38:22.054554" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.054411" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.054394" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.054170" elapsed="0.000482"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.054018" elapsed="0.000658"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:22.051597" elapsed="0.003132"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:22.046644" elapsed="0.008140"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:22.046203" elapsed="0.008627"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:22.043076" elapsed="0.011806"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:38:22.059337" level="FAIL">Variable '${Follower_Node_2}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_2}_IP}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.055198" elapsed="0.004177">Variable '${Follower_Node_2}' not found.</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-25T01:38:22.059576" elapsed="0.000022"/>
</kw>
<doc>Start mininet with connection to Follower Node2.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.042503" elapsed="0.017216">Variable '${Follower_Node_2}' not found.</status>
</test>
<test id="s1-s3-t32" name="Add Bulk Flow From Follower Node2" line="240">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:22.063214" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:22.062931" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:22.064466" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.064345" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.064326" elapsed="0.000207"/>
</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-25T01:38:22.069468" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.069361" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.069344" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.070532" 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-25T01:38:22.070154" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.071023" 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-25T01:38:22.070720" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.071094" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:38:22.071247" 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-25T01:38:22.069757" elapsed="0.001515"/>
</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-25T01:38:22.071614" 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-25T01:38:22.071853" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.071709" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.071693" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.071470" elapsed="0.000532"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.071323" elapsed="0.000708"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:22.069002" elapsed="0.003083"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:22.064061" elapsed="0.008080"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:22.063630" elapsed="0.008555"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:22.060595" elapsed="0.011642"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:22.081091" level="FAIL">Variable '${temp_json_config_add}' not found.</msg>
<arg>${temp_json_config_add}</arg>
<arg>${Follower_Node_2}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.076689" elapsed="0.004444">Variable '${temp_json_config_add}' not found.</status>
</kw>
<doc>1000 Flows added via Follower Node2 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.060014" elapsed="0.021257">Variable '${temp_json_config_add}' not found.</status>
</test>
<test id="s1-s3-t33" name="Get Bulk Flows and Verify In Cluster Before Follower Restart" line="244">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:22.084766" elapsed="0.000249"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:22.084491" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:22.086059" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.085933" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.085914" elapsed="0.000214"/>
</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-25T01:38:22.091067" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.090944" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.090926" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.092121" 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-25T01:38:22.091730" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.092606" 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-25T01:38:22.092308" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.092677" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:38:22.092831" 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-25T01:38:22.091355" elapsed="0.001500"/>
</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-25T01:38:22.093215" 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-25T01:38:22.093458" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.093312" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.093295" elapsed="0.000244"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.093072" elapsed="0.000491"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.092905" elapsed="0.000682"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:22.090584" elapsed="0.003055"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:22.085647" elapsed="0.008047"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:22.085227" elapsed="0.008511"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:22.082181" elapsed="0.011608"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:22.106145" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.101889" elapsed="0.004295">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Initiate get operation and check flow count across cluster nodes.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.081551" elapsed="0.024774">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s3-t34" name="Verify Flows In Switch Before Follower Restart" line="251">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:22.109874" elapsed="0.000261"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:22.109568" elapsed="0.000626"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:22.111215" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.111095" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.111075" elapsed="0.000209"/>
</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-25T01:38:22.116261" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.116145" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.116122" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.117364" 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-25T01:38:22.116951" elapsed="0.000446"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.117851" 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-25T01:38:22.117563" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.117923" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:38:22.118096" 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-25T01:38:22.116571" elapsed="0.001550"/>
</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-25T01:38:22.118467" 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-25T01:38:22.118707" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.118563" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.118547" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.118324" elapsed="0.000479"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.118173" elapsed="0.000654"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:22.115761" elapsed="0.003119"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:22.110787" elapsed="0.008148"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:22.110349" elapsed="0.008645"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:22.107261" elapsed="0.011786"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:38:22.123799" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:38:22.119251" elapsed="0.004602">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch before follower restart.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.106629" elapsed="0.017431">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t35" name="Kill Follower Node2" line="258">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:22.128784" elapsed="0.000331"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:22.128400" elapsed="0.000841"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:22.130651" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.130497" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.130472" elapsed="0.000273"/>
</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-25T01:38:22.136486" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.136379" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.136361" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.137554" 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-25T01:38:22.137174" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.138041" 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-25T01:38:22.137741" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.138112" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:38:22.138305" 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-25T01:38:22.136777" elapsed="0.001553"/>
</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-25T01:38:22.138674" 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-25T01:38:22.138914" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.138770" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.138754" elapsed="0.000251"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.138531" elapsed="0.000497"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.138382" elapsed="0.000670"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:22.136003" elapsed="0.003102"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:22.130095" elapsed="0.009066"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:22.129484" elapsed="0.009722"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:22.125202" elapsed="0.014055"/>
</kw>
<kw name="Kill_Single_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:38:22.143576" level="FAIL">Variable '${Follower_Node_2}' not found.</msg>
<arg>${Follower_Node_2}</arg>
<doc>Convenience keyword that kills the specified member of the cluster.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member}</doc>
<status status="FAIL" start="2026-04-25T01:38:22.139504" elapsed="0.004109">Variable '${Follower_Node_2}' not found.</status>
</kw>
<doc>Kill Follower Node2.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.124480" elapsed="0.019262">Variable '${Follower_Node_2}' not found.</status>
</test>
<test id="s1-s3-t36" name="Stop Mininet Connected To Follower Node2 and Exit" line="262">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:22.147166" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:22.146879" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:22.148420" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.148295" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.148276" elapsed="0.000211"/>
</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-25T01:38:22.153378" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.153272" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.153254" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.154433" 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-25T01:38:22.154057" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.154904" 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-25T01:38:22.154619" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.154988" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:38:22.155142" 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-25T01:38:22.153667" elapsed="0.001500"/>
</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-25T01:38:22.155506" 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-25T01:38:22.155744" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.155600" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.155584" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.155364" elapsed="0.000478"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.155217" elapsed="0.000648"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:22.152900" elapsed="0.003017"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:22.148008" elapsed="0.007977"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:22.147579" elapsed="0.008490"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:22.144603" elapsed="0.011520"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:38:22.164441" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:38:22.160351" elapsed="0.004129">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:38:22.164695" elapsed="0.000025"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.143928" elapsed="0.020906">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t37" name="Restart Follower Node2" line="267">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:22.168004" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:22.167726" elapsed="0.000542"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:22.169282" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.169173" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.169155" elapsed="0.000194"/>
</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-25T01:38:22.174223" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.174117" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.174100" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.175323" 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-25T01:38:22.174886" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.175801" 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-25T01:38:22.175515" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.175871" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:38:22.176039" 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-25T01:38:22.174512" elapsed="0.001552"/>
</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-25T01:38:22.176421" 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-25T01:38:22.176660" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.176517" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.176501" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.176264" elapsed="0.000493"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.176116" elapsed="0.000664"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:22.173748" elapsed="0.003083"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:22.168871" elapsed="0.008014"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:22.168450" elapsed="0.008478"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:22.165453" elapsed="0.011547"/>
</kw>
<kw name="Start_Single_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:38:22.181344" level="FAIL">Variable '${Follower_Node_2}' not found.</msg>
<arg>${Follower_Node_2}</arg>
<doc>Convenience keyword that starts the specified member of the cluster.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.177228" elapsed="0.004155">Variable '${Follower_Node_2}' not found.</status>
</kw>
<doc>Start Follower Node2 Up.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.165038" elapsed="0.016474">Variable '${Follower_Node_2}' not found.</status>
</test>
<test id="s1-s3-t38" name="Verify Data Recovery After Follower Node2 Restart" line="271">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:38:22.184862" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:38:22.184598" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:38:22.186125" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.186015" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.185996" elapsed="0.000231"/>
</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-25T01:38:22.191184" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:38:22.191069" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-25T01:38:22.191046" elapsed="0.000206"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.192249" 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-25T01:38:22.191852" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:38:22.192748" 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-25T01:38:22.192462" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:38:22.192818" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:38:22.192984" 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-25T01:38:22.191474" elapsed="0.001537"/>
</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-25T01:38:22.193353" 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-25T01:38:22.193594" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:38:22.193450" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:38:22.193434" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:38:22.193210" elapsed="0.000482"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:38:22.193063" elapsed="0.000652"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:38:22.190678" elapsed="0.003089"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:38:22.185715" elapsed="0.008105"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:38:22.185299" elapsed="0.008565"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:38:22.182277" elapsed="0.011639"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:22.206972" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.202726" elapsed="0.004286">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:24.225829" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:24.221445" elapsed="0.004440">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:26.245750" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:26.240394" elapsed="0.005414">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:28.265000" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:28.260049" elapsed="0.005027">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:30.284933" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:30.280576" elapsed="0.004428">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:32.304017" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:32.299627" elapsed="0.004447">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:34.323305" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:34.318731" elapsed="0.004628">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:36.341367" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:36.336487" elapsed="0.005642">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:38.362586" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:38.356847" elapsed="0.005795">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:40.381270" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:40.376929" elapsed="0.004398">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:42.399221" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:42.393845" elapsed="0.005445">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:44.417167" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:44.412871" elapsed="0.004351">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:46.436762" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:46.432439" elapsed="0.004376">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:48.455411" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:48.451037" elapsed="0.004429">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:50.473197" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:50.468926" elapsed="0.004322">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:52.490695" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:52.486373" elapsed="0.004378">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:54.508950" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:54.504469" elapsed="0.004554">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:56.527851" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:56.523418" elapsed="0.004495">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:38:58.545863" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:38:58.541538" elapsed="0.004377">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:00.564328" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:00.559981" elapsed="0.004403">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:02.583012" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:02.578678" elapsed="0.004387">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:04.601319" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:04.597045" elapsed="0.004324">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:06.618972" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:06.614671" elapsed="0.004356">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:08.638902" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:08.634340" elapsed="0.004613">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:10.660451" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:10.654601" elapsed="0.005902">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:12.680400" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:12.674869" elapsed="0.005582">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:14.701413" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:14.697136" elapsed="0.004327">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:16.717106" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:16.712786" elapsed="0.004376">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:18.735268" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:18.730880" elapsed="0.004446">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:20.753806" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:20.747343" elapsed="0.006544">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:22.772610" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:22.768284" elapsed="0.004379">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:24.793882" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:24.787949" elapsed="0.005992">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:26.814095" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:26.808620" elapsed="0.005532">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:28.831083" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:28.826804" elapsed="0.004332">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:30.852342" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:30.847946" elapsed="0.004452">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:32.871051" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:32.866737" elapsed="0.004366">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:34.891362" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:34.885864" elapsed="0.005550">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:36.915128" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:36.908680" elapsed="0.006514">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:38.933988" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:38.929680" elapsed="0.004359">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:40.952543" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:40.948241" elapsed="0.004357">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:42.970671" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:42.966337" elapsed="0.004400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:44.987607" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:44.982942" elapsed="0.004731">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:47.006256" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:47.001859" elapsed="0.004456">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:49.025345" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:49.019728" elapsed="0.005685">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:51.043425" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:51.039061" elapsed="0.004420">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:53.062728" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:53.058328" elapsed="0.004459">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:55.079822" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:55.075393" elapsed="0.004485">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:57.097982" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:57.093598" elapsed="0.004447">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:39:59.116288" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:39:59.111836" elapsed="0.004513">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:01.135020" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:01.130653" elapsed="0.004425">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:03.153966" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:03.149520" elapsed="0.004514">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:05.175623" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:05.169890" elapsed="0.005788">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:07.194858" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:07.190522" elapsed="0.004391">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:09.210330" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:09.205219" elapsed="0.005168">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:11.230752" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:11.225821" elapsed="0.004988">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:13.249043" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:13.244428" elapsed="0.004681">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:15.267345" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:15.261325" elapsed="0.006092">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:17.285692" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:17.280282" elapsed="0.005515">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:19.305030" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:19.300665" elapsed="0.004423">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:21.324425" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:21.320082" elapsed="0.004400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:23.344607" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:23.340044" elapsed="0.004619">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:25.362304" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:25.357815" elapsed="0.004557">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:27.379380" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:27.375078" elapsed="0.004355">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:29.397572" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:29.393278" elapsed="0.004345">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:31.417335" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:31.412842" elapsed="0.004556">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:33.438553" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:33.432995" elapsed="0.005623">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:35.458279" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:35.453823" elapsed="0.004516">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:37.478340" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:37.473679" elapsed="0.004722">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:39.497393" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:39.493053" elapsed="0.004409">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:41.516771" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:41.512143" elapsed="0.004690">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:43.534768" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:43.529893" elapsed="0.004951">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:45.554745" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:45.550306" elapsed="0.004499">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:47.575806" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:47.571150" elapsed="0.004718">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:49.593351" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:49.588887" elapsed="0.004520">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:51.613152" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:51.608772" elapsed="0.004438">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:53.630898" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:53.626313" elapsed="0.004676">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:55.649230" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:55.644921" elapsed="0.004369">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:57.667706" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:57.663383" elapsed="0.004381">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:40:59.685364" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:40:59.681000" elapsed="0.004442">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:01.704711" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:01.700294" elapsed="0.004474">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:03.724987" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:03.720648" elapsed="0.004400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:05.743554" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:05.739141" elapsed="0.004473">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:07.762194" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:07.757701" elapsed="0.004563">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:09.780794" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:09.776422" elapsed="0.004429">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:11.800041" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:11.795718" elapsed="0.004383">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:13.820389" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:13.814205" elapsed="0.006259">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:15.839751" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:15.835349" elapsed="0.004461">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:17.860851" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:17.856271" elapsed="0.004638">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:19.880609" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:19.875523" elapsed="0.005155">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:21.900151" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:21.895815" elapsed="0.004391">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:23.918803" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:23.914517" elapsed="0.004339">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:25.940011" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:25.934315" elapsed="0.005771">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:27.958869" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:27.954488" elapsed="0.004459">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:29.977357" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:29.971156" elapsed="0.006271">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:31.997562" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:31.992853" elapsed="0.004781">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:34.016911" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:34.012589" elapsed="0.004377">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:36.035315" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:36.030957" elapsed="0.004416">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:38.053756" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:38.049419" elapsed="0.004408">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:40.072067" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:40.067692" elapsed="0.004430">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:42.091120" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:42.086774" elapsed="0.004399">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:44.110107" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:44.104855" elapsed="0.005330">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:46.128556" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:46.124059" elapsed="0.004556">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:48.147422" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:48.143105" elapsed="0.004371">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:50.165434" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:50.161054" elapsed="0.004436">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:52.183270" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:52.178955" elapsed="0.004368">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:54.202961" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:54.198569" elapsed="0.004482">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:56.221866" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:56.217462" elapsed="0.004461">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:41:58.240748" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:41:58.235859" elapsed="0.004945">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:00.259845" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:00.255439" elapsed="0.004460">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:02.277546" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:02.273254" elapsed="0.004375">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:04.297142" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:04.292798" elapsed="0.004402">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:06.315344" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:06.310812" elapsed="0.004593">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:08.332906" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:08.328375" elapsed="0.004606">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:10.353992" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:10.348382" elapsed="0.005682">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:12.373594" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:12.367334" elapsed="0.006400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:14.391732" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:14.387361" elapsed="0.004428">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:16.411314" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:16.406679" elapsed="0.004693">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:18.429960" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:18.424029" elapsed="0.006036">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:20.450768" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:20.444976" elapsed="0.005848">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:22.469082" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:22.464024" elapsed="0.005112">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:24.490787" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:24.486461" elapsed="0.004385">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:26.509185" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:26.504868" elapsed="0.004371">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:28.529233" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:28.524834" elapsed="0.004460">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:30.547745" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:30.543417" elapsed="0.004380">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:32.565913" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:32.561452" elapsed="0.004535">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:34.585040" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:34.580453" elapsed="0.004642">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:36.605508" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:36.601127" elapsed="0.004444">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:38.623305" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:38.617455" elapsed="0.005926">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:40.641127" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:40.636748" elapsed="0.004439">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:42.658723" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:42.654418" elapsed="0.004362">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:44.678845" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:44.674492" elapsed="0.004410">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:46.699370" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:46.694829" elapsed="0.004608">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:48.717960" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:48.713507" elapsed="0.004524">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:50.737996" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:50.733444" elapsed="0.004614">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:52.755909" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:52.751560" elapsed="0.004416">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:54.777429" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:54.773104" elapsed="0.004387">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:56.796813" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:56.792324" elapsed="0.004553">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:42:58.817117" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:42:58.812367" elapsed="0.004806">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:00.837326" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:00.832003" elapsed="0.005380">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:02.858671" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:02.853613" elapsed="0.005117">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:04.879123" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:04.873690" elapsed="0.005502">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:06.900327" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:06.895992" elapsed="0.004393">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:08.918013" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:08.912259" elapsed="0.005840">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:10.936554" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:10.932209" elapsed="0.004403">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:12.954628" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:12.950246" elapsed="0.004435">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:14.979025" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:14.972357" elapsed="0.006746">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:16.996850" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:16.992531" elapsed="0.004376">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:19.015499" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:19.011195" elapsed="0.004361">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:21.033889" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:21.029514" elapsed="0.004432">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:23.052834" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:23.048387" elapsed="0.004513">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:25.071059" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:25.066386" elapsed="0.004736">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:27.091089" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:27.085835" elapsed="0.005327">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:29.112820" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:29.108406" elapsed="0.004480">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:31.126189" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:31.121800" elapsed="0.004452">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:33.146536" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:33.142219" elapsed="0.004371">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:35.163892" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:35.158124" elapsed="0.005892">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:37.182709" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:37.178362" elapsed="0.004400">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:39.201778" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:39.197130" elapsed="0.004720">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:41.222381" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:41.216905" elapsed="0.005534">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:43.243144" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:43.237477" elapsed="0.005730">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:45.262370" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:45.257448" elapsed="0.004981">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:47.283528" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:47.277666" elapsed="0.005923">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:49.302815" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:49.298253" elapsed="0.004628">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:51.320570" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:51.316195" elapsed="0.004431">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:53.342236" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:53.336382" elapsed="0.005934">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:55.360533" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:55.356130" elapsed="0.004463">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:57.383213" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:57.378668" elapsed="0.004608">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:43:59.403735" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:43:59.398363" elapsed="0.005425">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:01.424691" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:01.420211" elapsed="0.004541">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:03.442621" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:03.437875" elapsed="0.004808">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:05.463646" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:05.457958" elapsed="0.005745">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:07.480856" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:07.476554" elapsed="0.004357">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:09.498020" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:09.492327" elapsed="0.005764">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:11.517439" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:11.511082" elapsed="0.006419">Variable '${temp_json_config_get}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:13.535830" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.531431" elapsed="0.004462">Variable '${temp_json_config_get}' not found.</status>
</kw>
<msg time="2026-04-25T01:44:13.536029" level="FAIL">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</msg>
<arg>${restart_timeout}</arg>
<arg>2s</arg>
<arg>BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster</arg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.194139" elapsed="351.342044">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>1000 Flows preserved in all controller instances.</doc>
<status status="FAIL" start="2026-04-25T01:38:22.181761" elapsed="351.354630">Keyword 'BulkomaticKeywords.Get Bulk Flow And Verify Count In Cluster' failed after retrying for 5 minutes 50 seconds. The last error was: Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s3-t39" name="Start Mininet Again Connect To Follower Node2" line="286">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.540692" elapsed="0.000319"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.540407" elapsed="0.000668"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.542356" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.542201" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.542168" elapsed="0.000264"/>
</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-25T01:44:13.547459" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.547345" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.547326" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.548585" 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-25T01:44:13.548178" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.549217" 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-25T01:44:13.548895" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.549291" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:44:13.549474" 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-25T01:44:13.547772" elapsed="0.001727"/>
</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-25T01:44:13.549895" elapsed="0.000023"/>
</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-25T01:44:13.550223" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.550013" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.549994" elapsed="0.000310"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.549739" elapsed="0.000588"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.549559" elapsed="0.000795"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.546959" elapsed="0.003453"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.541837" elapsed="0.008630"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.541240" elapsed="0.009274"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.537850" elapsed="0.012718"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<msg time="2026-04-25T01:44:13.555172" level="FAIL">Variable '${Follower_Node_2}' not found.</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>${ODL_SYSTEM_${Follower_Node_2}_IP}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.550889" elapsed="0.004324">Variable '${Follower_Node_2}' not found.</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-25T01:44:13.555453" elapsed="0.000023"/>
</kw>
<doc>Start mininet with connection to follower node1.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.537087" elapsed="0.018530">Variable '${Follower_Node_2}' not found.</status>
</test>
<test id="s1-s3-t40" name="Verify Flows In Switch After Follower Node2 Restart" line="293">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.560185" elapsed="0.000244"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.559887" elapsed="0.000602"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.561626" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.561485" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.561458" elapsed="0.000240"/>
</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-25T01:44:13.566692" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.566582" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.566563" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.567792" 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-25T01:44:13.567396" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.568289" 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-25T01:44:13.567998" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.568359" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:44:13.568518" 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-25T01:44:13.567009" elapsed="0.001534"/>
</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-25T01:44:13.568905" 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-25T01:44:13.569165" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.569018" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.569000" elapsed="0.000315"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.568759" elapsed="0.000580"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.568600" elapsed="0.000796"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.566208" elapsed="0.003260"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.561105" elapsed="0.008420"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.560644" elapsed="0.008927"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.557065" elapsed="0.012560"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<msg time="2026-04-25T01:44:13.575127" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="FAIL" start="2026-04-25T01:44:13.569840" elapsed="0.005374">Variable '${mininet_conn_id}' not found.</status>
</kw>
<doc>Verify flows are installed in switch after follower restart.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.556335" elapsed="0.019180">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t41" name="Stop Mininet Connected To Follower Node2" line="300">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.580548" elapsed="0.000337"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.580189" elapsed="0.000794"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.582464" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.582284" elapsed="0.000251"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.582250" elapsed="0.000319"/>
</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-25T01:44:13.589128" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.588934" elapsed="0.000252"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.588900" elapsed="0.000309"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.590678" 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-25T01:44:13.590058" elapsed="0.000664"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.591236" 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-25T01:44:13.590903" elapsed="0.000361"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.591310" elapsed="0.000036"/>
</return>
<msg time="2026-04-25T01:44:13.591479" 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-25T01:44:13.589547" elapsed="0.001963"/>
</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-25T01:44:13.591907" elapsed="0.000023"/>
</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-25T01:44:13.592175" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.592024" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.592006" elapsed="0.000247"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.591755" elapsed="0.000521"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.591577" elapsed="0.000725"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.588325" elapsed="0.004035"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.581855" elapsed="0.010564"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.581203" elapsed="0.011264"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.577334" elapsed="0.015202"/>
</kw>
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<msg time="2026-04-25T01:44:13.601696" level="FAIL">Variable '${mininet_conn_id}' not found.</msg>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="FAIL" start="2026-04-25T01:44:13.597400" elapsed="0.004341">Variable '${mininet_conn_id}' not found.</status>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<status status="NOT RUN" start="2026-04-25T01:44:13.601999" elapsed="0.000029"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.576339" elapsed="0.025833">Variable '${mininet_conn_id}' not found.</status>
</test>
<test id="s1-s3-t42" name="Delete All Flows From Follower Node 2" line="305">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.605909" elapsed="0.000257"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.605608" elapsed="0.000636"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.607396" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.607277" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.607255" elapsed="0.000212"/>
</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-25T01:44:13.612681" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.612558" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.612534" elapsed="0.000216"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.613815" 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-25T01:44:13.613407" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.614321" 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-25T01:44:13.614026" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.614393" elapsed="0.000038"/>
</return>
<msg time="2026-04-25T01:44:13.614568" 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-25T01:44:13.613000" elapsed="0.001600"/>
</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-25T01:44:13.614994" elapsed="0.000024"/>
</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-25T01:44:13.615243" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.615094" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.615077" elapsed="0.000243"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.614829" elapsed="0.000514"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.614670" elapsed="0.000698"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.612168" elapsed="0.003255"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.606916" elapsed="0.008562"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.606412" elapsed="0.009124"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.603169" elapsed="0.012424"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:13.624620" level="FAIL">Variable '${temp_json_config_del}' not found.</msg>
<arg>${temp_json_config_del}</arg>
<arg>${Follower_Node_2}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.620173" elapsed="0.004490">Variable '${temp_json_config_del}' not found.</status>
</kw>
<doc>1000 Flows deleted via Leader Node and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.602482" elapsed="0.022352">Variable '${temp_json_config_del}' not found.</status>
</test>
<test id="s1-s3-t43" name="Verify No Flows In Cluster After Follower Node2 Restart" line="312">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.628995" elapsed="0.000268"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.628615" elapsed="0.000711"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.630682" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.630516" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.630485" elapsed="0.000291"/>
</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-25T01:44:13.637186" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.637037" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.637009" elapsed="0.000268"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.638699" 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-25T01:44:13.638159" elapsed="0.000572"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.639322" 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-25T01:44:13.638931" elapsed="0.000421"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.639497" elapsed="0.000046"/>
</return>
<msg time="2026-04-25T01:44:13.639696" 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-25T01:44:13.637648" elapsed="0.002078"/>
</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-25T01:44:13.640184" elapsed="0.000027"/>
</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-25T01:44:13.640512" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.640314" elapsed="0.000265"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.640290" elapsed="0.000317"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.640003" elapsed="0.000631"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.639793" elapsed="0.000873"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.636506" elapsed="0.004226"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.630123" elapsed="0.010676"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.629519" elapsed="0.011336"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.625697" elapsed="0.015225"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:13.654377" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_del}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.649839" elapsed="0.004594">Variable '${temp_json_config_get}' not found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:44:13.625064" elapsed="0.029558">Variable '${temp_json_config_get}' not found.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-25T01:44:13.655666" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-25T01:44:13.655543" elapsed="0.000184"/>
</kw>
<doc>Test suite for Cluster HA with Bulk Flows - Data consistency after cluster restart, leader restart and follower restart with one switch connected</doc>
<status status="FAIL" start="2026-04-25T01:26:06.585111" elapsed="1087.070651"/>
</suite>
<suite id="s1-s4" name="Cluster Current Term Verification 3Node Cluster" source="/w/workspace/openflowplugin-csit-3node-clustering-bulkomatic-only-vanadium/test/csit/suites/openflowplugin/Clustering_Bulkomatic/040__Cluster_Current_Term_Verification_3Node_Cluster.robot">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils" type="SETUP">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.747649" 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-25T01:44:13.743242" elapsed="0.004461"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-25T01:44:13.743000" elapsed="0.004776"/>
</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-25T01:44:13.752908" 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-25T01:44:13.748921" elapsed="0.004016"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-25T01:44:13.753165" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.753040" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.753014" elapsed="0.000221"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.753767" 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-25T01:44:13.753392" elapsed="0.000418"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.754310" 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-25T01:44:13.753995" elapsed="0.000342"/>
</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-25T01:44:13.754851" elapsed="0.000314"/>
</kw>
<msg time="2026-04-25T01:44:13.755263" level="INFO">${status} = PASS</msg>
<msg time="2026-04-25T01:44:13.755309" 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-25T01:44:13.754507" elapsed="0.000825"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.755875" 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-25T01:44:13.755503" elapsed="0.000399"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.756898" 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-25T01:44:13.756632" elapsed="0.000293"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.757427" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:44:13.757166" elapsed="0.000288"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.757980" 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-25T01:44:13.757634" elapsed="0.000392"/>
</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-25T01:44:13.760808" elapsed="0.000029"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.760592" elapsed="0.000295"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.758089" elapsed="0.002827"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.761578" 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-25T01:44:13.761106" elapsed="0.000525"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.762211" 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-25T01:44:13.761802" elapsed="0.000453"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.762865" 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-25T01:44:13.762437" elapsed="0.000477"/>
</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-25T01:44:13.756176" elapsed="0.006817"/>
</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-25T01:44:13.748551" elapsed="0.014501"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.763246" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.763118" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.763099" elapsed="0.000234"/>
</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-25T01:44:13.767565" 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-25T01:44:13.767119" elapsed="0.000480"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.768132" 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-25T01:44:13.767784" elapsed="0.000376"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.768206" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:44:13.768511" 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-25T01:44:13.766689" elapsed="0.001846"/>
</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-25T01:44:13.768878" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.768698" elapsed="0.000239"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.768587" elapsed="0.000389"/>
</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-25T01:44:13.763628" elapsed="0.005406"/>
</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-25T01:44:13.769193" 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-25T01:44:13.769742" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.769602" elapsed="0.000205"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.769454" elapsed="0.000378"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-25T01:44:13.748095" elapsed="0.021791"/>
</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-25T01:44:13.772532" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.772420" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.772401" elapsed="0.000199"/>
</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-25T01:44:13.777532" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.777385" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.777368" elapsed="0.000232"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.778606" 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-25T01:44:13.778227" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.779099" 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-25T01:44:13.778796" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.779170" elapsed="0.000027"/>
</return>
<msg time="2026-04-25T01:44:13.779320" 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-25T01:44:13.777874" elapsed="0.001471"/>
</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-25T01:44:13.779684" 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-25T01:44:13.779925" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.779779" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.779763" elapsed="0.000252"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.779542" elapsed="0.000497"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.779395" elapsed="0.000668"/>
</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-25T01:44:13.777101" elapsed="0.003014"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.770485" elapsed="0.009684"/>
</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-25T01:44:13.770064" elapsed="0.010146"/>
</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-25T01:44:13.742603" elapsed="0.037694"/>
</kw>
<test id="s1-s4-t1" name="Check Shard And Get Inventory" line="36">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.784578" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.784290" elapsed="0.000561"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.785948" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.785835" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.785816" elapsed="0.000226"/>
</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-25T01:44:13.791395" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.791270" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.791245" elapsed="0.000219"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.792545" 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-25T01:44:13.792160" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.793047" 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-25T01:44:13.792736" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.793132" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:44:13.793296" 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-25T01:44:13.791722" elapsed="0.001600"/>
</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-25T01:44:13.793754" elapsed="0.000031"/>
</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-25T01:44:13.794094" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.793883" elapsed="0.000280"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.793862" elapsed="0.000333"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.793569" elapsed="0.000655"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.793382" elapsed="0.000872"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.790827" elapsed="0.003491"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.785535" elapsed="0.008885"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.785039" elapsed="0.009426"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.781091" elapsed="0.013426"/>
</kw>
<kw name="Check Shards Status And Initialize Variables">
<kw name="Check OpenFlow Shards Status" owner="ClusterOpenFlow">
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-25T01:44:13.820126" elapsed="0.000269"/>
</kw>
<msg time="2026-04-25T01:44:13.820451" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:44:13.819369" elapsed="0.001139"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove Values From List [['inventory', 'topology', 'default', 'entity-ownership'], 'entity-ownership'] {} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:44:13.818803" elapsed="0.001784"/>
</kw>
<msg time="2026-04-25T01:44:13.820633" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T01:44:13.808764" elapsed="0.011913"/>
</kw>
<arg>Collections.Remove Values From List</arg>
<arg>${SHARD_OPER_LIST}</arg>
<arg>entity-ownership</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-25T01:44:13.808308" elapsed="0.012444"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.821232" level="INFO">['inventory', 'topology', 'default']</msg>
<arg>${SHARD_OPER_LIST}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:44:13.820952" elapsed="0.000327"/>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<for flavor="IN">
<iter>
<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-25T01:44:13.826619" 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-25T01:44:13.826230" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.827121" 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-25T01:44:13.826811" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.827194" elapsed="0.000030"/>
</return>
<msg time="2026-04-25T01:44:13.827351" 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-25T01:44:13.825834" elapsed="0.001542"/>
</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-25T01:44:13.827569" elapsed="0.000212"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.828355" level="INFO">${ds_type} = operational</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-25T01:44:13.827953" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.828786" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:44:13.828545" elapsed="0.000267"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.829234" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T01:44:13.828978" elapsed="0.000295"/>
</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-25T01:44:13.829714" 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-25T01:44:13.829987" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.829822" elapsed="0.000227"/>
</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-25T01:44:13.830235" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.830073" elapsed="0.000232"/>
</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-25T01:44:13.830537" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.830338" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.829803" elapsed="0.000828"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.829533" elapsed="0.001122"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.829322" elapsed="0.001358"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-25T01:44:13.830740" elapsed="0.000037"/>
</return>
<msg time="2026-04-25T01:44:13.831045" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-25T01:44:13.831093" 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-25T01:44:13.825050" elapsed="0.006067"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.831639" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T01:44:13.831734" 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-25T01:44:13.831298" elapsed="0.000465"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.832450" 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-25T01:44:13.832119" elapsed="0.000420">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-25T01:44:13.831845" elapsed="0.000775">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-25T01:44:13.831823" elapsed="0.000834">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-25T01:44:13.832841" elapsed="0.000024"/>
</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-25T01:44:13.833040" elapsed="0.000022"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.833110" elapsed="0.000015"/>
</return>
<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>
<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-25T01:44:13.822362" elapsed="0.010860">No leader found.</status>
</kw>
<var name="${shard_name}">inventory</var>
<status status="FAIL" start="2026-04-25T01:44:13.822117" elapsed="0.011175">No leader found.</status>
</iter>
<var>${shard_name}</var>
<value>@{shard_name_list}</value>
<status status="FAIL" start="2026-04-25T01:44:13.821949" elapsed="0.011399">No leader found.</status>
</for>
<arg>shard_name_list=${SHARD_OPER_LIST}</arg>
<arg>shard_type=operational</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.821549" elapsed="0.011889">No leader found.</status>
</kw>
<kw name="Verify_Leader_Exists_For_Each_Shard" owner="ClusterManagement">
<arg>shard_name_list=${SHARD_CONF_LIST}</arg>
<arg>shard_type=config</arg>
<arg>member_index_list=${controller_index_list}</arg>
<doc>For each shard name, call Get_Leader_And_Followers_For_Shard.
Not much logic there, but single Keyword is useful when using BuiltIn.Wait_Until_Keyword_Succeeds.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.833743" elapsed="0.000031"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.795080" elapsed="0.038806">No leader found.</status>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<var>${temp_json_config_add}</var>
<arg>${orig_json_config_add}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Add json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.834395" elapsed="0.000026"/>
</kw>
<kw name="Set DPN And Flow Count In Json Get" owner="BulkomaticKeywords">
<var>${temp_json_config_get}</var>
<arg>${orig_json_config_get}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Get json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.834696" elapsed="0.000025"/>
</kw>
<kw name="Set DPN And Flow Count In Json Del" owner="BulkomaticKeywords">
<var>${temp_json_config_del}</var>
<arg>${orig_json_config_del}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Del json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.835024" elapsed="0.000025"/>
</kw>
<kw name="Set DPN And Flow Count In Json Del" owner="BulkomaticKeywords">
<var>${temp_json_config_del_ten_percent}</var>
<arg>${orig_json_config_del}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch_ten_percent}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Del json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.835352" elapsed="0.000024"/>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<var>${temp_json_config_add_ten_percent}</var>
<arg>${orig_json_config_add}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch_ten_percent}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Add json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.835686" elapsed="0.000025"/>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<var>${temp_json_config_table}</var>
<arg>${orig_json_config_table_add}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Add json file.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.836020" elapsed="0.000033"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_add}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.836358" elapsed="0.000031"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_get}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.836585" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_del}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.836784" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_del_ten_percent}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.836993" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_add_ten_percent}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.837192" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${temp_json_config_table}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.837424" elapsed="0.000020"/>
</kw>
<doc>Check Status for all shards in OpenFlow application.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.794723" elapsed="0.042861">No leader found.</status>
</kw>
<kw name="Get Inventory Follower">
<doc>Find a leader and followers in the inventory config shard</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.837795" elapsed="0.000023"/>
</kw>
<doc>Check Status for all shards and Finding a leader and followers in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:44:13.780360" elapsed="0.057595">No leader found.</status>
</test>
<test id="s1-s4-t2" name="Initial Current Term Verification" line="41">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.841642" elapsed="0.000236"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.841246" elapsed="0.000694"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.843047" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.842907" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.842858" elapsed="0.000258"/>
</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-25T01:44:13.848479" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.848371" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.848352" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.849614" 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-25T01:44:13.849192" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.850114" 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-25T01:44:13.849805" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.850185" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:44:13.850339" 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-25T01:44:13.848791" elapsed="0.001573"/>
</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-25T01:44:13.850729" elapsed="0.000023"/>
</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-25T01:44:13.850991" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.850830" elapsed="0.000215"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.850813" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.850582" elapsed="0.000509"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.850416" elapsed="0.000700"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.847995" elapsed="0.003173"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.842571" elapsed="0.008652"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.842114" elapsed="0.009155"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.838886" elapsed="0.012436"/>
</kw>
<kw name="Get_Current_Term_Of_Shard_At_Member">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:44:13.856609" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<var>${current_term_value}</var>
<arg>CurrentTerm</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${Inventory_Leader}</arg>
<arg>${verify_restconf}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.851999" elapsed="0.004650">Variable '${Inventory_Leader}' not found.</status>
</kw>
<return>
<value>${current_term_value}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.856718" elapsed="0.000017"/>
</return>
<var>${current_term_value_before}</var>
<doc>Find a Raft Property Values From Shard Member</doc>
<status status="FAIL" start="2026-04-25T01:44:13.851464" elapsed="0.005356">Variable '${Inventory_Leader}' not found.</status>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Current Term is ${current_term_value_before}</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.857001" elapsed="0.000023"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${current_term_value_before}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.857182" elapsed="0.000020"/>
</kw>
<doc>Verifying current term for Leader Node Before</doc>
<status status="FAIL" start="2026-04-25T01:44:13.838345" elapsed="0.018978">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s4-t3" name="Add Bulk Flow From Follower" line="47">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.860546" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.860282" elapsed="0.000563"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.861854" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.861746" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.861727" elapsed="0.000195"/>
</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-25T01:44:13.866912" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.866808" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.866790" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.867984" 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-25T01:44:13.867591" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.868593" 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-25T01:44:13.868173" elapsed="0.000446"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.868664" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:44:13.868816" 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-25T01:44:13.867218" elapsed="0.001623"/>
</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-25T01:44:13.869196" 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-25T01:44:13.869435" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.869292" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.869276" elapsed="0.000234"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.869053" elapsed="0.000493"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.868892" elapsed="0.000678"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.866451" elapsed="0.003172"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.861441" elapsed="0.008237"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.861017" elapsed="0.008705"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.858128" elapsed="0.011645"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:13.878873" level="FAIL">Variable '${temp_json_config_add}' not found.</msg>
<arg>${temp_json_config_add}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.874510" elapsed="0.004401">Variable '${temp_json_config_add}' not found.</status>
</kw>
<doc>10000 Flows added via Follower Node1 and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.857597" elapsed="0.021463">Variable '${temp_json_config_add}' not found.</status>
</test>
<test id="s1-s4-t4" name="Get Bulk Flows And Verify In Cluster" line="51">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.882280" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.882006" elapsed="0.000537"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.883530" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.883421" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.883402" elapsed="0.000195"/>
</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-25T01:44:13.888602" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.888495" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.888478" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.889721" 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-25T01:44:13.889314" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.890214" 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-25T01:44:13.889910" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.890284" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:44:13.890435" 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-25T01:44:13.888923" elapsed="0.001536"/>
</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-25T01:44:13.890875" 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-25T01:44:13.891141" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.890991" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.890956" elapsed="0.000261"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.890732" elapsed="0.000509"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.890576" elapsed="0.000689"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.888138" elapsed="0.003180"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.883133" elapsed="0.008240"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.882696" elapsed="0.008722"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.879753" elapsed="0.011717"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:13.904510" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.900099" elapsed="0.004450">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Initiate get operation and check flow count across cluster nodes</doc>
<status status="FAIL" start="2026-04-25T01:44:13.879263" elapsed="0.025433">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s4-t5" name="Current Term Verification After Adding Bulk Flow" line="59">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.908323" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.908057" elapsed="0.000530"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.909616" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.909490" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.909472" elapsed="0.000211"/>
</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-25T01:44:13.914684" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.914578" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.914560" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.915781" 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-25T01:44:13.915369" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.916278" 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-25T01:44:13.915990" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.916351" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:44:13.916504" 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-25T01:44:13.914988" elapsed="0.001540"/>
</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-25T01:44:13.916868" 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-25T01:44:13.917128" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.916979" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.916947" elapsed="0.000256"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.916725" elapsed="0.000501"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.916579" elapsed="0.000671"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.914224" elapsed="0.003077"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.909204" elapsed="0.008151"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.908740" elapsed="0.008697"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.905711" elapsed="0.011779"/>
</kw>
<kw name="Get_Current_Term_Of_Shard_At_Member">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:44:13.922591" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<var>${current_term_value}</var>
<arg>CurrentTerm</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${Inventory_Leader}</arg>
<arg>${verify_restconf}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.918066" elapsed="0.004564">Variable '${Inventory_Leader}' not found.</status>
</kw>
<return>
<value>${current_term_value}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.922697" elapsed="0.000017"/>
</return>
<var>${current_term_value_after}</var>
<doc>Find a Raft Property Values From Shard Member</doc>
<status status="FAIL" start="2026-04-25T01:44:13.917644" elapsed="0.005154">Variable '${Inventory_Leader}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${current_term_value_after}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.923010" elapsed="0.000025"/>
</kw>
<doc>Verifying current term for Leader Node after pushing the flows</doc>
<status status="FAIL" start="2026-04-25T01:44:13.905021" elapsed="0.018136">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s4-t6" name="Current Term Comparison Before And After Addition Of Flow" line="64">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.926784" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.926517" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.928059" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.927927" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.927908" elapsed="0.000218"/>
</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-25T01:44:13.933110" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.933001" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.932956" elapsed="0.000220"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.934187" 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-25T01:44:13.933789" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.934664" 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-25T01:44:13.934377" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.934734" elapsed="0.000029"/>
</return>
<msg time="2026-04-25T01:44:13.934886" 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-25T01:44:13.933396" elapsed="0.001514"/>
</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-25T01:44:13.935271" 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-25T01:44:13.935515" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.935367" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.935351" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.935126" elapsed="0.000487"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.934960" elapsed="0.000677"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.932620" elapsed="0.003068"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.927644" elapsed="0.008097"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.927219" elapsed="0.008566"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.924137" elapsed="0.011698"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.940439" level="FAIL">Variable '${current_term_value_after}' not found.</msg>
<arg>Current Term after pushing the flows is ${current_term_value_after}</arg>
<doc>Logs the given message to the console.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.936005" elapsed="0.004472">Variable '${current_term_value_after}' not found.</status>
</kw>
<if>
<branch type="IF" condition="${current_term_value_before} == ${current_term_value_after}">
<kw name="Log" owner="BuiltIn">
<arg>SUCCESS</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.940729" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.940555" elapsed="0.000225"/>
</branch>
<branch type="ELSE">
<kw name="Log" owner="BuiltIn">
<arg>FAILURE</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.941013" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.940835" elapsed="0.000231"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.940536" elapsed="0.000551"/>
</if>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${current_term_value_before}</arg>
<arg>${current_term_value_after}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.941254" elapsed="0.000020"/>
</kw>
<doc>Comparison of Current Term Before and After Addition of Flows</doc>
<status status="FAIL" start="2026-04-25T01:44:13.923508" elapsed="0.017890">Variable '${current_term_value_after}' not found.</status>
</test>
<test id="s1-s4-t7" name="Delete and Add ten percent of the flows for 5 iterations" line="74">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.945115" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.944777" elapsed="0.000607"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.946463" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.946353" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.946334" elapsed="0.000197"/>
</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-25T01:44:13.951514" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.951408" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.951390" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.952570" 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-25T01:44:13.952192" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.953063" 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-25T01:44:13.952758" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.953133" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:44:13.953283" 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-25T01:44:13.951802" elapsed="0.001505"/>
</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-25T01:44:13.953699" 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-25T01:44:13.953945" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.953799" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.953782" elapsed="0.000268"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.953537" elapsed="0.000536"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.953357" elapsed="0.000740"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.951050" elapsed="0.003099"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.946060" elapsed="0.008142"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.945538" elapsed="0.008708"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.942437" elapsed="0.011860"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.954919" level="INFO">1</msg>
<arg>${index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T01:44:13.954666" elapsed="0.000313"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:13.963429" level="FAIL">Variable '${temp_json_config_del_ten_percent}' not found.</msg>
<arg>${temp_json_config_del_ten_percent}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.959597" elapsed="0.003870">Variable '${temp_json_config_del_ten_percent}' not found.</status>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_del_ten_percent}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.971751" elapsed="0.000028"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<arg>${temp_json_config_add_ten_percent}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.976219" elapsed="0.000026"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:13.984484" elapsed="0.000028"/>
</kw>
<var name="${index}">1</var>
<status status="FAIL" start="2026-04-25T01:44:13.954513" elapsed="0.030100">Variable '${temp_json_config_del_ten_percent}' not found.</status>
</iter>
<var>${index}</var>
<value>1</value>
<value>6</value>
<status status="FAIL" start="2026-04-25T01:44:13.954348" elapsed="0.030324">Variable '${temp_json_config_del_ten_percent}' not found.</status>
</for>
<doc>Performeing 5 iterations for Delete and Add ten Percentage of the flows</doc>
<status status="FAIL" start="2026-04-25T01:44:13.941759" elapsed="0.043042">Variable '${temp_json_config_del_ten_percent}' not found.</status>
</test>
<test id="s1-s4-t8" name="Current Term Verification After Continuous Deletion and Addition Of Flows for 5 iterations" line="98">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:13.988119" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:13.987837" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:13.989367" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.989258" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.989240" elapsed="0.000195"/>
</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-25T01:44:13.994450" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:13.994344" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:13.994326" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.995505" 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-25T01:44:13.995128" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:13.995993" 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-25T01:44:13.995692" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:13.996066" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:44:13.996219" 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-25T01:44:13.994739" elapsed="0.001504"/>
</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-25T01:44:13.996583" 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-25T01:44:13.996834" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:13.996679" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:13.996663" elapsed="0.000248"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:13.996442" elapsed="0.000492"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:13.996295" elapsed="0.000663"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:13.993982" elapsed="0.003047"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:13.988952" elapsed="0.008133"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:13.988533" elapsed="0.008596"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:13.985652" elapsed="0.011530"/>
</kw>
<kw name="Get_Current_Term_Of_Shard_At_Member">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:44:14.002304" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<var>${current_term_value}</var>
<arg>CurrentTerm</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${Inventory_Leader}</arg>
<arg>${verify_restconf}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-04-25T01:44:13.997754" elapsed="0.004589">Variable '${Inventory_Leader}' not found.</status>
</kw>
<return>
<value>${current_term_value}</value>
<status status="NOT RUN" start="2026-04-25T01:44:14.002410" elapsed="0.000017"/>
</return>
<var>${current_term_value_after}</var>
<doc>Find a Raft Property Values From Shard Member</doc>
<status status="FAIL" start="2026-04-25T01:44:13.997321" elapsed="0.005202">Variable '${Inventory_Leader}' not found.</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${current_term_value_after}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.002703" elapsed="0.000022"/>
</kw>
<doc>Verifying current term for Leader Node after continuous deletion and addition of ten percent of the flows</doc>
<status status="FAIL" start="2026-04-25T01:44:13.985096" elapsed="0.017754">Variable '${Inventory_Leader}' not found.</status>
</test>
<test id="s1-s4-t9" name="Current Term Comparison Before and After Continuous Deletion and Addition Of Flows for 5 iterations" line="103">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:14.006272" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:14.005958" elapsed="0.000583"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:14.007578" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:14.007467" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:14.007448" elapsed="0.000198"/>
</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-25T01:44:14.012844" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:14.012738" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:14.012720" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.013953" 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-25T01:44:14.013529" elapsed="0.000477"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.014456" 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-25T01:44:14.014169" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:14.014527" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:44:14.014679" 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-25T01:44:14.013154" elapsed="0.001550"/>
</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-25T01:44:14.015055" 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-25T01:44:14.015297" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:14.015153" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:14.015136" elapsed="0.000235"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:14.014899" elapsed="0.000495"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:14.014754" elapsed="0.000664"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:14.012239" elapsed="0.003231"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:14.007139" elapsed="0.008385"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:14.006694" elapsed="0.008874"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:14.003713" elapsed="0.011906"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.020239" level="FAIL">Variable '${current_term_value_after}' not found.</msg>
<arg>Current Term after pushing the flows is ${current_term_value_after}</arg>
<doc>Logs the given message to the console.</doc>
<status status="FAIL" start="2026-04-25T01:44:14.015771" elapsed="0.004507">Variable '${current_term_value_after}' not found.</status>
</kw>
<if>
<branch type="IF" condition="${current_term_value_before} == ${current_term_value_after}">
<kw name="Log" owner="BuiltIn">
<arg>SUCCESS</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.020526" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:14.020358" elapsed="0.000220"/>
</branch>
<branch type="ELSE">
<kw name="Log" owner="BuiltIn">
<arg>FAILURE</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.020758" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:14.020602" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:14.020339" elapsed="0.000490"/>
</if>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${current_term_value_before}</arg>
<arg>${current_term_value_after}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.021009" elapsed="0.000021"/>
</kw>
<doc>Comparison Current Term Before and After Continuous Deletion and Addition Of Flows for 5 iterations</doc>
<status status="FAIL" start="2026-04-25T01:44:14.003159" elapsed="0.017996">Variable '${current_term_value_after}' not found.</status>
</test>
<test id="s1-s4-t10" name="Delete All Flows From Follower Node" line="113">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:14.024467" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:14.024205" elapsed="0.000526"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:14.025731" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:14.025620" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:14.025586" elapsed="0.000213"/>
</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-25T01:44:14.030828" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:14.030721" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:14.030704" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.031897" 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-25T01:44:14.031521" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.032453" 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-25T01:44:14.032141" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:14.032526" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:44:14.032679" 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-25T01:44:14.031145" elapsed="0.001558"/>
</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-25T01:44:14.033059" 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-25T01:44:14.033305" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:14.033158" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:14.033141" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:14.032901" elapsed="0.000502"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:14.032754" elapsed="0.000673"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:14.030363" elapsed="0.003116"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:14.025322" elapsed="0.008212"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:14.024882" elapsed="0.008695"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:14.022072" elapsed="0.011599"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:14.042635" level="FAIL">Variable '${temp_json_config_del}' not found.</msg>
<arg>${temp_json_config_del}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="FAIL" start="2026-04-25T01:44:14.038313" elapsed="0.004359">Variable '${temp_json_config_del}' not found.</status>
</kw>
<doc>10000 Flows deleted via Leader Node and verify it gets applied in all instances.</doc>
<status status="FAIL" start="2026-04-25T01:44:14.021474" elapsed="0.021333">Variable '${temp_json_config_del}' not found.</status>
</test>
<test id="s1-s4-t11" name="Verify No Flows In Cluster After Flow Deletion" line="120">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:14.046069" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:14.045790" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:14.047314" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:14.047206" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:14.047187" elapsed="0.000194"/>
</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-25T01:44:14.052349" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:14.052244" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:14.052227" elapsed="0.000188"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.053511" 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-25T01:44:14.053024" elapsed="0.000524"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.054161" 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-25T01:44:14.053834" elapsed="0.000352"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:14.054234" elapsed="0.000032"/>
</return>
<msg time="2026-04-25T01:44:14.054391" 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-25T01:44:14.052636" elapsed="0.001779"/>
</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-25T01:44:14.054769" elapsed="0.000020"/>
</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-25T01:44:14.055029" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:14.054866" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:14.054850" elapsed="0.000255"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:14.054625" elapsed="0.000503"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:14.054469" elapsed="0.000728"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:14.051875" elapsed="0.003380"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:14.046905" elapsed="0.008404"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:14.046486" elapsed="0.008866"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:14.043630" elapsed="0.011773"/>
</kw>
<kw name="Get Bulk Flow And Verify Count In Cluster" owner="BulkomaticKeywords">
<msg time="2026-04-25T01:44:14.070013" level="FAIL">Variable '${temp_json_config_get}' not found.</msg>
<arg>${temp_json_config_get}</arg>
<arg>${operation_timeout}</arg>
<arg>${flow_count_after_del}</arg>
<arg>${Inventory_Leader_List}</arg>
<doc>Get Bulk Flow and Verify Flow Count in ${controller_index_list} matches ${flow_count}.</doc>
<status status="FAIL" start="2026-04-25T01:44:14.065588" elapsed="0.004469">Variable '${temp_json_config_get}' not found.</status>
</kw>
<doc>Verifying No FLows in Cluster after Flows Deletion</doc>
<status status="FAIL" start="2026-04-25T01:44:14.043096" elapsed="0.027108">Variable '${temp_json_config_get}' not found.</status>
</test>
<test id="s1-s4-t12" name="PreLeader Verification" line="128">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-25T01:44:14.073448" elapsed="0.000226"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-25T01:44:14.073183" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_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-25T01:44:14.074723" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:14.074610" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:14.074591" elapsed="0.000201"/>
</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-25T01:44:14.079773" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-25T01:44:14.079666" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-25T01:44:14.079648" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.080837" 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-25T01:44:14.080460" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T01:44:14.081329" 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-25T01:44:14.081041" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-25T01:44:14.081401" elapsed="0.000028"/>
</return>
<msg time="2026-04-25T01:44:14.081555" 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-25T01:44:14.080082" elapsed="0.001498"/>
</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-25T01:44:14.081937" 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-25T01:44:14.082200" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-25T01:44:14.082054" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-25T01:44:14.082037" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-25T01:44:14.081794" elapsed="0.000505"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-25T01:44:14.081644" elapsed="0.000679"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</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-25T01:44:14.079306" elapsed="0.003070"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-25T01:44:14.074323" elapsed="0.008108"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-25T01:44:14.073881" elapsed="0.008594"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-25T01:44:14.071043" elapsed="0.011484"/>
</kw>
<kw name="Get_Last_Index_Of_Shard_At_Member">
<kw name="Get_Raft_Property_From_Shard_Member" owner="ClusterManagement">
<msg time="2026-04-25T01:44:14.087550" level="FAIL">Variable '${Inventory_Leader}' not found.</msg>
<var>${LastIndex}</var>
<arg>LastIndex</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${Inventory_Leader}</arg>
<arg>${verify_restconf}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft property.
Optionally, check restconf works.</doc>
<status status="FAIL" start="2026-04-25T01:44:14.083087" elapsed="0.004501">Variable '${Inventory_Leader}' not found.</status>
</kw>
<return>
<value>${LastIndex}</value>
<status status="NOT RUN" start="2026-04-25T01:44:14.087656" elapsed="0.000017"/>
</return>
<var>${LastIndex}</var>
<doc>Find a leader and followers in the inventory config shard</doc>
<status status="FAIL" start="2026-04-25T01:44:14.082669" elapsed="0.005090">Variable '${Inventory_Leader}' not found.</status>
</kw>
<kw name="Get_Last_Applied_Of_Shard_At_Member">
<var>${LastApplied}</var>
<doc>Find a leader and followers in the inventory config shard</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.087939" elapsed="0.000037"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${LastIndex}</arg>
<arg>${LastApplied}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.088165" elapsed="0.000021"/>
</kw>
<kw name="Add Table In Node" owner="BulkomaticKeywords">
<arg>${temp_json_config_table}</arg>
<arg>${Follower_Node_1}</arg>
<arg>${operation_timeout}</arg>
<doc>Add Table Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.092587" elapsed="0.000026"/>
</kw>
<kw name="Get_Last_Index_Of_Shard_At_Member">
<var>${LastIndex}</var>
<doc>Find a leader and followers in the inventory config shard</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.092754" elapsed="0.000022"/>
</kw>
<kw name="Get_Last_Applied_Of_Shard_At_Member">
<var>${LastApplied}</var>
<doc>Find a leader and followers in the inventory config shard</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.092900" elapsed="0.000021"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${LastIndex}</arg>
<arg>${LastApplied}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="NOT RUN" start="2026-04-25T01:44:14.093105" elapsed="0.000021"/>
</kw>
<doc>Verifying LastIndex and LastApplied and compare both are equal</doc>
<status status="FAIL" start="2026-04-25T01:44:14.070513" elapsed="0.022735">Variable '${Inventory_Leader}' not found.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-25T01:44:14.093921" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-25T01:44:14.093834" elapsed="0.000153"/>
</kw>
<doc>Test suite for OF-18 Spurious Leader Election verification of term change while flows are added/deleted</doc>
<status status="FAIL" start="2026-04-25T01:44:13.656777" elapsed="0.437244"/>
</suite>
<status status="FAIL" start="2026-04-25T01:07:08.817989" elapsed="2225.277151"/>
</suite>
<statistics>
<total>
<stat pass="2" fail="101" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="openflowplugin-clustering-bulkomatic.txt" id="s1" pass="2" fail="101" skip="0">openflowplugin-clustering-bulkomatic.txt</stat>
<stat name="Cluster Reconcilliation Multi DPN" id="s1-s1" pass="0" fail="18" skip="0">openflowplugin-clustering-bulkomatic.txt.Cluster Reconcilliation Multi DPN</stat>
<stat name="Cluster HA Data Recovery BulkFlow 2Node Cluster" id="s1-s2" pass="0" fail="30" skip="0">openflowplugin-clustering-bulkomatic.txt.Cluster HA Data Recovery BulkFlow 2Node Cluster</stat>
<stat name="Cluster HA Data Recovery BulkFlow Single Switch" id="s1-s3" pass="2" fail="41" skip="0">openflowplugin-clustering-bulkomatic.txt.Cluster HA Data Recovery BulkFlow Single Switch</stat>
<stat name="Cluster Current Term Verification 3Node Cluster" id="s1-s4" pass="0" fail="12" skip="0">openflowplugin-clustering-bulkomatic.txt.Cluster Current Term Verification 3Node Cluster</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
